]> code.communitydata.science - rises_declines_wikia_code.git/blob - mediawiki_dump_tools/Mediawiki-Utilities/mw/xml_dump/tests/test_element_iterator.py
Initial commit
[rises_declines_wikia_code.git] / mediawiki_dump_tools / Mediawiki-Utilities / mw / xml_dump / tests / test_element_iterator.py
1 import io
2
3 from nose.tools import eq_
4 from ..element_iterator import EventPointer, ElementIterator
5
6
7 TEST_XML = """
8 <foo>
9     <bar>
10         <herp>content</herp>
11     </bar>
12     <derp foo="bar"></derp>
13 </foo>
14 """
15
16
17 def test_pointer():
18     pointer = EventPointer.from_file(io.StringIO(TEST_XML))
19
20     eq_(pointer.tag_stack, [])
21     eq_(pointer.depth(), 0)
22
23     event, element = next(pointer)
24     eq_(pointer.tag_stack, ["foo"])
25     eq_(pointer.depth(), 1)
26     eq_(element.tag, "foo")
27     eq_(event, "start")
28
29     event, element = next(pointer)
30     eq_(pointer.tag_stack, ["foo", "bar"])
31     eq_(pointer.depth(), 2)
32     eq_(element.tag, "bar")
33     eq_(event, "start")
34
35     event, element = next(pointer)
36     eq_(pointer.tag_stack, ["foo", "bar", "herp"])
37     eq_(pointer.depth(), 3)
38     eq_(element.tag, "herp")
39     eq_(event, "start")
40
41     event, element = next(pointer)
42     eq_(pointer.tag_stack, ["foo", "bar"])
43     eq_(pointer.depth(), 2)
44     eq_(element.tag, "herp")
45     eq_(event, "end")
46
47     event, element = next(pointer)
48     eq_(pointer.tag_stack, ["foo"])
49     eq_(pointer.depth(), 1)
50     eq_(element.tag, "bar")
51     eq_(event, "end")
52
53     event, element = next(pointer)
54     eq_(pointer.tag_stack, ["foo", "derp"])
55     eq_(pointer.depth(), 2)
56     eq_(element.tag, "derp")
57     eq_(event, "start")
58
59     event, element = next(pointer)
60     eq_(pointer.tag_stack, ["foo"])
61     eq_(pointer.depth(), 1)
62     eq_(element.tag, "derp")
63     eq_(event, "end")
64
65     event, element = next(pointer)
66     eq_(pointer.tag_stack, [])
67     eq_(pointer.depth(), 0)
68     eq_(element.tag, "foo")
69     eq_(event, "end")
70
71     try:
72         event, element = next(pointer)
73     except StopIteration:
74         return True
75
76     assert False, "Iteration did not stop as expected."
77
78
79 def test_iterator():
80     foo_element = ElementIterator.from_file(io.StringIO(TEST_XML))
81     foo_iterator = iter(foo_element)
82
83     bar_element = next(foo_iterator)
84     bar_iterator = iter(bar_element)
85     eq_(bar_element.tag, "bar")
86
87     herp_element = next(bar_iterator)
88     eq_(herp_element.tag, "herp")
89     eq_(herp_element.text, "content")
90
91     derp_element = next(foo_iterator)
92     eq_(derp_element.tag, "derp")
93     eq_(derp_element.attr("foo"), "bar")
94
95
96 def test_skipping_iterator():
97     foo_element = ElementIterator.from_file(io.StringIO(TEST_XML))
98     foo_iterator = iter(foo_element)
99
100     bar_element = next(foo_iterator)
101
102     derp_element = next(foo_iterator)
103     eq_(derp_element.tag, "derp")
104     eq_(derp_element.attr("foo"), "bar")

Community Data Science Collective || Want to submit a patch?