Changeset 391 for python/trunk/Lib/test/test_pyexpat.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/test/test_pyexpat.py
r2 r391 5 5 import unittest 6 6 7 import pyexpat8 7 from xml.parsers import expat 9 8 9 from test import test_support 10 10 from test.test_support import sortdict, run_unittest 11 11 … … 24 24 for x, y in self.set_get_pairs: 25 25 self.parser.returns_unicode = x 26 self.assertEqual s(self.parser.returns_unicode, y)26 self.assertEqual(self.parser.returns_unicode, y) 27 27 28 28 def test_ordered_attributes(self): 29 29 for x, y in self.set_get_pairs: 30 30 self.parser.ordered_attributes = x 31 self.assertEqual s(self.parser.ordered_attributes, y)31 self.assertEqual(self.parser.ordered_attributes, y) 32 32 33 33 def test_specified_attributes(self): 34 34 for x, y in self.set_get_pairs: 35 35 self.parser.specified_attributes = x 36 self.assertEqual s(self.parser.specified_attributes, y)36 self.assertEqual(self.parser.specified_attributes, y) 37 37 38 38 … … 142 142 # Verify output 143 143 op = out.out 144 self.assertEqual s(op[0], 'PI: \'xml-stylesheet\' \'href="stylesheet.css"\'')145 self.assertEqual s(op[1], "Comment: ' comment data '")146 self.assertEqual s(op[2], "Notation declared: ('notation', None, 'notation.jpeg', None)")147 self.assertEqual s(op[3], "Unparsed entity decl: ('unparsed_entity', None, 'entity.file', None, 'notation')")148 self.assertEqual s(op[4], "Start element: 'root' {'attr1': 'value1', 'attr2': 'value2\\xe1\\xbd\\x80'}")149 self.assertEqual s(op[5], "NS decl: 'myns' 'http://www.python.org/namespace'")150 self.assertEqual s(op[6], "Start element: 'http://www.python.org/namespace!subelement' {}")151 self.assertEqual s(op[7], "Character data: 'Contents of subelements'")152 self.assertEqual s(op[8], "End element: 'http://www.python.org/namespace!subelement'")153 self.assertEqual s(op[9], "End of NS decl: 'myns'")154 self.assertEqual s(op[10], "Start element: 'sub2' {}")155 self.assertEqual s(op[11], 'Start of CDATA section')156 self.assertEqual s(op[12], "Character data: 'contents of CDATA section'")157 self.assertEqual s(op[13], 'End of CDATA section')158 self.assertEqual s(op[14], "End element: 'sub2'")159 self.assertEqual s(op[15], "External entity ref: (None, 'entity.file', None)")160 self.assertEqual s(op[16], "End element: 'root'")144 self.assertEqual(op[0], 'PI: \'xml-stylesheet\' \'href="stylesheet.css"\'') 145 self.assertEqual(op[1], "Comment: ' comment data '") 146 self.assertEqual(op[2], "Notation declared: ('notation', None, 'notation.jpeg', None)") 147 self.assertEqual(op[3], "Unparsed entity decl: ('unparsed_entity', None, 'entity.file', None, 'notation')") 148 self.assertEqual(op[4], "Start element: 'root' {'attr1': 'value1', 'attr2': 'value2\\xe1\\xbd\\x80'}") 149 self.assertEqual(op[5], "NS decl: 'myns' 'http://www.python.org/namespace'") 150 self.assertEqual(op[6], "Start element: 'http://www.python.org/namespace!subelement' {}") 151 self.assertEqual(op[7], "Character data: 'Contents of subelements'") 152 self.assertEqual(op[8], "End element: 'http://www.python.org/namespace!subelement'") 153 self.assertEqual(op[9], "End of NS decl: 'myns'") 154 self.assertEqual(op[10], "Start element: 'sub2' {}") 155 self.assertEqual(op[11], 'Start of CDATA section') 156 self.assertEqual(op[12], "Character data: 'contents of CDATA section'") 157 self.assertEqual(op[13], 'End of CDATA section') 158 self.assertEqual(op[14], "End element: 'sub2'") 159 self.assertEqual(op[15], "External entity ref: (None, 'entity.file', None)") 160 self.assertEqual(op[16], "End element: 'root'") 161 161 162 162 def test_unicode(self): … … 171 171 172 172 op = out.out 173 self.assertEqual s(op[0], 'PI: u\'xml-stylesheet\' u\'href="stylesheet.css"\'')174 self.assertEqual s(op[1], "Comment: u' comment data '")175 self.assertEqual s(op[2], "Notation declared: (u'notation', None, u'notation.jpeg', None)")176 self.assertEqual s(op[3], "Unparsed entity decl: (u'unparsed_entity', None, u'entity.file', None, u'notation')")177 self.assertEqual s(op[4], "Start element: u'root' {u'attr1': u'value1', u'attr2': u'value2\\u1f40'}")178 self.assertEqual s(op[5], "NS decl: u'myns' u'http://www.python.org/namespace'")179 self.assertEqual s(op[6], "Start element: u'http://www.python.org/namespace!subelement' {}")180 self.assertEqual s(op[7], "Character data: u'Contents of subelements'")181 self.assertEqual s(op[8], "End element: u'http://www.python.org/namespace!subelement'")182 self.assertEqual s(op[9], "End of NS decl: u'myns'")183 self.assertEqual s(op[10], "Start element: u'sub2' {}")184 self.assertEqual s(op[11], 'Start of CDATA section')185 self.assertEqual s(op[12], "Character data: u'contents of CDATA section'")186 self.assertEqual s(op[13], 'End of CDATA section')187 self.assertEqual s(op[14], "End element: u'sub2'")188 self.assertEqual s(op[15], "External entity ref: (None, u'entity.file', None)")189 self.assertEqual s(op[16], "End element: u'root'")173 self.assertEqual(op[0], 'PI: u\'xml-stylesheet\' u\'href="stylesheet.css"\'') 174 self.assertEqual(op[1], "Comment: u' comment data '") 175 self.assertEqual(op[2], "Notation declared: (u'notation', None, u'notation.jpeg', None)") 176 self.assertEqual(op[3], "Unparsed entity decl: (u'unparsed_entity', None, u'entity.file', None, u'notation')") 177 self.assertEqual(op[4], "Start element: u'root' {u'attr1': u'value1', u'attr2': u'value2\\u1f40'}") 178 self.assertEqual(op[5], "NS decl: u'myns' u'http://www.python.org/namespace'") 179 self.assertEqual(op[6], "Start element: u'http://www.python.org/namespace!subelement' {}") 180 self.assertEqual(op[7], "Character data: u'Contents of subelements'") 181 self.assertEqual(op[8], "End element: u'http://www.python.org/namespace!subelement'") 182 self.assertEqual(op[9], "End of NS decl: u'myns'") 183 self.assertEqual(op[10], "Start element: u'sub2' {}") 184 self.assertEqual(op[11], 'Start of CDATA section') 185 self.assertEqual(op[12], "Character data: u'contents of CDATA section'") 186 self.assertEqual(op[13], 'End of CDATA section') 187 self.assertEqual(op[14], "End element: u'sub2'") 188 self.assertEqual(op[15], "External entity ref: (None, u'entity.file', None)") 189 self.assertEqual(op[16], "End element: u'root'") 190 190 191 191 def test_parse_file(self): … … 201 201 202 202 op = out.out 203 self.assertEquals(op[0], 'PI: u\'xml-stylesheet\' u\'href="stylesheet.css"\'') 204 self.assertEquals(op[1], "Comment: u' comment data '") 205 self.assertEquals(op[2], "Notation declared: (u'notation', None, u'notation.jpeg', None)") 206 self.assertEquals(op[3], "Unparsed entity decl: (u'unparsed_entity', None, u'entity.file', None, u'notation')") 207 self.assertEquals(op[4], "Start element: u'root' {u'attr1': u'value1', u'attr2': u'value2\\u1f40'}") 208 self.assertEquals(op[5], "NS decl: u'myns' u'http://www.python.org/namespace'") 209 self.assertEquals(op[6], "Start element: u'http://www.python.org/namespace!subelement' {}") 210 self.assertEquals(op[7], "Character data: u'Contents of subelements'") 211 self.assertEquals(op[8], "End element: u'http://www.python.org/namespace!subelement'") 212 self.assertEquals(op[9], "End of NS decl: u'myns'") 213 self.assertEquals(op[10], "Start element: u'sub2' {}") 214 self.assertEquals(op[11], 'Start of CDATA section') 215 self.assertEquals(op[12], "Character data: u'contents of CDATA section'") 216 self.assertEquals(op[13], 'End of CDATA section') 217 self.assertEquals(op[14], "End element: u'sub2'") 218 self.assertEquals(op[15], "External entity ref: (None, u'entity.file', None)") 219 self.assertEquals(op[16], "End element: u'root'") 203 self.assertEqual(op[0], 'PI: u\'xml-stylesheet\' u\'href="stylesheet.css"\'') 204 self.assertEqual(op[1], "Comment: u' comment data '") 205 self.assertEqual(op[2], "Notation declared: (u'notation', None, u'notation.jpeg', None)") 206 self.assertEqual(op[3], "Unparsed entity decl: (u'unparsed_entity', None, u'entity.file', None, u'notation')") 207 self.assertEqual(op[4], "Start element: u'root' {u'attr1': u'value1', u'attr2': u'value2\\u1f40'}") 208 self.assertEqual(op[5], "NS decl: u'myns' u'http://www.python.org/namespace'") 209 self.assertEqual(op[6], "Start element: u'http://www.python.org/namespace!subelement' {}") 210 self.assertEqual(op[7], "Character data: u'Contents of subelements'") 211 self.assertEqual(op[8], "End element: u'http://www.python.org/namespace!subelement'") 212 self.assertEqual(op[9], "End of NS decl: u'myns'") 213 self.assertEqual(op[10], "Start element: u'sub2' {}") 214 self.assertEqual(op[11], 'Start of CDATA section') 215 self.assertEqual(op[12], "Character data: u'contents of CDATA section'") 216 self.assertEqual(op[13], 'End of CDATA section') 217 self.assertEqual(op[14], "End element: u'sub2'") 218 self.assertEqual(op[15], "External entity ref: (None, u'entity.file', None)") 219 self.assertEqual(op[16], "End element: u'root'") 220 221 # Issue 4877: expat.ParseFile causes segfault on a closed file. 222 fp = open(test_support.TESTFN, 'wb') 223 try: 224 fp.close() 225 parser = expat.ParserCreate() 226 with self.assertRaises(ValueError): 227 parser.ParseFile(fp) 228 finally: 229 test_support.unlink(test_support.TESTFN) 220 230 221 231 … … 233 243 self.fail() 234 244 except TypeError, e: 235 self.assertEqual s(str(e),245 self.assertEqual(str(e), 236 246 'ParserCreate() argument 2 must be string or None, not int') 237 247 … … 240 250 self.fail() 241 251 except ValueError, e: 242 self.assertEqual s(str(e),252 self.assertEqual(str(e), 243 253 'namespace_separator must be at most one character, omitted, or None') 244 254 … … 266 276 p.Parse("<e> <e/> <e></e> </e>", 1) 267 277 tag = L[0] 268 self.assertEqual s(len(L), 6)278 self.assertEqual(len(L), 6) 269 279 for entry in L: 270 280 # L should have the same string repeated over and over. … … 280 290 281 291 def check(self, expected, label): 282 self.assertEqual s(self.stuff, expected,292 self.assertEqual(self.stuff, expected, 283 293 "%s\nstuff = %r\nexpected = %r" 284 294 % (label, self.stuff, map(unicode, expected))) … … 313 323 self.assertTrue(self.parser.buffer_text) 314 324 self.parser.Parse("<a>1<b/>2<c/>3</a>", 1) 315 self.assertEqual s(self.stuff, ['123'],316 325 self.assertEqual(self.stuff, ['123'], 326 "buffered text not properly collapsed") 317 327 318 328 def test1(self): … … 321 331 self.setHandlers(["StartElementHandler"]) 322 332 self.parser.Parse("<a>1<b buffer-text='no'/>2\n3<c buffer-text='yes'/>4\n5</a>", 1) 323 self.assertEqual s(self.stuff,324 325 333 self.assertEqual(self.stuff, 334 ["<a>", "1", "<b>", "2", "\n", "3", "<c>", "4\n5"], 335 "buffering control not reacting as expected") 326 336 327 337 def test2(self): 328 338 self.parser.Parse("<a>1<b/><2><c/> \n 3</a>", 1) 329 self.assertEqual s(self.stuff, ["1<2> \n 3"],330 339 self.assertEqual(self.stuff, ["1<2> \n 3"], 340 "buffered text not properly collapsed") 331 341 332 342 def test3(self): 333 343 self.setHandlers(["StartElementHandler"]) 334 344 self.parser.Parse("<a>1<b/>2<c/>3</a>", 1) 335 self.assertEqual s(self.stuff, ["<a>", "1", "<b>", "2", "<c>", "3"],345 self.assertEqual(self.stuff, ["<a>", "1", "<b>", "2", "<c>", "3"], 336 346 "buffered text not properly split") 337 347 … … 340 350 self.parser.CharacterDataHandler = None 341 351 self.parser.Parse("<a>1<b/>2<c/>3</a>", 1) 342 self.assertEqual s(self.stuff,343 352 self.assertEqual(self.stuff, 353 ["<a>", "<b>", "</b>", "<c>", "</c>", "</a>"]) 344 354 345 355 def test5(self): 346 356 self.setHandlers(["StartElementHandler", "EndElementHandler"]) 347 357 self.parser.Parse("<a>1<b></b>2<c/>3</a>", 1) 348 self.assertEqual s(self.stuff,358 self.assertEqual(self.stuff, 349 359 ["<a>", "1", "<b>", "</b>", "2", "<c>", "</c>", "3", "</a>"]) 350 360 … … 353 363 "StartElementHandler"]) 354 364 self.parser.Parse("<a>1<b/>2<c></c>345</a> ", 1) 355 self.assertEqual s(self.stuff,365 self.assertEqual(self.stuff, 356 366 ["<a>", "1", "<b>", "</b>", "2", "<c>", "</c>", "345", "</a>"], 357 367 "buffered text not properly split") … … 361 371 "StartElementHandler"]) 362 372 self.parser.Parse("<a>1<b/>2<c></c>3<!--abc-->4<!--def-->5</a> ", 1) 363 self.assertEqual s(self.stuff,364 365 366 373 self.assertEqual(self.stuff, 374 ["<a>", "1", "<b>", "</b>", "2", "<c>", "</c>", "3", 375 "<!--abc-->", "4", "<!--def-->", "5", "</a>"], 376 "buffered text not properly split") 367 377 368 378 … … 379 389 self.fail() 380 390 except RuntimeError, e: 381 self.assertEqual s(e.args[0], 'a',382 383 391 self.assertEqual(e.args[0], 'a', 392 "Expected RuntimeError for element 'a', but" + \ 393 " found %r" % e.args[0]) 384 394 385 395 … … 400 410 'too many parser events') 401 411 expected = self.expected_list[self.upto] 402 self.assertEqual s(pos, expected,412 self.assertEqual(pos, expected, 403 413 'Expected position %s, got position %s' %(pos, expected)) 404 414 self.upto += 1 … … 441 451 442 452 def test_1025_bytes(self): 443 self.assertEqual s(self.small_buffer_test(1025), 2)453 self.assertEqual(self.small_buffer_test(1025), 2) 444 454 445 455 def test_1000_bytes(self): 446 self.assertEqual s(self.small_buffer_test(1000), 1)456 self.assertEqual(self.small_buffer_test(1000), 1) 447 457 448 458 def test_wrong_size(self): … … 468 478 self.n = 0 469 479 parser.Parse(xml1) 470 self.assertEqual s(self.n, 1)480 self.assertEqual(self.n, 1) 471 481 472 482 # Reassign to buffer_size, but assign the same size. 473 483 parser.buffer_size = parser.buffer_size 474 self.assertEqual s(self.n, 1)484 self.assertEqual(self.n, 1) 475 485 476 486 # Try parsing rest of the document 477 487 parser.Parse(xml2) 478 self.assertEqual s(self.n, 2)488 self.assertEqual(self.n, 2) 479 489 480 490 … … 487 497 parser.buffer_text = 1 488 498 parser.buffer_size = 1024 489 self.assertEqual s(parser.buffer_size, 1024)499 self.assertEqual(parser.buffer_size, 1024) 490 500 491 501 # Parse one chunk of XML 492 502 self.n = 0 493 503 parser.Parse(xml1, 0) 494 self.assertEqual s(parser.buffer_size, 1024)495 self.assertEqual s(self.n, 1)504 self.assertEqual(parser.buffer_size, 1024) 505 self.assertEqual(self.n, 1) 496 506 497 507 # Turn off buffering and parse the next chunk. 498 508 parser.buffer_text = 0 499 509 self.assertFalse(parser.buffer_text) 500 self.assertEqual s(parser.buffer_size, 1024)510 self.assertEqual(parser.buffer_size, 1024) 501 511 for i in range(10): 502 512 parser.Parse(xml2, 0) 503 self.assertEqual s(self.n, 11)513 self.assertEqual(self.n, 11) 504 514 505 515 parser.buffer_text = 1 506 516 self.assertTrue(parser.buffer_text) 507 self.assertEqual s(parser.buffer_size, 1024)517 self.assertEqual(parser.buffer_size, 1024) 508 518 parser.Parse(xml3, 1) 509 self.assertEqual s(self.n, 12)519 self.assertEqual(self.n, 12) 510 520 511 521 … … 535 545 parser.buffer_text = 1 536 546 parser.buffer_size = 1024 537 self.assertEqual s(parser.buffer_size, 1024)547 self.assertEqual(parser.buffer_size, 1024) 538 548 539 549 self.n = 0 540 550 parser.Parse(xml1, 0) 541 551 parser.buffer_size *= 2 542 self.assertEqual s(parser.buffer_size, 2048)552 self.assertEqual(parser.buffer_size, 2048) 543 553 parser.Parse(xml2, 1) 544 self.assertEqual s(self.n, 2)554 self.assertEqual(self.n, 2) 545 555 546 556 def test_change_size_2(self): … … 551 561 parser.buffer_text = 1 552 562 parser.buffer_size = 2048 553 self.assertEqual s(parser.buffer_size, 2048)563 self.assertEqual(parser.buffer_size, 2048) 554 564 555 565 self.n=0 556 566 parser.Parse(xml1, 0) 557 parser.buffer_size / = 2558 self.assertEqual s(parser.buffer_size, 1024)567 parser.buffer_size //= 2 568 self.assertEqual(parser.buffer_size, 1024) 559 569 parser.Parse(xml2, 1) 560 self.assertEqual s(self.n, 4)570 self.assertEqual(self.n, 4) 561 571 562 572 class MalformedInputText(unittest.TestCase): … … 568 578 self.fail() 569 579 except expat.ExpatError as e: 570 self.assertEqual s(str(e), 'unclosed token: line 2, column 0')580 self.assertEqual(str(e), 'unclosed token: line 2, column 0') 571 581 572 582 def test2(self): … … 577 587 self.fail() 578 588 except expat.ExpatError as e: 579 self.assertEquals(str(e), 'XML declaration not well-formed: line 1, column 14') 589 self.assertEqual(str(e), 'XML declaration not well-formed: line 1, column 14') 590 591 class ForeignDTDTests(unittest.TestCase): 592 """ 593 Tests for the UseForeignDTD method of expat parser objects. 594 """ 595 def test_use_foreign_dtd(self): 596 """ 597 If UseForeignDTD is passed True and a document without an external 598 entity reference is parsed, ExternalEntityRefHandler is first called 599 with None for the public and system ids. 600 """ 601 handler_call_args = [] 602 def resolve_entity(context, base, system_id, public_id): 603 handler_call_args.append((public_id, system_id)) 604 return 1 605 606 parser = expat.ParserCreate() 607 parser.UseForeignDTD(True) 608 parser.SetParamEntityParsing(expat.XML_PARAM_ENTITY_PARSING_ALWAYS) 609 parser.ExternalEntityRefHandler = resolve_entity 610 parser.Parse("<?xml version='1.0'?><element/>") 611 self.assertEqual(handler_call_args, [(None, None)]) 612 613 # test UseForeignDTD() is equal to UseForeignDTD(True) 614 handler_call_args[:] = [] 615 616 parser = expat.ParserCreate() 617 parser.UseForeignDTD() 618 parser.SetParamEntityParsing(expat.XML_PARAM_ENTITY_PARSING_ALWAYS) 619 parser.ExternalEntityRefHandler = resolve_entity 620 parser.Parse("<?xml version='1.0'?><element/>") 621 self.assertEqual(handler_call_args, [(None, None)]) 622 623 def test_ignore_use_foreign_dtd(self): 624 """ 625 If UseForeignDTD is passed True and a document with an external 626 entity reference is parsed, ExternalEntityRefHandler is called with 627 the public and system ids from the document. 628 """ 629 handler_call_args = [] 630 def resolve_entity(context, base, system_id, public_id): 631 handler_call_args.append((public_id, system_id)) 632 return 1 633 634 parser = expat.ParserCreate() 635 parser.UseForeignDTD(True) 636 parser.SetParamEntityParsing(expat.XML_PARAM_ENTITY_PARSING_ALWAYS) 637 parser.ExternalEntityRefHandler = resolve_entity 638 parser.Parse( 639 "<?xml version='1.0'?><!DOCTYPE foo PUBLIC 'bar' 'baz'><element/>") 640 self.assertEqual(handler_call_args, [("bar", "baz")]) 641 580 642 581 643 def test_main(): … … 589 651 sf1296433Test, 590 652 ChardataBufferTest, 591 MalformedInputText) 653 MalformedInputText, 654 ForeignDTDTests) 592 655 593 656 if __name__ == "__main__":
Note:
See TracChangeset
for help on using the changeset viewer.