4 from yaml
.reader
import Reader
5 from yaml
.scanner
import Scanner
6 from yaml
.parser
import *
7 from yaml
.composer
import *
8 from yaml
.resolver
import *
9 from yaml
.constructor
import *
10 from yaml
.nodes
import *
12 class TestStructure(test_appliance
.TestAppliance
):
14 def _testStructure(self
, test_name
, data_filename
, structure_filename
):
16 node2
= eval(file(structure_filename
, 'rb').read())
18 parser
= Parser(Scanner(Reader(file(data_filename
, 'rb'))))
20 while not parser
.check(StreamEndEvent
):
21 node1
.append(self
._convert
(parser
))
25 self
.failUnlessEqual(node1
, node2
)
29 print file(data_filename
, 'rb').read()
34 def _convert(self
, parser
):
35 if parser
.check(ScalarEvent
):
37 if event
.tag
or event
.anchor
or event
.value
:
41 elif parser
.check(SequenceEvent
):
44 while not parser
.check(CollectionEndEvent
):
45 sequence
.append(self
._convert
(parser
))
48 elif parser
.check(MappingEvent
):
51 while not parser
.check(CollectionEndEvent
):
52 key
= self
._convert
(parser
)
53 value
= self
._convert
(parser
)
54 mapping
.append((key
, value
))
57 elif parser
.check(AliasEvent
):
64 TestStructure
.add_tests('testStructure', '.data', '.structure')
66 class TestParser(test_appliance
.TestAppliance
):
68 def _testParser(self
, test_name
, data_filename
, canonical_filename
):
72 parser
= Parser(Scanner(Reader(file(data_filename
, 'rb'))))
73 events1
= list(iter(parser
))
74 canonical
= test_appliance
.CanonicalParser(file(canonical_filename
, 'rb').read())
75 events2
= canonical
.parse()
76 self
._compare
(events1
, events2
)
80 print file(data_filename
, 'rb').read()
82 print file(canonical_filename
, 'rb').read()
83 print "EVENTS1:", events1
84 print "EVENTS2:", events2
87 def _compare(self
, events1
, events2
):
88 self
.failUnlessEqual(len(events1
), len(events2
))
89 for event1
, event2
in zip(events1
, events2
):
90 self
.failUnlessEqual(event1
.__class__
, event2
.__class__
)
91 if isinstance(event1
, AliasEvent
):
92 #self.failUnlessEqual(event1.name, event2.name)
94 elif isinstance(event1
, ScalarEvent
):
95 #self.failUnlessEqual(event1.anchor, event2.anchor)
96 #self.failUnlessEqual(event1.tag, event2.tag)
97 self
.failUnlessEqual(event1
.value
, event2
.value
)
98 if isinstance(event1
, CollectionEvent
):
99 #self.failUnlessEqual(event1.anchor, event2.anchor)
100 #self.failUnlessEqual(event1.tag, event2.tag)
103 TestParser
.add_tests('testParser', '.data', '.canonical')
105 class TestResolver(test_appliance
.TestAppliance
):
107 def _testResolver(self
, test_name
, data_filename
, canonical_filename
):
111 resolver1
= Resolver(Composer(Parser(Scanner(Reader(file(data_filename
, 'rb'))))))
112 nodes1
= list(iter(resolver1
))
113 canonical
= test_appliance
.CanonicalParser(file(canonical_filename
, 'rb').read())
115 resolver2
= Resolver(Composer(canonical
))
116 nodes2
= list(iter(resolver2
))
117 self
.failUnlessEqual(len(nodes1
), len(nodes2
))
118 for node1
, node2
in zip(nodes1
, nodes2
):
119 self
._compare
(node1
, node2
)
123 print file(data_filename
, 'rb').read()
125 print file(canonical_filename
, 'rb').read()
126 print "NODES1:", nodes1
127 print "NODES2:", nodes2
130 def _compare(self
, node1
, node2
):
131 self
.failUnlessEqual(node1
.__class__
, node2
.__class__
)
132 if isinstance(node1
, ScalarNode
):
133 #self.failUnlessEqual(node1.tag, node2.tag)
134 self
.failUnlessEqual(node1
.value
, node2
.value
)
135 elif isinstance(node1
, SequenceNode
):
136 self
.failUnlessEqual(len(node1
.value
), len(node2
.value
))
137 for item1
, item2
in zip(node1
.value
, node2
.value
):
138 self
._compare
(item1
, item2
)
139 elif isinstance(node1
, MappingNode
):
140 self
.failUnlessEqual(len(node1
.value
), len(node2
.value
))
141 items1
= node1
.value
.items()
142 items1
.sort(lambda (k1
,v1
), (k2
,v2
): cmp((k1
.tag
,k1
.value
,v1
.tag
,v1
.value
),
143 (k2
.tag
,k2
.value
,v2
.tag
,v2
.value
)))
144 items2
= node2
.value
.items()
145 items2
.sort(lambda (k1
,v1
), (k2
,v2
): cmp((k1
.tag
,k1
.value
,v1
.tag
,v1
.value
),
146 (k2
.tag
,k2
.value
,v2
.tag
,v2
.value
)))
147 for (key1
, value1
), (key2
, value2
) in zip(items1
, items2
):
148 self
._compare
(key1
, key2
)
149 self
._compare
(value1
, value2
)
151 TestResolver
.add_tests('testResolver', '.data', '.canonical')
153 class MyConstructor(Constructor
):
155 def construct_sequence(self
, node
):
156 return tuple(Constructor
.construct_sequence(self
, node
))
158 def construct_mapping(self
, node
):
159 pairs
= self
.construct_pairs(node
)
163 class TestConstructor(test_appliance
.TestAppliance
):
165 def _testConstructor(self
, test_name
, data_filename
, canonical_filename
):
169 constructor1
= MyConstructor(Resolver(Composer(Parser(Scanner(Reader(file(data_filename
, 'rb')))))))
170 natives1
= list(iter(constructor1
))
171 canonical
= test_appliance
.CanonicalParser(file(canonical_filename
, 'rb').read())
173 constructor2
= MyConstructor(Resolver(Composer(canonical
)))
174 natives2
= list(iter(constructor2
))
175 self
.failUnlessEqual(natives1
, natives2
)
179 print file(data_filename
, 'rb').read()
181 print file(canonical_filename
, 'rb').read()
182 print "NATIVES1:", natives1
183 print "NATIVES2:", natives2
186 TestConstructor
.add_tests('testConstructor', '.data', '.canonical')
188 class TestParserOnCanonical(test_appliance
.TestAppliance
):
190 def _testParserOnCanonical(self
, test_name
, canonical_filename
):
194 parser
= Parser(Scanner(Reader(file(canonical_filename
, 'rb'))))
195 events1
= list(iter(parser
))
196 canonical
= test_appliance
.CanonicalParser(file(canonical_filename
, 'rb').read())
197 events2
= canonical
.parse()
198 self
._compare
(events1
, events2
)
202 print file(canonical_filename
, 'rb').read()
203 print "EVENTS1:", events1
204 print "EVENTS2:", events2
207 def _compare(self
, events1
, events2
):
208 self
.failUnlessEqual(len(events1
), len(events2
))
209 for event1
, event2
in zip(events1
, events2
):
210 self
.failUnlessEqual(event1
.__class__
, event2
.__class__
)
211 if isinstance(event1
, AliasEvent
):
212 self
.failUnlessEqual(event1
.anchor
, event2
.anchor
)
213 elif isinstance(event1
, ScalarEvent
):
214 self
.failUnlessEqual(event1
.anchor
, event2
.anchor
)
215 self
.failUnlessEqual(event1
.tag
, event2
.tag
)
216 self
.failUnlessEqual(event1
.value
, event2
.value
)
217 if isinstance(event1
, CollectionEvent
):
218 self
.failUnlessEqual(event1
.anchor
, event2
.anchor
)
219 self
.failUnlessEqual(event1
.tag
, event2
.tag
)
221 TestParserOnCanonical
.add_tests('testParserOnCanonical', '.canonical')