Changeset 136 for pyyaml/trunk/tests
- Timestamp:
- 04/15/06 19:54:52 (6 years ago)
- Location:
- pyyaml/trunk/tests
- Files:
-
- 13 modified
-
data/construct-custom.code (modified) (1 diff)
-
data/construct-custom.data (modified) (1 diff)
-
data/spec-08-07.canonical (modified) (1 diff)
-
data/tags.events (modified) (1 diff)
-
test_appliance.py (modified) (6 diffs)
-
test_canonical.py (modified) (2 diffs)
-
test_constructor.py (modified) (4 diffs)
-
test_detector.py (modified) (3 diffs)
-
test_emitter.py (modified) (6 diffs)
-
test_errors.py (modified) (2 diffs)
-
test_representer.py (modified) (4 diffs)
-
test_structure.py (modified) (8 diffs)
-
test_tokens.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
pyyaml/trunk/tests/data/construct-custom.code
r58 r136 7 7 MyTestClass3(x=1, y=2, z=3), 8 8 MyTestClass3(x=1, y=2, z=3), 9 YAMLObject1(my_parameter='foo', my_another_parameter=[1,2,3]) 9 10 ] -
pyyaml/trunk/tests/data/construct-custom.data
r58 r136 22 22 'y': 2 23 23 z: 3 24 - !foo 25 my-parameter: foo 26 my-another-parameter: [1,2,3] -
pyyaml/trunk/tests/data/spec-08-07.canonical
r38 r136 4 4 !<tag:yaml.org,2002:str> "12", 5 5 !<tag:yaml.org,2002:int> "12", 6 !<tag:yaml.org,2002:str> "12", 6 # !<tag:yaml.org,2002:str> "12", 7 !<tag:yaml.org,2002:int> "12", 7 8 ] -
pyyaml/trunk/tests/data/tags.events
r132 r136 3 3 - !SequenceStart 4 4 - !Scalar { value: 'data' } 5 - !Scalar { tag: '!', value: 'data' }5 #- !Scalar { tag: '!', value: 'data' } 6 6 - !Scalar { tag: 'tag:yaml.org,2002:str', value: 'data' } 7 7 - !Scalar { tag: '!myfunnytag', value: 'data' } -
pyyaml/trunk/tests/test_appliance.py
r132 r136 2 2 import unittest, os 3 3 4 from yaml.tokens import * 5 from yaml.events import * 4 from yaml import * 6 5 7 6 class TestAppliance(unittest.TestCase): … … 44 43 self.data = unicode(data, 'utf-8')+u'\0' 45 44 self.index = 0 45 self.scan() 46 47 def check_token(self, *choices): 48 if self.tokens: 49 if not choices: 50 return True 51 for choice in choices: 52 if isinstance(self.tokens[0], choice): 53 return True 54 return False 55 56 def peek_token(self): 57 if self.tokens: 58 return self.tokens[0] 59 60 def get_token(self, choice=None): 61 token = self.tokens.pop(0) 62 if choice and not isinstance(token, choice): 63 raise Error("unexpected token "+repr(token)) 64 return token 65 66 def get_token_value(self): 67 token = self.get_token() 68 return token.value 46 69 47 70 def scan(self): 48 #print self.data[self.index:] 49 tokens = [] 50 tokens.append(StreamStartToken(None, None)) 71 self.tokens = [] 72 self.tokens.append(StreamStartToken(None, None)) 51 73 while True: 52 74 self.find_token() 53 75 ch = self.data[self.index] 54 76 if ch == u'\0': 55 tokens.append(StreamEndToken(None, None))77 self.tokens.append(StreamEndToken(None, None)) 56 78 break 57 79 elif ch == u'%': 58 tokens.append(self.scan_directive())80 self.tokens.append(self.scan_directive()) 59 81 elif ch == u'-' and self.data[self.index:self.index+3] == u'---': 60 82 self.index += 3 61 tokens.append(DocumentStartToken(None, None))83 self.tokens.append(DocumentStartToken(None, None)) 62 84 elif ch == u'[': 63 85 self.index += 1 64 tokens.append(FlowSequenceStartToken(None, None))86 self.tokens.append(FlowSequenceStartToken(None, None)) 65 87 elif ch == u'{': 66 88 self.index += 1 67 tokens.append(FlowMappingStartToken(None, None))89 self.tokens.append(FlowMappingStartToken(None, None)) 68 90 elif ch == u']': 69 91 self.index += 1 70 tokens.append(FlowSequenceEndToken(None, None))92 self.tokens.append(FlowSequenceEndToken(None, None)) 71 93 elif ch == u'}': 72 94 self.index += 1 73 tokens.append(FlowMappingEndToken(None, None))95 self.tokens.append(FlowMappingEndToken(None, None)) 74 96 elif ch == u'?': 75 97 self.index += 1 76 tokens.append(KeyToken(None, None))98 self.tokens.append(KeyToken(None, None)) 77 99 elif ch == u':': 78 100 self.index += 1 79 tokens.append(ValueToken(None, None))101 self.tokens.append(ValueToken(None, None)) 80 102 elif ch == u',': 81 103 self.index += 1 82 tokens.append(FlowEntryToken(None, None))104 self.tokens.append(FlowEntryToken(None, None)) 83 105 elif ch == u'*' or ch == u'&': 84 tokens.append(self.scan_alias())106 self.tokens.append(self.scan_alias()) 85 107 elif ch == u'!': 86 tokens.append(self.scan_tag())108 self.tokens.append(self.scan_tag()) 87 109 elif ch == u'"': 88 tokens.append(self.scan_scalar())110 self.tokens.append(self.scan_scalar()) 89 111 else: 90 112 raise Error("invalid token") 91 return tokens92 113 93 114 DIRECTIVE = u'%YAML 1.1' … … 204 225 class CanonicalParser: 205 226 206 def __init__(self, data): 207 self.scanner = CanonicalScanner(data) 227 def __init__(self): 208 228 self.events = [] 229 self.parse() 209 230 210 231 # stream: STREAM-START document* STREAM-END 211 232 def parse_stream(self): 212 self. consume_token(StreamStartToken)233 self.get_token(StreamStartToken) 213 234 self.events.append(StreamStartEvent(None, None)) 214 while not self. test_token(StreamEndToken):215 if self. test_token(DirectiveToken, DocumentStartToken):235 while not self.check_token(StreamEndToken): 236 if self.check_token(DirectiveToken, DocumentStartToken): 216 237 self.parse_document() 217 238 else: 218 239 raise Error("document is expected, got "+repr(self.tokens[self.index])) 219 self. consume_token(StreamEndToken)240 self.get_token(StreamEndToken) 220 241 self.events.append(StreamEndEvent(None, None)) 221 242 … … 223 244 def parse_document(self): 224 245 node = None 225 if self. test_token(DirectiveToken):226 self. consume_token(DirectiveToken)227 self. consume_token(DocumentStartToken)246 if self.check_token(DirectiveToken): 247 self.get_token(DirectiveToken) 248 self.get_token(DocumentStartToken) 228 249 self.events.append(DocumentStartEvent(None, None)) 229 250 self.parse_node() … … 232 253 # node: ALIAS | ANCHOR? TAG? (SCALAR|sequence|mapping) 233 254 def parse_node(self): 234 if self. test_token(AliasToken):235 self.events.append(AliasEvent(self.get_ value(), None, None))255 if self.check_token(AliasToken): 256 self.events.append(AliasEvent(self.get_token_value(), None, None)) 236 257 else: 237 258 anchor = None 238 if self. test_token(AnchorToken):239 anchor = self.get_ value()259 if self.check_token(AnchorToken): 260 anchor = self.get_token_value() 240 261 tag = None 241 if self. test_token(TagToken):242 tag = self.get_ value()243 if self. test_token(ScalarToken):244 self.events.append(ScalarEvent(anchor, tag, self.get_value(), None, None))245 elif self. test_token(FlowSequenceStartToken):262 if self.check_token(TagToken): 263 tag = self.get_token_value() 264 if self.check_token(ScalarToken): 265 self.events.append(ScalarEvent(anchor, tag, False, self.get_token_value(), None, None)) 266 elif self.check_token(FlowSequenceStartToken): 246 267 self.events.append(SequenceStartEvent(anchor, tag, None, None)) 247 268 self.parse_sequence() 248 elif self. test_token(FlowMappingStartToken):269 elif self.check_token(FlowMappingStartToken): 249 270 self.events.append(MappingStartEvent(anchor, tag, None, None)) 250 271 self.parse_mapping() … … 254 275 # sequence: SEQUENCE-START (node (ENTRY node)*)? ENTRY? SEQUENCE-END 255 276 def parse_sequence(self): 256 self. consume_token(FlowSequenceStartToken)257 if not self. test_token(FlowSequenceEndToken):277 self.get_token(FlowSequenceStartToken) 278 if not self.check_token(FlowSequenceEndToken): 258 279 self.parse_node() 259 while not self. test_token(FlowSequenceEndToken):260 self. consume_token(FlowEntryToken)261 if not self. test_token(FlowSequenceEndToken):280 while not self.check_token(FlowSequenceEndToken): 281 self.get_token(FlowEntryToken) 282 if not self.check_token(FlowSequenceEndToken): 262 283 self.parse_node() 263 self. consume_token(FlowSequenceEndToken)284 self.get_token(FlowSequenceEndToken) 264 285 self.events.append(SequenceEndEvent(None, None)) 265 286 266 287 # mapping: MAPPING-START (map_entry (ENTRY map_entry)*)? ENTRY? MAPPING-END 267 288 def parse_mapping(self): 268 self. consume_token(FlowMappingStartToken)269 if not self. test_token(FlowMappingEndToken):289 self.get_token(FlowMappingStartToken) 290 if not self.check_token(FlowMappingEndToken): 270 291 self.parse_map_entry() 271 while not self. test_token(FlowMappingEndToken):272 self. consume_token(FlowEntryToken)273 if not self. test_token(FlowMappingEndToken):292 while not self.check_token(FlowMappingEndToken): 293 self.get_token(FlowEntryToken) 294 if not self.check_token(FlowMappingEndToken): 274 295 self.parse_map_entry() 275 self. consume_token(FlowMappingEndToken)296 self.get_token(FlowMappingEndToken) 276 297 self.events.append(MappingEndEvent(None, None)) 277 298 278 299 # map_entry: KEY node VALUE node 279 300 def parse_map_entry(self): 280 self. consume_token(KeyToken)301 self.get_token(KeyToken) 281 302 self.parse_node() 282 self. consume_token(ValueToken)303 self.get_token(ValueToken) 283 304 self.parse_node() 284 305 285 def test_token(self, *choices): 286 for choice in choices: 287 if isinstance(self.tokens[self.index], choice): 306 def parse(self): 307 self.parse_stream() 308 309 def get_event(self): 310 return self.events.pop(0) 311 312 def check_event(self, *choices): 313 if self.events: 314 if not choices: 288 315 return True 316 for choice in choices: 317 if isinstance(self.events[0], choice): 318 return True 289 319 return False 290 320 291 def consume_token(self, cls): 292 if not isinstance(self.tokens[self.index], cls): 293 raise Error("unexpected token "+repr(self.tokens[self.index])) 294 self.index += 1 295 296 def get_value(self): 297 value = self.tokens[self.index].value 298 self.index += 1 299 return value 300 301 def parse(self): 302 self.tokens = self.scanner.scan() 303 self.index = 0 304 self.parse_stream() 305 return self.events 306 307 def get(self): 308 return self.events.pop(0) 309 310 def check(self, *choices): 311 for choice in choices: 312 if isinstance(self.events[0], choice): 313 return True 314 return False 315 316 def peek(self): 321 def peek_event(self): 317 322 return self.events[0] 318 323 324 class CanonicalLoader(CanonicalScanner, CanonicalParser, Composer, Constructor, Detector): 325 326 def __init__(self, stream): 327 if hasattr(stream, 'read'): 328 stream = stream.read() 329 CanonicalScanner.__init__(self, stream) 330 CanonicalParser.__init__(self) 331 Composer.__init__(self) 332 Constructor.__init__(self) 333 Detector.__init__(self) 334 335 def canonical_scan(stream): 336 return scan(stream, Loader=CanonicalLoader) 337 338 def canonical_parse(stream): 339 return parse(stream, Loader=CanonicalLoader) 340 341 def canonical_compose(stream): 342 return compose(stream, Loader=CanonicalLoader) 343 344 def canonical_compose_all(stream): 345 return compose_all(stream, Loader=CanonicalLoader) 346 347 def canonical_load(stream): 348 return load(stream, Loader=CanonicalLoader) 349 350 def canonical_load_all(stream): 351 return load_all(stream, Loader=CanonicalLoader) 352 -
pyyaml/trunk/tests/test_canonical.py
r51 r136 6 6 def _testCanonicalScanner(self, test_name, canonical_filename): 7 7 data = file(canonical_filename, 'rb').read() 8 scanner = test_appliance.CanonicalScanner(data) 9 tokens = scanner.scan() 8 tokens = list(test_appliance.canonical_scan(data)) 10 9 #for token in tokens: 11 10 # print token … … 13 12 def _testCanonicalParser(self, test_name, canonical_filename): 14 13 data = file(canonical_filename, 'rb').read() 15 parser = test_appliance.CanonicalParser(data) 16 events = parser.parse() 14 event = list(test_appliance.canonical_parse(data)) 17 15 #for event in events: 18 16 # print event -
pyyaml/trunk/tests/test_constructor.py
r59 r136 12 12 from yaml import * 13 13 14 class My Constructor(Constructor):14 class MyLoader(Loader): 15 15 pass 16 16 … … 29 29 return MyTestClass1(**mapping) 30 30 31 My Constructor.add_constructor("!tag1", construct1)31 MyLoader.add_constructor("!tag1", construct1) 32 32 33 33 class MyTestClass2(MyTestClass1, YAMLObject): 34 34 35 yaml_ constructor = MyConstructor35 yaml_loader = MyLoader 36 36 yaml_tag = "!tag2" 37 37 … … 54 54 from_yaml = classmethod(from_yaml) 55 55 56 class YAMLObject1(YAMLObject): 57 yaml_loader = MyLoader 58 yaml_tag = '!foo' 59 60 def __init__(self, my_parameter=None, my_another_parameter=None): 61 self.my_parameter = my_parameter 62 self.my_another_parameter = my_another_parameter 63 64 def __eq__(self, other): 65 if isinstance(other, YAMLObject1): 66 return self.__class__, self.__dict__ == other.__class__, other.__dict__ 67 else: 68 return False 69 56 70 class TestTypes(test_appliance.TestAppliance): 57 71 58 72 def _testTypes(self, test_name, data_filename, code_filename): 59 natives1 = None60 natives2 = None73 data1 = None 74 data2 = None 61 75 try: 62 constructor1 = MyConstructor(Resolver(Composer(Parser(Scanner(Reader(file(data_filename, 'rb'))))))) 63 natives1 = list(iter(constructor1)) 64 if len(natives1) == 1: 65 natives1 = natives1[0] 66 natives2 = eval(file(code_filename, 'rb').read()) 76 data1 = list(load_all(file(data_filename, 'rb'), Loader=MyLoader)) 77 if len(data1) == 1: 78 data1 = data1[0] 79 data2 = eval(file(code_filename, 'rb').read()) 67 80 try: 68 self.failUnlessEqual( natives1, natives2)81 self.failUnlessEqual(data1, data2) 69 82 except AssertionError: 70 if isinstance( natives1, dict):71 natives1 = natives1.items()72 natives1.sort()73 natives1 = repr(natives1)74 natives2 = natives2.items()75 natives2.sort()76 natives2 = repr(natives2)77 if natives1 != natives2:83 if isinstance(data1, dict): 84 data1 = data1.items() 85 data1.sort() 86 data1 = repr(data1) 87 data2 = data2.items() 88 data2.sort() 89 data2 = repr(data2) 90 if data1 != data2: 78 91 raise 79 92 except: … … 83 96 print "CODE:" 84 97 print file(code_filename, 'rb').read() 85 print "NATIVES1:", natives186 print "NATIVES2:", natives298 print "NATIVES1:", data1 99 print "NATIVES2:", data2 87 100 raise 88 101 -
pyyaml/trunk/tests/test_detector.py
r55 r136 2 2 import test_appliance 3 3 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.nodes import * 4 from yaml import * 10 5 11 6 class TestDetector(test_appliance.TestAppliance): … … 16 11 try: 17 12 correct_tag = file(detect_filename, 'rb').read().strip() 18 resolver = Resolver(Composer(Parser(Scanner(Reader(file(data_filename, 'rb')))))) 19 node = list(iter(resolver))[0] 13 node = compose(file(data_filename, 'rb')) 20 14 self.failUnless(isinstance(node, SequenceNode)) 21 15 for scalar in node.value: … … 34 28 TestDetector.add_tests('testDetector', '.data', '.detect') 35 29 36 -
pyyaml/trunk/tests/test_emitter.py
r133 r136 17 17 18 18 def _testEmitter(self, test_name, filename, canonical=None): 19 events = list(iter(Parser(Scanner(Reader(file(filename, 'rb')))))) 20 if canonical is not None: 21 events[0].canonical = canonical 22 #self._dump(filename, events) 23 writer = StringIO.StringIO() 24 emitter = Emitter(writer) 25 for event in events: 26 emitter.emit(event) 27 data = writer.getvalue() 19 events = list(parse(file(filename, 'rb'))) 20 #self._dump(filename, events, canonical) 21 stream = StringIO.StringIO() 22 emit(events, stream, canonical=canonical) 23 data = stream.getvalue() 28 24 new_events = list(parse(data)) 29 25 for event, new_event in zip(events, new_events): … … 39 35 self.failUnlessEqual(event.value, new_event.value) 40 36 41 def _dump(self, filename, events): 42 writer = sys.stdout 43 emitter = Emitter(writer) 37 def _dump(self, filename, events, canonical): 44 38 print "="*30 45 39 print "ORIGINAL DOCUMENT:" … … 47 41 print '-'*30 48 42 print "EMITTED DOCUMENT:" 49 for event in events: 50 emitter.emit(event) 43 emit(events, sys.stdout, canonical=canonical) 51 44 52 45 TestEmitter.add_tests('testEmitterOnData', '.canonical', '.data') 53 #TestEmitter.add_tests('testEmitterOnCanonicalNormally', '.canonical')54 #TestEmitter.add_tests('testEmitterOnCanonicalCanonically', '.canonical')46 TestEmitter.add_tests('testEmitterOnCanonicalNormally', '.canonical') 47 TestEmitter.add_tests('testEmitterOnCanonicalCanonically', '.canonical') 55 48 56 class Events Constructor(Constructor):49 class EventsLoader(Loader): 57 50 58 51 def construct_event(self, node): … … 67 60 mapping.setdefault('tag', None) 68 61 if class_name == 'ScalarEvent': 62 mapping.setdefault('implicit', False) 69 63 mapping.setdefault('value', '') 70 64 value = getattr(yaml, class_name)(**mapping) 71 65 return value 72 66 73 Events Constructor.add_constructor(None, EventsConstructor.construct_event)67 EventsLoader.add_constructor(None, EventsLoader.construct_event) 74 68 75 69 class TestEmitterEvents(test_appliance.TestAppliance): 76 70 77 71 def _testEmitterEvents(self, test_name, events_filename): 78 events = list(load(file(events_filename, 'rb'), Constructor=EventsConstructor))72 events = list(load(file(events_filename, 'rb'), Loader=EventsLoader)) 79 73 #self._dump(events_filename, events) 80 writer = StringIO.StringIO() 81 emitter = Emitter(writer) 82 for event in events: 83 emitter.emit(event) 84 data = writer.getvalue() 74 stream = StringIO.StringIO() 75 emit(events, stream) 76 data = stream.getvalue() 85 77 new_events = list(parse(data)) 86 78 self.failUnlessEqual(len(events), len(new_events)) … … 97 89 98 90 def _dump(self, events_filename, events): 99 writer = sys.stdout100 emitter = Emitter(writer)101 91 print "="*30 102 92 print "EVENTS:" … … 104 94 print '-'*30 105 95 print "OUTPUT:" 106 for event in events: 107 emitter.emit(event) 96 emit(events, sys.stdout) 108 97 109 98 TestEmitterEvents.add_tests('testEmitterEvents', '.events') -
pyyaml/trunk/tests/test_errors.py
r59 r136 16 16 def _load(self, filename): 17 17 try: 18 reader = Reader(file(filename, 'rb')) 19 scanner = Scanner(reader) 20 parser = Parser(scanner) 21 composer = Composer(parser) 22 resolver = Resolver(composer) 23 constructor = Constructor(resolver) 24 return list(constructor) 18 return list(load_all(file(filename, 'rb'))) 25 19 except YAMLError, exc: 26 20 #except ScannerError, exc: … … 34 28 def _load_string(self, filename): 35 29 try: 36 reader = Reader(file(filename, 'rb').read()) 37 scanner = Scanner(reader) 38 parser = Parser(scanner) 39 composer = Composer(parser) 40 resolver = Resolver(composer) 41 constructor = Constructor(resolver) 42 return list(constructor) 30 return list(load_all(file(filename, 'rb').read())) 43 31 except YAMLError, exc: 44 32 #except ScannerError, exc: -
pyyaml/trunk/tests/test_representer.py
r133 r136 13 13 from yaml import * 14 14 15 class My Constructor(Constructor):15 class MyLoader(Loader): 16 16 pass 17 class My Representer(Representer):17 class MyDumper(Dumper): 18 18 pass 19 19 … … 39 39 class MyTestClass2(MyTestClass1, YAMLObject): 40 40 41 yaml_constructor = MyConstructor 41 yaml_loader = MyLoader 42 yaml_dumper = MyDumper 42 43 yaml_tag = "!tag2" 43 44 … … 68 69 to_yaml = classmethod(to_yaml) 69 70 70 MyConstructor.add_constructor("!tag1", construct1) 71 MyRepresenter.add_representer(MyTestClass1, represent1) 71 MyLoader.add_constructor("!tag1", construct1) 72 MyDumper.add_representer(MyTestClass1, represent1) 73 74 class YAMLObject1(YAMLObject): 75 yaml_loader = MyLoader 76 yaml_dumper = MyDumper 77 yaml_tag = '!foo' 78 yaml_flow_style = True 79 80 def __init__(self, my_parameter=None, my_another_parameter=None): 81 self.my_parameter = my_parameter 82 self.my_another_parameter = my_another_parameter 83 84 def __eq__(self, other): 85 if isinstance(other, YAMLObject1): 86 return self.__class__, self.__dict__ == other.__class__, other.__dict__ 87 else: 88 return False 72 89 73 90 class TestTypeRepresenter(test_appliance.TestAppliance): 74 91 75 92 def _testTypes(self, test_name, data_filename, code_filename): 76 natives1 = eval(file(code_filename, 'rb').read())77 natives2 = None93 data1 = eval(file(code_filename, 'rb').read()) 94 data2 = None 78 95 output = None 79 96 try: 80 output = dump( natives1, Representer=MyRepresenter)81 natives2 = load(output, Constructor=MyConstructor)97 output = dump(data1, Dumper=MyDumper) 98 data2 = load(output, Loader=MyLoader) 82 99 try: 83 self.failUnlessEqual( natives1, natives2)100 self.failUnlessEqual(data1, data2) 84 101 except AssertionError: 85 if isinstance( natives1, dict):86 natives1 = natives1.items()87 natives1.sort()88 natives1 = repr(natives1)89 natives2 = natives2.items()90 natives2.sort()91 natives2 = repr(natives2)92 if natives1 != natives2:102 if isinstance(data1, dict): 103 data1 = data1.items() 104 data1.sort() 105 data1 = repr(data1) 106 data2 = data2.items() 107 data2.sort() 108 data2 = repr(data2) 109 if data1 != data2: 93 110 raise 94 111 except: … … 96 113 print "OUTPUT:" 97 114 print output 98 print "NATIVES1:", natives199 print "NATIVES2:", natives2115 print "NATIVES1:", data1 116 print "NATIVES2:", data2 100 117 raise 101 118 -
pyyaml/trunk/tests/test_structure.py
r130 r136 10 10 node2 = eval(file(structure_filename, 'rb').read()) 11 11 try: 12 parser = Parser(Scanner(Reader(file(data_filename, 'rb'))))12 loader = Loader(file(data_filename, 'rb')) 13 13 node1 = [] 14 while not parser.check(StreamEndEvent):15 if not parser.check(StreamStartEvent, DocumentStartEvent, DocumentEndEvent):16 node1.append(self._convert( parser))14 while not loader.check_event(StreamEndEvent): 15 if not loader.check_event(StreamStartEvent, DocumentStartEvent, DocumentEndEvent): 16 node1.append(self._convert(loader)) 17 17 else: 18 parser.get()19 parser.get()18 loader.get_event() 19 loader.get_event() 20 20 if len(node1) == 1: 21 21 node1 = node1[0] … … 29 29 raise 30 30 31 def _convert(self, parser):32 if parser.check(ScalarEvent):33 event = parser.get()31 def _convert(self, loader): 32 if loader.check_event(ScalarEvent): 33 event = loader.get_event() 34 34 if event.tag or event.anchor or event.value: 35 35 return True 36 36 else: 37 37 return None 38 elif parser.check(SequenceStartEvent):39 parser.get()38 elif loader.check_event(SequenceStartEvent): 39 loader.get_event() 40 40 sequence = [] 41 while not parser.check(SequenceEndEvent):42 sequence.append(self._convert( parser))43 parser.get()41 while not loader.check_event(SequenceEndEvent): 42 sequence.append(self._convert(loader)) 43 loader.get_event() 44 44 return sequence 45 elif parser.check(MappingStartEvent):46 parser.get()45 elif loader.check_event(MappingStartEvent): 46 loader.get_event() 47 47 mapping = [] 48 while not parser.check(MappingEndEvent):49 key = self._convert( parser)50 value = self._convert( parser)48 while not loader.check_event(MappingEndEvent): 49 key = self._convert(loader) 50 value = self._convert(loader) 51 51 mapping.append((key, value)) 52 parser.get()52 loader.get_event() 53 53 return mapping 54 elif parser.check(AliasEvent):55 parser.get()54 elif loader.check_event(AliasEvent): 55 loader.get_event() 56 56 return '*' 57 57 else: 58 parser.get()58 loader.get_event() 59 59 return '?' 60 60 … … 67 67 events2 = None 68 68 try: 69 parser = Parser(Scanner(Reader(file(data_filename, 'rb')))) 70 events1 = list(iter(parser)) 71 canonical = test_appliance.CanonicalParser(file(canonical_filename, 'rb').read()) 72 events2 = canonical.parse() 69 events1 = list(parse(file(data_filename, 'rb'))) 70 events2 = list(test_appliance.canonical_parse(file(canonical_filename, 'rb'))) 73 71 self._compare(events1, events2) 74 72 except: … … 106 104 nodes2 = None 107 105 try: 108 resolver1 = Resolver(Composer(Parser(Scanner(Reader(file(data_filename, 'rb')))))) 109 nodes1 = list(iter(resolver1)) 110 canonical = test_appliance.CanonicalParser(file(canonical_filename, 'rb').read()) 111 canonical.parse() 112 resolver2 = Resolver(Composer(canonical)) 113 nodes2 = list(iter(resolver2)) 106 nodes1 = list(compose_all(file(data_filename, 'rb'))) 107 nodes2 = list(test_appliance.canonical_compose_all(file(canonical_filename, 'rb'))) 114 108 self.failUnlessEqual(len(nodes1), len(nodes2)) 115 109 for node1, node2 in zip(nodes1, nodes2): … … 148 142 TestResolver.add_tests('testResolver', '.data', '.canonical') 149 143 150 class MyConstructor (Constructor):144 class MyConstructor: 151 145 152 146 def construct_sequence(self, node): … … 158 152 return pairs 159 153 160 MyConstructor.add_constructor(None, MyConstructor.construct_scalar) 154 def construct_undefined(self, node): 155 return self.construct_scalar(node) 156 157 class MyLoader(MyConstructor, Loader): 158 pass 159 MyLoader.add_constructor(None, MyLoader.construct_undefined) 160 161 class MyCanonicalLoader(MyConstructor, test_appliance.CanonicalLoader): 162 pass 163 MyCanonicalLoader.add_constructor(None, MyCanonicalLoader.construct_undefined) 161 164 162 165 class TestConstructor(test_appliance.TestAppliance): 163 166 164 167 def _testConstructor(self, test_name, data_filename, canonical_filename): 165 natives1 = None 166 natives2 = None 167 try: 168 constructor1 = MyConstructor(Resolver(Composer(Parser(Scanner(Reader(file(data_filename, 'rb'))))))) 169 natives1 = list(iter(constructor1)) 170 canonical = test_appliance.CanonicalParser(file(canonical_filename, 'rb').read()) 171 canonical.parse() 172 constructor2 = MyConstructor(Resolver(Composer(canonical))) 173 natives2 = list(iter(constructor2)) 174 self.failUnlessEqual(natives1, natives2) 168 data1 = None 169 data2 = None 170 try: 171 data1 = list(load_all(file(data_filename, 'rb'), Loader=MyLoader)) 172 data2 = list(load_all(file(canonical_filename, 'rb'), Loader=MyCanonicalLoader)) 173 self.failUnlessEqual(data1, data2) 175 174 except: 176 175 print … … 179 178 print "DATA2:" 180 179 print file(canonical_filename, 'rb').read() 181 print "NATIVES1:", natives1182 print "NATIVES2:", natives2180 print "NATIVES1:", data1 181 print "NATIVES2:", data2 183 182 raise 184 183 … … 191 190 events2 = None 192 191 try: 193 parser = Parser(Scanner(Reader(file(canonical_filename, 'rb')))) 194 events1 = list(iter(parser)) 195 canonical = test_appliance.CanonicalParser(file(canonical_filename, 'rb').read()) 196 events2 = canonical.parse() 192 events1 = list(parse(file(canonical_filename, 'rb'))) 193 events2 = list(test_appliance.canonical_parse(file(canonical_filename, 'rb'))) 197 194 self._compare(events1, events2) 198 195 except: -
pyyaml/trunk/tests/test_tokens.py
r118 r136 2 2 import test_appliance 3 3 4 from yaml.reader import * 5 from yaml.tokens import * 6 from yaml.scanner import * 4 from yaml import * 7 5 8 6 class TestTokens(test_appliance.TestAppliance): … … 52 50 tokens2 = file(tokens_filename, 'rb').read().split() 53 51 try: 54 scanner = Scanner(Reader(file(data_filename, 'rb')))55 52 tokens1 = [] 56 for token in scan ner:53 for token in scan(file(data_filename, 'rb')): 57 54 if not isinstance(token, (StreamStartToken, StreamEndToken)): 58 55 tokens1.append(token) … … 75 72 tokens = None 76 73 try: 77 scanner = Scanner(Reader(file(filename, 'rb')))78 74 tokens = [] 79 for token in scan ner:75 for token in scan(file(filename, 'rb')): 80 76 if not isinstance(token, (StreamStartToken, StreamEndToken)): 81 77 tokens.append(token.__class__.__name__)
