6 class TestStructure(test_appliance
.TestAppliance
):
8 def _testStructure(self
, test_name
, data_filename
, structure_filename
):
10 node2
= eval(file(structure_filename
, 'rb').read())
12 parser
= Parser(Scanner(Reader(file(data_filename
, 'rb'))))
14 while not parser
.check(StreamEndEvent
):
15 node1
.append(self
._convert
(parser
))
19 self
.failUnlessEqual(node1
, node2
)
23 print file(data_filename
, 'rb').read()
28 def _convert(self
, parser
):
29 if parser
.check(ScalarEvent
):
31 if event
.tag
or event
.anchor
or event
.value
:
35 elif parser
.check(SequenceEvent
):
38 while not parser
.check(CollectionEndEvent
):
39 sequence
.append(self
._convert
(parser
))
42 elif parser
.check(MappingEvent
):
45 while not parser
.check(CollectionEndEvent
):
46 key
= self
._convert
(parser
)
47 value
= self
._convert
(parser
)
48 mapping
.append((key
, value
))
51 elif parser
.check(AliasEvent
):
58 TestStructure
.add_tests('testStructure', '.data', '.structure')
60 class TestParser(test_appliance
.TestAppliance
):
62 def _testParser(self
, test_name
, data_filename
, canonical_filename
):
66 parser
= Parser(Scanner(Reader(file(data_filename
, 'rb'))))
67 events1
= list(iter(parser
))
68 canonical
= test_appliance
.CanonicalParser(file(canonical_filename
, 'rb').read())
69 events2
= canonical
.parse()
70 self
._compare
(events1
, events2
)
74 print file(data_filename
, 'rb').read()
76 print file(canonical_filename
, 'rb').read()
77 print "EVENTS1:", events1
78 print "EVENTS2:", events2
81 def _compare(self
, events1
, events2
):
82 self
.failUnlessEqual(len(events1
), len(events2
))
83 for event1
, event2
in zip(events1
, events2
):
84 self
.failUnlessEqual(event1
.__class__
, event2
.__class__
)
85 if isinstance(event1
, AliasEvent
):
86 #self.failUnlessEqual(event1.name, event2.name)
88 elif isinstance(event1
, ScalarEvent
):
89 #self.failUnlessEqual(event1.anchor, event2.anchor)
90 #self.failUnlessEqual(event1.tag, event2.tag)
91 self
.failUnlessEqual(event1
.value
, event2
.value
)
92 if isinstance(event1
, CollectionEvent
):
93 #self.failUnlessEqual(event1.anchor, event2.anchor)
94 #self.failUnlessEqual(event1.tag, event2.tag)
97 TestParser
.add_tests('testParser', '.data', '.canonical')
99 class TestResolver(test_appliance
.TestAppliance
):
101 def _testResolver(self
, test_name
, data_filename
, canonical_filename
):
105 resolver1
= Resolver(Composer(Parser(Scanner(Reader(file(data_filename
, 'rb'))))))
106 nodes1
= list(iter(resolver1
))
107 canonical
= test_appliance
.CanonicalParser(file(canonical_filename
, 'rb').read())
109 resolver2
= Resolver(Composer(canonical
))
110 nodes2
= list(iter(resolver2
))
111 self
.failUnlessEqual(len(nodes1
), len(nodes2
))
112 for node1
, node2
in zip(nodes1
, nodes2
):
113 self
._compare
(node1
, node2
)
117 print file(data_filename
, 'rb').read()
119 print file(canonical_filename
, 'rb').read()
120 print "NODES1:", nodes1
121 print "NODES2:", nodes2
124 def _compare(self
, node1
, node2
):
125 self
.failUnlessEqual(node1
.__class__
, node2
.__class__
)
126 if isinstance(node1
, ScalarNode
):
127 #self.failUnlessEqual(node1.tag, node2.tag)
128 self
.failUnlessEqual(node1
.value
, node2
.value
)
129 elif isinstance(node1
, SequenceNode
):
130 self
.failUnlessEqual(len(node1
.value
), len(node2
.value
))
131 for item1
, item2
in zip(node1
.value
, node2
.value
):
132 self
._compare
(item1
, item2
)
133 elif isinstance(node1
, MappingNode
):
134 self
.failUnlessEqual(len(node1
.value
), len(node2
.value
))
135 items1
= node1
.value
.items()
136 items1
.sort(lambda (k1
,v1
), (k2
,v2
): cmp((k1
.tag
,k1
.value
,v1
.tag
,v1
.value
),
137 (k2
.tag
,k2
.value
,v2
.tag
,v2
.value
)))
138 items2
= node2
.value
.items()
139 items2
.sort(lambda (k1
,v1
), (k2
,v2
): cmp((k1
.tag
,k1
.value
,v1
.tag
,v1
.value
),
140 (k2
.tag
,k2
.value
,v2
.tag
,v2
.value
)))
141 for (key1
, value1
), (key2
, value2
) in zip(items1
, items2
):
142 self
._compare
(key1
, key2
)
143 self
._compare
(value1
, value2
)
145 TestResolver
.add_tests('testResolver', '.data', '.canonical')
147 class MyConstructor(Constructor
):
149 def construct_sequence(self
, node
):
150 return tuple(Constructor
.construct_sequence(self
, node
))
152 def construct_mapping(self
, node
):
153 pairs
= self
.construct_pairs(node
)
157 MyConstructor
.add_constructor(None, MyConstructor
.construct_scalar
)
159 class TestConstructor(test_appliance
.TestAppliance
):
161 def _testConstructor(self
, test_name
, data_filename
, canonical_filename
):
165 constructor1
= MyConstructor(Resolver(Composer(Parser(Scanner(Reader(file(data_filename
, 'rb')))))))
166 natives1
= list(iter(constructor1
))
167 canonical
= test_appliance
.CanonicalParser(file(canonical_filename
, 'rb').read())
169 constructor2
= MyConstructor(Resolver(Composer(canonical
)))
170 natives2
= list(iter(constructor2
))
171 self
.failUnlessEqual(natives1
, natives2
)
175 print file(data_filename
, 'rb').read()
177 print file(canonical_filename
, 'rb').read()
178 print "NATIVES1:", natives1
179 print "NATIVES2:", natives2
182 TestConstructor
.add_tests('testConstructor', '.data', '.canonical')
184 class TestParserOnCanonical(test_appliance
.TestAppliance
):
186 def _testParserOnCanonical(self
, test_name
, canonical_filename
):
190 parser
= Parser(Scanner(Reader(file(canonical_filename
, 'rb'))))
191 events1
= list(iter(parser
))
192 canonical
= test_appliance
.CanonicalParser(file(canonical_filename
, 'rb').read())
193 events2
= canonical
.parse()
194 self
._compare
(events1
, events2
)
198 print file(canonical_filename
, 'rb').read()
199 print "EVENTS1:", events1
200 print "EVENTS2:", events2
203 def _compare(self
, events1
, events2
):
204 self
.failUnlessEqual(len(events1
), len(events2
))
205 for event1
, event2
in zip(events1
, events2
):
206 self
.failUnlessEqual(event1
.__class__
, event2
.__class__
)
207 if isinstance(event1
, AliasEvent
):
208 self
.failUnlessEqual(event1
.anchor
, event2
.anchor
)
209 elif isinstance(event1
, ScalarEvent
):
210 self
.failUnlessEqual(event1
.anchor
, event2
.anchor
)
211 self
.failUnlessEqual(event1
.tag
, event2
.tag
)
212 self
.failUnlessEqual(event1
.value
, event2
.value
)
213 if isinstance(event1
, CollectionEvent
):
214 self
.failUnlessEqual(event1
.anchor
, event2
.anchor
)
215 self
.failUnlessEqual(event1
.tag
, event2
.tag
)
217 TestParserOnCanonical
.add_tests('testParserOnCanonical', '.canonical')