49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			V
		
	
	
import os
 | 
						|
import toml
 | 
						|
import toml.to
 | 
						|
 | 
						|
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
 | 
						|
 | 
						|
	value = toml_doc.value('1.2')
 | 
						|
	assert value.int() == 3
 | 
						|
 | 
						|
	value = toml_doc.value('34-12.2')
 | 
						|
	assert value.int() == 42
 | 
						|
 | 
						|
	toml_json := to.json(toml_doc)
 | 
						|
	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')
 | 
						|
	}
 | 
						|
}
 |