v2 / vlib / encoding / xml / query_test.v
50 lines · 42 sloc · 1.22 KB · f09826e928f9612bab9299faefff7cf34a503362
Raw
1module main
2
3import encoding.xml
4
5const sample_document = '
6<root>
7 <a attr="value1">
8 <b id="middle-tag" attr="value2">
9 <c attr="value3">Text1</c>
10 <d attr="value4">Text2</d>
11 <e attr="value5">
12 <f id="innermost" attr="value6">Text3</f>
13 <g attr="value7">Text4</g>
14 <h attr="value8">Text5</h>
15 </e>
16 <i attr="value9">Text6</i>
17 </b>
18 <j attr="value10">Text7</j>
19 </a>
20 <k attr="value11">Text8</k>
21 <l attr="value12">Text9</l>
22</root>
23'
24
25fn test_querying() ! {
26 doc := xml.XMLDocument.from_string(sample_document)!
27
28 assert doc.root.name == 'root'
29 assert doc.root.children.len == 3
30
31 middle_tag := doc.get_element_by_id('middle-tag')?
32 assert middle_tag.name == 'b'
33 assert middle_tag.attributes['attr'] == 'value2'
34 assert middle_tag.children.len == 4
35
36 innermost := middle_tag.get_element_by_id('innermost')?
37 assert innermost.name == 'f'
38 assert innermost.attributes['attr'] == 'value6'
39
40 for count in 1 .. 13 {
41 assert doc.get_elements_by_attribute('attr', 'value${count}').len == 1
42 }
43
44 i_tags := doc.get_elements_by_tag('i')
45 assert i_tags.len == 1
46 assert i_tags[0].name == 'i'
47 assert i_tags[0].attributes['attr'] == 'value9'
48 assert i_tags[0].children.len == 1
49 assert i_tags[0].children[0] as string == 'Text6'
50}
51