(self, clone_document)
| 966 | self.check_clone_pi(1, "testClonePIDeep") |
| 967 | |
| 968 | def check_clone_node_entity(self, clone_document): |
| 969 | # bpo-35052: Test user data handler in cloneNode() on a document with |
| 970 | # an entity |
| 971 | document = xml.dom.minidom.parseString(""" |
| 972 | <?xml version="1.0" ?> |
| 973 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
| 974 | "http://www.w3.org/TR/html4/strict.dtd" |
| 975 | [ <!ENTITY smile "☺"> ] |
| 976 | > |
| 977 | <doc>Don't let entities make you frown ⌣</doc> |
| 978 | """.strip()) |
| 979 | |
| 980 | class Handler: |
| 981 | def handle(self, operation, key, data, src, dst): |
| 982 | self.operation = operation |
| 983 | self.key = key |
| 984 | self.data = data |
| 985 | self.src = src |
| 986 | self.dst = dst |
| 987 | |
| 988 | handler = Handler() |
| 989 | doctype = document.doctype |
| 990 | entity = doctype.entities['smile'] |
| 991 | entity.setUserData("key", "data", handler) |
| 992 | |
| 993 | if clone_document: |
| 994 | # clone Document |
| 995 | clone = document.cloneNode(deep=True) |
| 996 | |
| 997 | self.assertEqual(clone.documentElement.firstChild.wholeText, |
| 998 | "Don't let entities make you frown ☺") |
| 999 | operation = xml.dom.UserDataHandler.NODE_IMPORTED |
| 1000 | dst = clone.doctype.entities['smile'] |
| 1001 | else: |
| 1002 | # clone DocumentType |
| 1003 | with support.swap_attr(doctype, 'ownerDocument', None): |
| 1004 | clone = doctype.cloneNode(deep=True) |
| 1005 | |
| 1006 | operation = xml.dom.UserDataHandler.NODE_CLONED |
| 1007 | dst = clone.entities['smile'] |
| 1008 | |
| 1009 | self.assertEqual(handler.operation, operation) |
| 1010 | self.assertEqual(handler.key, "key") |
| 1011 | self.assertEqual(handler.data, "data") |
| 1012 | self.assertIs(handler.src, entity) |
| 1013 | self.assertIs(handler.dst, dst) |
| 1014 | |
| 1015 | @unittest.expectedFailure # TODO: RUSTPYTHON |
| 1016 | def testCloneNodeEntity(self): |
no test coverage detected