| 433 | self.serialize_check(e3, '<tag>hello<foo /></tag>') |
| 434 | |
| 435 | def test_attrib(self): |
| 436 | # Test attribute handling. |
| 437 | |
| 438 | elem = ET.Element("tag") |
| 439 | elem.get("key") # 1.1 |
| 440 | self.assertEqual(elem.get("key", "default"), 'default') # 1.2 |
| 441 | |
| 442 | elem.set("key", "value") |
| 443 | self.assertEqual(elem.get("key"), 'value') # 1.3 |
| 444 | |
| 445 | elem = ET.Element("tag", key="value") |
| 446 | self.assertEqual(elem.get("key"), 'value') # 2.1 |
| 447 | self.assertEqual(elem.attrib, {'key': 'value'}) # 2.2 |
| 448 | |
| 449 | attrib = {"key": "value"} |
| 450 | elem = ET.Element("tag", attrib) |
| 451 | attrib.clear() # check for aliasing issues |
| 452 | self.assertEqual(elem.get("key"), 'value') # 3.1 |
| 453 | self.assertEqual(elem.attrib, {'key': 'value'}) # 3.2 |
| 454 | |
| 455 | attrib = {"key": "value"} |
| 456 | elem = ET.Element("tag", **attrib) |
| 457 | attrib.clear() # check for aliasing issues |
| 458 | self.assertEqual(elem.get("key"), 'value') # 4.1 |
| 459 | self.assertEqual(elem.attrib, {'key': 'value'}) # 4.2 |
| 460 | |
| 461 | elem = ET.Element("tag", {"key": "other"}, key="value") |
| 462 | self.assertEqual(elem.get("key"), 'value') # 5.1 |
| 463 | self.assertEqual(elem.attrib, {'key': 'value'}) # 5.2 |
| 464 | |
| 465 | elem = ET.Element('test') |
| 466 | elem.text = "aa" |
| 467 | elem.set('testa', 'testval') |
| 468 | elem.set('testb', 'test2') |
| 469 | self.assertEqual(ET.tostring(elem), |
| 470 | b'<test testa="testval" testb="test2">aa</test>') |
| 471 | self.assertEqual(sorted(elem.keys()), ['testa', 'testb']) |
| 472 | self.assertEqual(sorted(elem.items()), |
| 473 | [('testa', 'testval'), ('testb', 'test2')]) |
| 474 | self.assertEqual(elem.attrib['testb'], 'test2') |
| 475 | elem.attrib['testb'] = 'test1' |
| 476 | elem.attrib['testc'] = 'test2' |
| 477 | self.assertEqual(ET.tostring(elem), |
| 478 | b'<test testa="testval" testb="test1" testc="test2">aa</test>') |
| 479 | |
| 480 | # Test preserving white space chars in attributes |
| 481 | elem = ET.Element('test') |
| 482 | elem.set('a', '\r') |
| 483 | elem.set('b', '\r\n') |
| 484 | elem.set('c', '\t\n\r ') |
| 485 | elem.set('d', '\n\n\r\r\t\t ') |
| 486 | self.assertEqual(ET.tostring(elem), |
| 487 | b'<test a=" " b=" " c="	 " d=" 		 " />') |
| 488 | |
| 489 | def test_makeelement(self): |
| 490 | # Test makeelement handling. |