Changeset 46
- Timestamp:
- 02/16/06 17:22:59 (7 years ago)
- Location:
- branches/pyyaml3000
- Files:
-
- 1 added
- 1 deleted
- 6 edited
- 2 moved
-
lib/yaml/marker.py (deleted)
-
lib/yaml/parser.py (modified) (2 diffs)
-
lib/yaml/reader.py (moved) (moved from branches/pyyaml3000/lib/yaml/stream.py) (9 diffs)
-
lib/yaml/scanner.py (modified) (25 diffs)
-
lib/yaml/tokens.py (added)
-
tests/test_marker.py (modified) (1 diff)
-
tests/test_reader.py (moved) (moved from branches/pyyaml3000/tests/test_stream.py) (1 diff)
-
tests/test_structure.py (modified) (3 diffs)
-
tests/test_tokens.py (modified) (3 diffs)
-
tests/test_yaml.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/pyyaml3000/lib/yaml/parser.py
r44 r46 40 40 # flow_mapping_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY } 41 41 42 from scanner import * 43 44 class Error(Exception): 42 from error import YAMLError 43 from tokens import * 44 45 class ParserError(YAMLError): 45 46 pass 46 47 … … 77 78 class Parser: 78 79 79 def __init__(self, s ource, data):80 self.scanner = Scanner(source, data)80 def __init__(self, scanner): 81 self.scanner = scanner 81 82 82 83 def is_token(self, *choices): -
branches/pyyaml3000/lib/yaml/reader.py
r45 r46 8 8 # Parser does not use it for any other purposes. 9 9 # 10 # Stream(source, data) 11 # Stream determines the encoding of `data` and converts it to unicode. 12 # Stream provides the following methods and attributes: 13 # stream.peek(length=1) - return the next `length` characters 14 # stream.forward(length=1) - move the current position to `length` characters. 15 # stream.index - the number of the current character. 16 # stream.line, stream.column - the line and the column of the current character. 17 10 # Reader(source, data) 11 # Reader determines the encoding of `data` and converts it to unicode. 12 # Reader provides the following methods and attributes: 13 # reader.peek(length=1) - return the next `length` characters 14 # reader.forward(length=1) - move the current position to `length` characters. 15 # reader.index - the number of the current character. 16 # reader.line, stream.column - the line and the column of the current character. 17 18 __all__ = ['Marker', 'Reader', 'ReaderError'] 18 19 19 20 from error import YAMLError … … 58 59 class Marker: 59 60 60 def __init__(self, source, line, column, buffer, pointer):61 self. source = source61 def __init__(self, name, line, column, buffer, pointer): 62 self.name = name 62 63 self.line = line 63 64 self.column = column … … 88 89 + ' '*(self.pointer-start+len(head)) + '^' + '\n' 89 90 90 class StreamError(YAMLError): 91 92 def __init__(self, source, encoding, character, position, reason): 93 self.source = source 94 self.encoding = encoding 91 class ReaderError(YAMLError): 92 93 def __init__(self, name, position, character, encoding, reason): 94 self.name = name 95 95 self.character = character 96 96 self.position = position 97 self.encoding = encoding 97 98 self.reason = reason 98 99 … … 100 101 if isinstance(self.character, str): 101 102 return "'%s' codec can't decode byte #x%02x: %s\n" \ 102 "\tin file'%s', position %d." \103 "\tin '%s', position %d." \ 103 104 % (self.encoding, ord(self.character), self.reason, 104 self. source, self.position)105 self.name, self.position) 105 106 else: 106 107 return "unacceptable character #x%04x: %s\n" \ 107 "\tin file'%s', position %d." \108 "\tin '%s', position %d." \ 108 109 % (ord(self.character), self.reason, 109 self. source, self.position)110 111 class Stream:112 # Stream:110 self.name, self.position) 111 112 class Reader: 113 # Reader: 113 114 # - determines the data encoding and converts it to unicode, 114 115 # - checks if characters are in allowed range, 115 116 # - adds '\0' to the end. 116 117 118 # Reader accepts 119 # - a `str` object, 120 # - a `unicode` object, 121 # - a file-like object with its `read` method returning `str`, 122 # - a file-like object with its `read` method returning `unicode`. 123 117 124 # Yeah, it's ugly and slow. 118 125 119 def __init__(self, source,data):120 self. source = source126 def __init__(self, data): 127 self.name = None 121 128 self.stream = None 122 129 self.stream_pointer = 0 … … 125 132 self.pointer = 0 126 133 self.raw_buffer = None 127 self.raw_decode r= None134 self.raw_decode = None 128 135 self.index = 0 129 136 self.line = 0 130 137 self.column = 0 131 138 if isinstance(data, unicode): 139 self.name = "<unicode string>" 132 140 self.check_printable(data) 133 141 self.buffer = data+u'\0' 134 142 elif isinstance(data, str): 143 self.name = "<string>" 135 144 self.raw_buffer = data 136 145 self.determine_encoding() 137 146 else: 138 147 self.stream = data 148 self.name = getattr(data, 'name', "<file>") 139 149 self.eof = False 140 150 self.raw_buffer = '' … … 162 172 def get_marker(self): 163 173 if self.stream is None: 164 return Marker(self. source, self.line, self.column,174 return Marker(self.name, self.line, self.column, 165 175 self.buffer, self.pointer) 166 176 else: 167 return Marker(self. source, self.line, self.column, None, None)177 return Marker(self.name, self.line, self.column, None, None) 168 178 169 179 def determine_encoding(self): 170 180 while not self.eof and len(self.raw_buffer) < 2: 171 181 self.update_raw() 172 if self.raw_buffer.startswith(codecs.BOM_UTF16_LE): 173 self.raw_decode = utf_16_le_decode 174 elif self.raw_buffer.startswith(codecs.BOM_UTF16_BE): 175 self.raw_decode = utf_16_be_decode 176 else: 177 self.raw_decode = utf_8_decode 182 if not isinstance(self.raw_buffer, unicode): 183 if self.raw_buffer.startswith(codecs.BOM_UTF16_LE): 184 self.raw_decode = utf_16_le_decode 185 elif self.raw_buffer.startswith(codecs.BOM_UTF16_BE): 186 self.raw_decode = utf_16_be_decode 187 else: 188 self.raw_decode = utf_8_decode 178 189 self.update(1) 179 190 … … 184 195 character = match.group() 185 196 position = self.index+(len(self.buffer)-self.pointer)+match.start() 186 raise StreamError(self.source, 'unicode', character, position,187 "control characters are not allowed")197 raise ReaderError(self.name, position, character, 198 'unicode', "special characters are not allowed") 188 199 189 200 def update(self, length): … … 195 206 if not self.eof: 196 207 self.update_raw() 197 try: 198 data, converted = self.raw_decode(self.raw_buffer, 199 'strict', self.eof) 200 except UnicodeDecodeError, exc: 201 character = exc.object[exc.start] 202 if self.stream is not None: 203 position = self.stream_pointer-len(self.raw_buffer)+exc.start 204 else: 205 position = exc.start 206 raise StreamError(self.source, exc.encoding, 207 character, position, exc.reason) 208 if self.raw_decode is not None: 209 try: 210 data, converted = self.raw_decode(self.raw_buffer, 211 'strict', self.eof) 212 except UnicodeDecodeError, exc: 213 character = exc.object[exc.start] 214 if self.stream is not None: 215 position = self.stream_pointer-len(self.raw_buffer)+exc.start 216 else: 217 position = exc.start 218 raise ReaderError(self.name, position, character, 219 exc.encoding, exc.reason) 220 else: 221 data = self.raw_buffer 222 converted = len(data) 208 223 self.check_printable(data) 209 224 self.buffer += data … … 224 239 #try: 225 240 # import psyco 226 # psyco.bind( Stream)241 # psyco.bind(Reader) 227 242 #except ImportError: 228 243 # pass -
branches/pyyaml3000/lib/yaml/scanner.py
r45 r46 9 9 # ALIAS(name), ANCHOR(name), TAG(value), SCALAR(value, plain) 10 10 11 12 from marker import Marker 13 #from error import YAMLError 14 from stream import Stream 15 16 #class ScannerError(YAMLError): 17 class ScannerError(Exception): 11 __all__ = ['Scanner', 'ScannerError'] 12 13 from error import YAMLError 14 from tokens import * 15 16 class ScannerError(YAMLError): 17 # TODO: 18 # ScannerError: while reading a quoted string 19 # in '...', line 5, column 10: 20 # key: "valu\?e" 21 # ^ 22 # got unknown quote character '?' 23 # in '...', line 5, column 15: 24 # key: "valu\?e" 25 # ^ 18 26 pass 19 20 class Token:21 def __init__(self, start_marker, end_marker):22 self.start_marker = start_marker23 self.end_marker = end_marker24 25 class DirectiveToken(Token):26 pass27 28 class YAMLDirectiveToken(DirectiveToken):29 def __init__(self, major_version, minor_version, start_marker, end_marker):30 self.major_version = major_version31 self.minor_version = minor_version32 self.start_marker = start_marker33 self.end_marker = end_marker34 35 class TagDirectiveToken(DirectiveToken):36 pass37 38 class ReservedDirectiveToken(DirectiveToken):39 def __init__(self, name, start_marker, end_marker):40 self.name = name41 self.start_marker = start_marker42 self.end_marker = end_marker43 44 class DocumentStartToken(Token):45 pass46 47 class DocumentEndToken(Token):48 pass49 50 class EndToken(Token):51 pass52 53 class BlockSequenceStartToken(Token):54 pass55 56 class BlockMappingStartToken(Token):57 pass58 59 class BlockEndToken(Token):60 pass61 62 class FlowSequenceStartToken(Token):63 pass64 65 class FlowMappingStartToken(Token):66 pass67 68 class FlowSequenceEndToken(Token):69 pass70 71 class FlowMappingEndToken(Token):72 pass73 74 class KeyToken(Token):75 pass76 77 class ValueToken(Token):78 pass79 80 class EntryToken(Token):81 pass82 83 class AliasToken(Token):84 def __init__(self, value, start_marker, end_marker):85 self.value = value86 self.start_marker = start_marker87 self.end_marker = end_marker88 89 class AnchorToken(Token):90 def __init__(self, value, start_marker, end_marker):91 self.value = value92 self.start_marker = start_marker93 self.end_marker = end_marker94 95 class TagToken(Token):96 def __init__(self, value, start_marker, end_marker):97 self.value = value98 self.start_marker = start_marker99 self.end_marker = end_marker100 101 class ScalarToken(Token):102 def __init__(self, value, plain, start_marker, end_marker):103 self.value = value104 self.plain = plain105 self.start_marker = start_marker106 self.end_marker = end_marker107 27 108 28 class SimpleKey: … … 117 37 class Scanner: 118 38 119 def __init__(self, source, data): 39 40 def __init__(self, reader): 120 41 """Initialize the scanner.""" 121 # The input stream. The Streamclass do the dirty work of checking for42 # The input stream. The Reader class do the dirty work of checking for 122 43 # BOM and converting the input data to Unicode. It also adds NUL to 123 44 # the end. 124 45 # 125 # Streamsupports the following methods126 # self. stream.peek(k=1) # peek the next k characters127 # self. stream.forward(k=1) # read the next k characters and move the46 # Reader supports the following methods 47 # self.reader.peek(k=1) # peek the next k characters 48 # self.reader.forward(k=1) # read the next k characters and move the 128 49 # # pointer 129 self. stream = Stream(source, data)50 self.reader = reader 130 51 131 52 # Had we reached the end of the stream? … … 218 139 # Compare the current indentation and column. It may add some tokens 219 140 # and decrease the current indentation level. 220 self.unwind_indent(self. stream.column)141 self.unwind_indent(self.reader.column) 221 142 222 143 #print 223 #print self. stream.get_marker().get_snippet()144 #print self.reader.get_marker().get_snippet() 224 145 225 146 # Peek the next character. 226 ch = self. stream.peek()227 228 # Is it the end of stream?147 ch = self.reader.peek() 148 149 # Is it the end of reader? 229 150 if ch == u'\0': 230 151 return self.fetch_end() … … 333 254 for level in self.possible_simple_keys.keys(): 334 255 key = self.possible_simple_keys[level] 335 if key.line != self. stream.line \336 or self. stream.index-key.index > 1024:256 if key.line != self.reader.line \ 257 or self.reader.index-key.index > 1024: 337 258 if key.required: 338 259 self.fail("simple key is required") … … 345 266 346 267 # Check if a simple key is required at the current position. 347 required = not self.flow_level and self.indent == self. stream.column268 required = not self.flow_level and self.indent == self.reader.column 348 269 349 270 # The next token might be a simple key. Let's save it's number and … … 352 273 self.remove_possible_simple_key() 353 274 token_number = self.tokens_taken+len(self.tokens) 354 index = self. stream.index355 line = self. stream.line356 column = self. stream.column357 marker = self. stream.get_marker()275 index = self.reader.index 276 line = self.reader.line 277 column = self.reader.column 278 marker = self.reader.get_marker() 358 279 key = SimpleKey(token_number, required, 359 280 index, line, column, marker) … … 381 302 # In block context, we may need to issue the BLOCK-END tokens. 382 303 while self.indent > column: 383 marker = self. stream.get_marker()304 marker = self.reader.get_marker() 384 305 self.indent = self.indents.pop() 385 306 self.tokens.append(BlockEndToken(marker, marker)) … … 405 326 406 327 # Read the token. 407 marker = self. stream.get_marker()328 marker = self.reader.get_marker() 408 329 409 330 # Add END. 410 331 self.tokens.append(EndToken(marker, marker)) 411 332 412 # The streamis ended.333 # The reader is ended. 413 334 self.done = True 414 335 … … 442 363 443 364 # Add DOCUMENT-START or DOCUMENT-END. 444 start_marker = self. stream.get_marker()445 self. stream.forward(3)446 end_marker = self. stream.get_marker()365 start_marker = self.reader.get_marker() 366 self.reader.forward(3) 367 end_marker = self.reader.get_marker() 447 368 self.tokens.append(TokenClass(start_marker, end_marker)) 448 369 … … 465 386 466 387 # Add FLOW-SEQUENCE-START or FLOW-MAPPING-START. 467 start_marker = self. stream.get_marker()468 self. stream.forward()469 end_marker = self. stream.get_marker()388 start_marker = self.reader.get_marker() 389 self.reader.forward() 390 end_marker = self.reader.get_marker() 470 391 self.tokens.append(TokenClass(start_marker, end_marker)) 471 392 … … 488 409 489 410 # Add FLOW-SEQUENCE-END or FLOW-MAPPING-END. 490 start_marker = self. stream.get_marker()491 self. stream.forward()492 end_marker = self. stream.get_marker()411 start_marker = self.reader.get_marker() 412 self.reader.forward() 413 end_marker = self.reader.get_marker() 493 414 self.tokens.append(TokenClass(start_marker, end_marker)) 494 415 … … 503 424 504 425 # We may need to add BLOCK-SEQUENCE-START. 505 if self.add_indent(self. stream.column):506 marker = self. stream.get_marker()426 if self.add_indent(self.reader.column): 427 marker = self.reader.get_marker() 507 428 self.tokens.append(BlockSequenceStartToken(marker, marker)) 508 429 … … 514 435 515 436 # Add ENTRY. 516 start_marker = self. stream.get_marker()517 self. stream.forward()518 end_marker = self. stream.get_marker()437 start_marker = self.reader.get_marker() 438 self.reader.forward() 439 end_marker = self.reader.get_marker() 519 440 self.tokens.append(EntryToken(start_marker, end_marker)) 520 441 … … 529 450 530 451 # We may need to add BLOCK-MAPPING-START. 531 if self.add_indent(self. stream.column):532 marker = self. stream.get_marker()452 if self.add_indent(self.reader.column): 453 marker = self.reader.get_marker() 533 454 self.tokens.append(BlockMappingStartToken(marker, marker)) 534 455 … … 540 461 541 462 # Add KEY. 542 start_marker = self. stream.get_marker()543 self. stream.forward()544 end_marker = self. stream.get_marker()463 start_marker = self.reader.get_marker() 464 self.reader.forward() 465 end_marker = self.reader.get_marker() 545 466 self.tokens.append(KeyToken(start_marker, end_marker)) 546 467 … … 576 497 577 498 # Add VALUE. 578 start_marker = self. stream.get_marker()579 self. stream.forward()580 end_marker = self. stream.get_marker()499 start_marker = self.reader.get_marker() 500 self.reader.forward() 501 end_marker = self.reader.get_marker() 581 502 self.tokens.append(ValueToken(start_marker, end_marker)) 582 503 … … 667 588 # DIRECTIVE: ^ '%' ... 668 589 # The '%' indicator is already checked. 669 if self. stream.column == 0:590 if self.reader.column == 0: 670 591 return True 671 592 … … 673 594 674 595 # DOCUMENT-START: ^ '---' (' '|'\n') 675 if self. stream.column == 0:676 prefix = self. stream.peek(4)596 if self.reader.column == 0: 597 prefix = self.reader.peek(4) 677 598 if prefix[:3] == u'---' and prefix[3] in u'\0 \t\r\n\x85\u2028\u2029': 678 599 return True … … 681 602 682 603 # DOCUMENT-END: ^ '...' (' '|'\n') 683 if self. stream.column == 0:684 prefix = self. stream.peek(4)604 if self.reader.column == 0: 605 prefix = self.reader.peek(4) 685 606 if prefix[:3] == u'...' and prefix[3] in u'\0 \t\r\n\x85\u2028\u2029': 686 607 return True … … 690 611 # ENTRY(flow context): ',' 691 612 if self.flow_level: 692 return self. stream.peek() == u','613 return self.reader.peek() == u',' 693 614 694 615 # ENTRY(block context): '-' (' '|'\n') 695 616 else: 696 prefix = self. stream.peek(2)617 prefix = self.reader.peek(2) 697 618 return prefix[0] == u'-' and prefix[1] in u'\0 \t\r\n\x85\u2028\u2029' 698 619 … … 705 626 # KEY(block context): '?' (' '|'\n') 706 627 else: 707 prefix = self. stream.peek(2)628 prefix = self.reader.peek(2) 708 629 return prefix[1] in u'\0 \t\r\n\x85\u2028\u2029' 709 630 … … 716 637 # VALUE(block context): ':' (' '|'\n') 717 638 else: 718 prefix = self. stream.peek(2)639 prefix = self.reader.peek(2) 719 640 return prefix[1] in u'\0 \t\r\n\x85\u2028\u2029' 720 641 … … 727 648 found = False 728 649 while not found: 729 while self. stream.peek() == u' ':730 self. stream.forward()731 if self. stream.peek() == u'#':732 while self. stream.peek() not in u'\r\n':733 self. stream.forward()734 if self. stream.peek() in u'\r\n':735 self. stream.forward()650 while self.reader.peek() == u' ': 651 self.reader.forward() 652 if self.reader.peek() == u'#': 653 while self.reader.peek() not in u'\r\n': 654 self.reader.forward() 655 if self.reader.peek() in u'\r\n': 656 self.reader.forward() 736 657 if not self.flow_level: 737 658 self.allow_simple_key = True … … 740 661 741 662 def scan_directive(self): 742 marker = self. stream.get_marker()743 if self. stream.peek(5) == u'%YAML ':663 marker = self.reader.get_marker() 664 if self.reader.peek(5) == u'%YAML ': 744 665 self.tokens.append(YAMLDirectiveToken(1, 1, marker, marker)) 745 elif self. stream.peek(4) == u'%TAG ':666 elif self.reader.peek(4) == u'%TAG ': 746 667 self.tokens.append(TagDirectiveToken(marker, marker)) 747 668 else: 748 669 self.tokens.append(ReservedDirectiveToken('', marker, marker)) 749 while self. stream.peek() not in u'\0\r\n':750 self. stream.forward()751 self. stream.forward()670 while self.reader.peek() not in u'\0\r\n': 671 self.reader.forward() 672 self.reader.forward() 752 673 753 674 def scan_anchor(self, TokenClass): 754 start_marker = self. stream.get_marker()755 while self. stream.peek() not in u'\0 \t\r\n,:':756 self. stream.forward()757 end_marker = self. stream.get_marker()675 start_marker = self.reader.get_marker() 676 while self.reader.peek() not in u'\0 \t\r\n,:': 677 self.reader.forward() 678 end_marker = self.reader.get_marker() 758 679 self.tokens.append(TokenClass('', start_marker, end_marker)) 759 680 760 681 def scan_tag(self): 761 start_marker = self. stream.get_marker()762 while self. stream.peek() not in u'\0 \t\r\n':763 self. stream.forward()764 end_marker = self. stream.get_marker()682 start_marker = self.reader.get_marker() 683 while self.reader.peek() not in u'\0 \t\r\n': 684 self.reader.forward() 685 end_marker = self.reader.get_marker() 765 686 self.tokens.append(TagToken('', start_marker, end_marker)) 766 687 767 688 def scan_block_scalar(self, folded): 768 start_marker = self. stream.get_marker()689 start_marker = self.reader.get_marker() 769 690 indent = self.indent+1 770 691 if indent < 1: 771 692 indent = 1 772 693 while True: 773 while self. stream.peek() and self.stream.peek() and self.stream.peek() not in u'\0\r\n\x85\u2028\u2029':774 self. stream.forward()775 if self. stream.peek() != u'\0':776 self. stream.forward()694 while self.reader.peek() and self.reader.peek() and self.reader.peek() not in u'\0\r\n\x85\u2028\u2029': 695 self.reader.forward() 696 if self.reader.peek() != u'\0': 697 self.reader.forward() 777 698 count = 0 778 while count < indent and self. stream.peek() == u' ':779 self. stream.forward()699 while count < indent and self.reader.peek() == u' ': 700 self.reader.forward() 780 701 count += 1 781 if count < indent and self. stream.peek() not in u'#\r\n\x85\u2028\u2029':702 if count < indent and self.reader.peek() not in u'#\r\n\x85\u2028\u2029': 782 703 break 783 704 self.tokens.append(ScalarToken('', False, start_marker, start_marker)) 784 705 785 706 def scan_flow_scalar(self, double): 786 marker = self. stream.get_marker()787 quote = self. stream.peek()788 self. stream.forward()789 while self. stream.peek() != quote:790 if double and self. stream.peek() == u'\\':791 self. stream.forward(2)792 elif not double and self. stream.peek(3)[1:] == u'\'\'':793 self. stream.forward(3)707 marker = self.reader.get_marker() 708 quote = self.reader.peek() 709 self.reader.forward() 710 while self.reader.peek() != quote: 711 if double and self.reader.peek() == u'\\': 712 self.reader.forward(2) 713 elif not double and self.reader.peek(3)[1:] == u'\'\'': 714 self.reader.forward(3) 794 715 else: 795 self. stream.forward(1)796 self. stream.forward(1)716 self.reader.forward(1) 717 self.reader.forward(1) 797 718 self.tokens.append(ScalarToken('', False, marker, marker)) 798 719 … … 802 723 indent = 1 803 724 space = False 804 marker = self. stream.get_marker()725 marker = self.reader.get_marker() 805 726 while True: 806 while self. stream.peek() == u' ':807 self. stream.forward()727 while self.reader.peek() == u' ': 728 self.reader.forward() 808 729 space = True 809 while self. stream.peek() not in u'\0\r\n?:,[]{}#' \810 or (not space and self. stream.peek() == '#') \811 or (not self.flow_level and self. stream.peek() in '?,[]{}') \812 or (not self.flow_level and self. stream.peek() == ':' and self.stream.peek(2)[1] not in u' \0\r\n'):813 space = self. stream.peek() not in u' \t'814 self. stream.forward()730 while self.reader.peek() not in u'\0\r\n?:,[]{}#' \ 731 or (not space and self.reader.peek() == '#') \ 732 or (not self.flow_level and self.reader.peek() in '?,[]{}') \ 733 or (not self.flow_level and self.reader.peek() == ':' and self.reader.peek(2)[1] not in u' \0\r\n'): 734 space = self.reader.peek() not in u' \t' 735 self.reader.forward() 815 736 self.allow_simple_key = False 816 if self. stream.peek() not in u'\r\n':737 if self.reader.peek() not in u'\r\n': 817 738 break 818 while self. stream.peek() in u'\r\n':819 self. stream.forward()739 while self.reader.peek() in u'\r\n': 740 self.reader.forward() 820 741 if not self.flow_level: 821 742 self.allow_simple_key = True 822 743 count = 0 823 while self. stream.peek() == u' ' and count < indent:824 self. stream.forward()744 while self.reader.peek() == u' ' and count < indent: 745 self.reader.forward() 825 746 count += 1 826 747 if count < indent: -
branches/pyyaml3000/tests/test_marker.py
r45 r46 2 2 import test_appliance 3 3 4 from yaml. streamimport Marker4 from yaml.reader import Marker 5 5 6 6 class TestMarker(test_appliance.TestAppliance): -
branches/pyyaml3000/tests/test_reader.py
r45 r46 1 1 2 2 import test_appliance 3 from yaml. stream import Stream, StreamError3 from yaml.reader import Reader, ReaderError 4 4 5 class TestStreamErrors(test_appliance.TestAppliance): 5 import codecs 6 6 7 def _testStreamUnicodeErrors(self, test_name, stream_filename): 8 try: 9 data = unicode(file(stream_filename, 'rb').read(), 'utf-8') 10 except: 7 class TestReaderErrors(test_appliance.TestAppliance): 8 9 def _testReaderUnicodeErrors(self, test_name, stream_filename): 10 for encoding in ['utf-8', 'utf-16-le', 'utf-16-be']: 11 try: 12 data = unicode(file(stream_filename, 'rb').read(), encoding) 13 break 14 except: 15 pass 16 else: 11 17 return 12 self.failUnlessRaises(StreamError, lambda: self._load(stream_filename, data)) 18 #self._load(data) 19 self.failUnlessRaises(ReaderError, 20 lambda: self._load(data)) 21 #self._load(codecs.open(stream_filename, encoding=encoding)) 22 self.failUnlessRaises(ReaderError, 23 lambda: self._load(codecs.open(stream_filename, encoding=encoding))) 13 24 14 def _test StreamStringErrors(self, test_name, stream_filename):25 def _testReaderStringErrors(self, test_name, stream_filename): 15 26 data = file(stream_filename, 'rb').read() 16 self.failUnlessRaises(StreamError, lambda: self._load(stream_filename, data)) 27 #self._load(data) 28 self.failUnlessRaises(ReaderError, lambda: self._load(data)) 17 29 18 def _test StreamFileErrors(self, test_name, stream_filename):30 def _testReaderFileErrors(self, test_name, stream_filename): 19 31 data = file(stream_filename, 'rb') 20 self.failUnlessRaises(StreamError, lambda: self._load(stream_filename, data)) 32 #self._load(data) 33 self.failUnlessRaises(ReaderError, lambda: self._load(data)) 21 34 22 def _load(self, stream_filename,data):23 stream = Stream(stream_filename,data)35 def _load(self, data): 36 stream = Reader(data) 24 37 while stream.peek() != u'\0': 25 38 stream.forward() 26 39 27 Test StreamErrors.add_tests('testStreamUnicodeErrors', '.stream-error')28 Test StreamErrors.add_tests('testStreamStringErrors', '.stream-error')29 Test StreamErrors.add_tests('testStreamFileErrors', '.stream-error')40 TestReaderErrors.add_tests('testReaderUnicodeErrors', '.stream-error') 41 TestReaderErrors.add_tests('testReaderStringErrors', '.stream-error') 42 TestReaderErrors.add_tests('testReaderFileErrors', '.stream-error') 30 43 31 44 -
branches/pyyaml3000/tests/test_structure.py
r44 r46 2 2 import test_appliance 3 3 4 from yaml.reader import Reader 5 from yaml.scanner import Scanner 4 6 from yaml.parser import * 5 7 … … 10 12 node2 = eval(file(structure_filename, 'rb').read()) 11 13 try: 12 parser = Parser( data_filename, file(data_filename, 'rb').read())14 parser = Parser(Scanner(Reader(file(data_filename, 'rb')))) 13 15 node1 = parser.parse() 14 16 node1 = [self._convert(n) for n in node1] … … 50 52 documents2 = None 51 53 try: 52 parser = Parser( data_filename, file(data_filename, 'rb').read())54 parser = Parser(Scanner(Reader(file(data_filename, 'rb')))) 53 55 documents1 = parser.parse() 54 56 canonical = test_appliance.CanonicalParser(canonical_filename, file(canonical_filename, 'rb').read()) -
branches/pyyaml3000/tests/test_tokens.py
r44 r46 2 2 import test_appliance 3 3 4 from yaml.reader import * 5 from yaml.tokens import * 4 6 from yaml.scanner import * 5 7 … … 51 53 tokens2 = file(tokens_filename, 'rb').read().split() 52 54 try: 53 scanner = Scanner( data_filename, file(data_filename, 'rb').read())55 scanner = Scanner(Reader(file(data_filename, 'rb'))) 54 56 tokens1 = [] 55 57 while not isinstance(scanner.peek_token(), EndToken): … … 73 75 tokens = None 74 76 try: 75 scanner = Scanner( filename, file(filename, 'rb').read())77 scanner = Scanner(Reader(file(filename, 'rb'))) 76 78 tokens = [] 77 79 while not isinstance(scanner.peek_token(), EndToken): -
branches/pyyaml3000/tests/test_yaml.py
r45 r46 3 3 4 4 from test_marker import * 5 from test_ streamimport *5 from test_reader import * 6 6 from test_canonical import * 7 7 from test_tokens import *
Note: See TracChangeset
for help on using the changeset viewer.
