summaryrefslogtreecommitdiff
path: root/tests/test_structure.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_structure.py')
-rw-r--r--tests/test_structure.py129
1 files changed, 72 insertions, 57 deletions
diff --git a/tests/test_structure.py b/tests/test_structure.py
index 12c87d0..0bffbcd 100644
--- a/tests/test_structure.py
+++ b/tests/test_structure.py
@@ -12,8 +12,10 @@ class TestStructure(test_appliance.TestAppliance):
node2 = eval(file(structure_filename, 'rb').read())
try:
parser = Parser(Scanner(Reader(file(data_filename, 'rb'))))
- node1 = parser.parse()
- node1 = [self._convert(n) for n in node1]
+ node1 = []
+ while not parser.check(StreamEndEvent):
+ node1.append(self._convert(parser))
+ parser.get()
if len(node1) == 1:
node1 = node1[0]
self.failUnlessEqual(node1, node2)
@@ -25,97 +27,110 @@ class TestStructure(test_appliance.TestAppliance):
print "NODE2:", node2
raise
- def _convert(self, node):
- if isinstance(node, ScalarNode):
- return True
- elif isinstance(node, SequenceNode):
+ def _convert(self, parser):
+ if parser.check(ScalarEvent):
+ event = parser.get()
+ if event.tag or event.anchor or event.value:
+ return True
+ else:
+ return None
+ elif parser.check(SequenceEvent):
+ parser.get()
sequence = []
- for item in node.value:
- sequence.append(self._convert(item))
+ while not parser.check(CollectionEndEvent):
+ sequence.append(self._convert(parser))
+ parser.get()
return sequence
- elif isinstance(node, MappingNode):
+ elif parser.check(MappingEvent):
+ parser.get()
mapping = []
- for key, value in node.value:
- mapping.append((self._convert(key), self._convert(value)))
+ while not parser.check(CollectionEndEvent):
+ key = self._convert(parser)
+ value = self._convert(parser)
+ mapping.append((key, value))
+ parser.get()
return mapping
- elif isinstance(node, AliasNode):
+ elif parser.check(AliasEvent):
+ parser.get()
return '*'
else:
- return node
+ parser.get()
+ return '?'
TestStructure.add_tests('testStructure', '.data', '.structure')
class TestParser(test_appliance.TestAppliance):
def _testParser(self, test_name, data_filename, canonical_filename):
- documents1 = None
- documents2 = None
+ events1 = None
+ events2 = None
try:
parser = Parser(Scanner(Reader(file(data_filename, 'rb'))))
- documents1 = parser.parse()
- canonical = test_appliance.CanonicalParser(canonical_filename, file(canonical_filename, 'rb').read())
- documents2 = canonical.parse()
- self._compare(documents1, documents2)
+ events1 = list(iter(parser))
+ canonical = test_appliance.CanonicalParser(file(canonical_filename, 'rb').read())
+ events2 = canonical.parse()
+ self._compare(events1, events2)
except:
print
print "DATA1:"
print file(data_filename, 'rb').read()
print "DATA2:"
print file(canonical_filename, 'rb').read()
- print "DOCUMENTS1:", documents1
- print "DOCUMENTS2:", documents2
+ print "EVENTS1:", events1
+ print "EVENTS2:", events2
raise
- def _compare(self, value1, value2):
- if value1 is None and hasattr(value2, 'tag') and value2.tag == 'tag:yaml.org,2002:null':
- return
- self.failUnlessEqual(type(value1), type(value2))
- if isinstance(value1, list) or isinstance(value1, tuple):
- self.failUnlessEqual(len(value1), len(value2))
- for item1, item2 in zip(value1, value2):
- self._compare(item1, item2)
- else:
- self.failUnlessEqual(value1.__class__.__name__, value2.__class__.__name__)
- if isinstance(value1, SequenceNode): # or isinstance(value1, MappingNode):
- self._compare(value1.value, value2.value)
- elif isinstance(value1, ScalarNode):
- self.failUnlessEqual(value1.value, value2.value)
+ def _compare(self, events1, events2):
+ self.failUnlessEqual(len(events1), len(events2))
+ for event1, event2 in zip(events1, events2):
+ self.failUnlessEqual(event1.__class__, event2.__class__)
+ if isinstance(event1, AliasEvent):
+ #self.failUnlessEqual(event1.name, event2.name)
+ pass
+ elif isinstance(event1, ScalarEvent):
+ #self.failUnlessEqual(event1.anchor, event2.anchor)
+ #self.failUnlessEqual(event1.tag, event2.tag)
+ self.failUnlessEqual(event1.value, event2.value)
+ if isinstance(event1, CollectionEvent):
+ #self.failUnlessEqual(event1.anchor, event2.anchor)
+ #self.failUnlessEqual(event1.tag, event2.tag)
+ pass
+
TestParser.add_tests('testParser', '.data', '.canonical')
class TestParserOnCanonical(test_appliance.TestAppliance):
def _testParserOnCanonical(self, test_name, canonical_filename):
- documents1 = None
- documents2 = None
+ events1 = None
+ events2 = None
try:
parser = Parser(Scanner(Reader(file(canonical_filename, 'rb'))))
- documents1 = parser.parse()
- canonical = test_appliance.CanonicalParser(canonical_filename, file(canonical_filename, 'rb').read())
- documents2 = canonical.parse()
- self._compare(documents1, documents2)
+ events1 = list(iter(parser))
+ canonical = test_appliance.CanonicalParser(file(canonical_filename, 'rb').read())
+ events2 = canonical.parse()
+ self._compare(events1, events2)
except:
print
print "DATA:"
print file(canonical_filename, 'rb').read()
- print "DOCUMENTS1:", documents1
- print "DOCUMENTS2:", documents2
+ print "EVENTS1:", events1
+ print "EVENTS2:", events2
raise
- def _compare(self, value1, value2):
- if value1 is None and hasattr(value2, 'tag') and value2.tag == 'tag:yaml.org,2002:null':
- return
- self.failUnlessEqual(type(value1), type(value2))
- if isinstance(value1, list) or isinstance(value1, tuple):
- self.failUnlessEqual(len(value1), len(value2))
- for item1, item2 in zip(value1, value2):
- self._compare(item1, item2)
- else:
- self.failUnlessEqual(value1.__class__.__name__, value2.__class__.__name__)
- if isinstance(value1, SequenceNode) or isinstance(value1, MappingNode):
- self._compare(value1.value, value2.value)
- elif isinstance(value1, ScalarNode):
- self.failUnlessEqual(value1.value, value2.value)
+ def _compare(self, events1, events2):
+ self.failUnlessEqual(len(events1), len(events2))
+ for event1, event2 in zip(events1, events2):
+ self.failUnlessEqual(event1.__class__, event2.__class__)
+ if isinstance(event1, AliasEvent):
+ self.failUnlessEqual(event1.name, event2.name)
+ elif isinstance(event1, ScalarEvent):
+ self.failUnlessEqual(event1.anchor, event2.anchor)
+ self.failUnlessEqual(event1.tag, event2.tag)
+ self.failUnlessEqual(event1.value, event2.value)
+ if isinstance(event1, CollectionEvent):
+ self.failUnlessEqual(event1.anchor, event2.anchor)
+ self.failUnlessEqual(event1.tag, event2.tag)
TestParserOnCanonical.add_tests('testParserOnCanonical', '.canonical')