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