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

toml: add pub fn (d Doc) value_opt(key string) ?Any { and some tests for toml.parse_dotted_key/1

This commit is contained in:
Delyan Angelov
2022-05-28 09:17:28 +03:00
parent a971b9a99a
commit 4894f61998
3 changed files with 67 additions and 22 deletions

View File

@@ -2,11 +2,12 @@ import os
import toml
import toml.to
fn test_keys() {
toml_file :=
os.real_path(os.join_path(os.dir(@FILE), 'testdata', os.file_name(@FILE).all_before_last('.'))) +
'.toml'
toml_doc := toml.parse_file(toml_file) or { panic(err) }
fn path_by_extension(ext string) string {
return os.join_path(os.dir(@VEXE), 'vlib/toml/tests/testdata/key_test.$ext')
}
fn test_keys() ? {
toml_doc := toml.parse_file(path_by_extension('toml'))?
mut value := toml_doc.value('34-11')
assert value.int() == 23
@@ -18,10 +19,30 @@ fn test_keys() {
assert value.int() == 42
toml_json := to.json(toml_doc)
out_file :=
os.real_path(os.join_path(os.dir(@FILE), 'testdata', os.file_name(@FILE).all_before_last('.'))) +
'.out'
out_file_json := os.read_file(out_file) or { panic(err) }
out_file_json := os.read_file(path_by_extension('out'))?
println(toml_json)
assert toml_json == out_file_json
//
if x := toml_doc.value_opt('unknown key') {
assert false
} else {
assert err.msg() == 'no value for key'
}
if x := toml_doc.value_opt("'a") {
assert false
} else {
assert err.msg() == 'invalid dotted key'
}
}
fn test_parse_dotted_key() ? {
assert toml.parse_dotted_key('')? == []
assert toml.parse_dotted_key('abc')? == ['abc']
assert toml.parse_dotted_key('tube.test."test.test".h."i.j."."k"')? == ['tube', 'test',
'test.test', 'h', 'i.j.', 'k']
if x := toml.parse_dotted_key("'some unclosed string") {
assert false
} else {
assert err.msg().starts_with('parse_dotted_key: could not parse key, missing closing string delimiter')
}
}