| 1044 | "<b>I like being bold.I wish I was bold.</b>")) |
| 1045 | |
| 1046 | def test_extract(self): |
| 1047 | soup = self.soup( |
| 1048 | '<html><body>Some content. <div id="nav">Nav crap</div> More content.</body></html>') |
| 1049 | |
| 1050 | self.assertEqual(len(soup.body.contents), 3) |
| 1051 | extracted = soup.find(id="nav").extract() |
| 1052 | |
| 1053 | self.assertEqual( |
| 1054 | soup.decode(), "<html><body>Some content. More content.</body></html>") |
| 1055 | self.assertEqual(extracted.decode(), '<div id="nav">Nav crap</div>') |
| 1056 | |
| 1057 | # The extracted tag is now an orphan. |
| 1058 | self.assertEqual(len(soup.body.contents), 2) |
| 1059 | self.assertEqual(extracted.parent, None) |
| 1060 | self.assertEqual(extracted.previous_element, None) |
| 1061 | self.assertEqual(extracted.next_element.next_element, None) |
| 1062 | |
| 1063 | # The gap where the extracted tag used to be has been mended. |
| 1064 | content_1 = soup.find(text="Some content. ") |
| 1065 | content_2 = soup.find(text=" More content.") |
| 1066 | self.assertEqual(content_1.next_element, content_2) |
| 1067 | self.assertEqual(content_1.next_sibling, content_2) |
| 1068 | self.assertEqual(content_2.previous_element, content_1) |
| 1069 | self.assertEqual(content_2.previous_sibling, content_1) |
| 1070 | |
| 1071 | def test_extract_distinguishes_between_identical_strings(self): |
| 1072 | soup = self.soup("<a>foo</a><b>bar</b>") |