class TestDocumentFragment(TestCase): def setUp(self): self.df = DocumentFragment() self.elm = Element('a') self.c1 = Element('c1') self.c2 = Element('c2') self.c3 = Element('c3') def test_nodename(self): self.assertEqual(self.df.nodeName, '#document-fragment') def test_children(self): self.assertFalse(self.df.hasChildNodes()) appended_child = self.df.appendChild(self.elm) self.assertEqual(self.df.html, '<a></a>') self.assertIs(appended_child, self.elm) def test_append_to_element(self): appended_child1 = self.df.appendChild(self.c1) appended_child2 = self.df.appendChild(self.c2) self.assertIs(self.df, self.c1.parentNode) self.assertIs(self.df, self.c2.parentNode) self.assertIs(appended_child1, self.c1) self.assertIs(appended_child2, self.c2) appended_df = self.elm.appendChild(self.df) self.assertIs(appended_df, self.df) self.assertEqual(self.df.length, 0) self.assertEqual(self.elm.length, 2) self.assertFalse(self.df.hasChildNodes()) self.assertIsNone(self.df.parentNode) self.assertIs(self.elm, self.c1.parentNode) self.assertIs(self.elm, self.c2.parentNode) self.assertIsNone(self.df.parentNode) def test_insert_to_element(self): self.df.appendChild(self.c1) self.df.appendChild(self.c2) self.elm.appendChild(self.c3) inserted_node = self.elm.insertBefore(self.df, self.c3) self.assertIs(inserted_node, self.df) self.assertEqual(self.df.length, 0) self.assertEqual(self.elm.length, 3) self.assertFalse(self.df.hasChildNodes()) self.assertIsNone(self.df.parentNode) self.assertIs(self.elm, self.c1.parentNode) self.assertIs(self.elm, self.c2.parentNode) self.assertIsNone(self.c1.previousSibling) self.assertIs(self.c1.nextSibling, self.c2) self.assertIs(self.c2.previousSibling, self.c1) self.assertIs(self.c2.nextSibling, self.c3) self.assertIs(self.c3.previousSibling, self.c2) self.assertIsNone(self.c3.nextSibling) self.assertIs(self.elm.firstChild, self.c1) self.assertIs(self.elm.lastChild, self.c3) def test_child(self): appended_child1 = self.df.appendChild(self.c1) appended_child2 = self.df.appendChild(self.c2) self.assertIs(appended_child1, self.c1) self.assertIs(appended_child2, self.c2) self.assertEqual(self.c1.html, '<c1></c1>') self.assertEqual(self.df.html, '<c1></c1><c2></c2>') def test_clone_node_sharrow(self): self.df.appendChild(self.c1) clone = self.df.cloneNode() self.assertEqual(self.df.length, 1) self.assertEqual(clone.length, 0) clone.appendChild(self.c2) self.assertEqual(self.df.length, 1) self.assertEqual(clone.length, 1) def test_clone_node_deep(self): self.df.appendChild(self.c1) clone = self.df.cloneNode(deep=True) self.assertEqual(self.df.length, 1) self.assertEqual(clone.length, 1) self.assertEqual(clone.html, '<c1></c1>') clone.appendChild(self.c2) self.assertEqual(self.df.length, 1) self.assertEqual(clone.length, 2) self.df.removeChild(self.c1) self.assertEqual(self.df.length, 0) self.assertEqual(clone.length, 2)