1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/toml/tests/reflect_test.v

109 lines
1.9 KiB
V

import toml
const toml_text = '# This TOML can reflect to a struct
name = "Tom"
age = 45
height = 1.97
birthday = 1980-04-23
strings = [
"v matures",
"like rings",
"spread in the",
"water"
]
bools = [true, false, true, true]
bools_br = [
true,
false,
true,
true
]
floats = [0.0, 1.0, 2.0, 3.0]
floats_br = [
0.0,
1.05,
2.025,
3.5001
]
int_map = {"a" = 0, "b" = 1, "c" = 2, "d" = 3}
[bio]
text = "Tom has done many great things"
years_of_service = 5
[field_remap]
txt = "I am remapped"
uint64 = 100
[config]
data = [ 1, 2, 3 ]
levels = { "info" = 1, "warn" = 2, "critical" = 3 }
'
struct FieldRemap {
text string [toml: 'txt']
num u64 [toml: 'uint64']
}
struct Bio {
text string
years_of_service int
}
struct User {
name string
age int
height f64
birthday toml.Date
strings []string
bools []bool
bools_br []bool
floats []f32
floats_br []f32
int_map map[string]int
config toml.Any
mut:
bio Bio
remap FieldRemap
}
fn test_reflect() {
toml_doc := toml.parse_text(toml_text) or { panic(err) }
mut user := toml_doc.reflect[User]()
user.bio = toml_doc.value('bio').reflect[Bio]()
user.remap = toml_doc.value('field_remap').reflect[FieldRemap]()
assert user.name == 'Tom'
assert user.age == 45
assert user.height == 1.97
assert user.birthday.str() == '1980-04-23'
assert user.strings == ['v matures', 'like rings', 'spread in the', 'water']
assert user.bools == [true, false, true, true]
assert user.bools_br == [true, false, true, true]
assert user.floats == [f32(0.0), 1.0, 2.0, 3.0]
assert user.floats_br == [f32(0.0), 1.05, 2.025, 3.5001]
assert user.int_map == {
'a': 0
'b': 1
'c': 2
'd': 3
}
assert user.bio.text == 'Tom has done many great things'
assert user.bio.years_of_service == 5
assert user.remap.text == 'I am remapped'
assert user.remap.num == 100
assert user.config.value('data[0]').int() == 1
assert user.config.value('levels.warn').int() == 2
}