diff options
author | Leonard Richardson <leonard.richardson@canonical.com> | 2012-04-26 23:29:32 -0400 |
---|---|---|
committer | Leonard Richardson <leonard.richardson@canonical.com> | 2012-04-26 23:29:32 -0400 |
commit | f71ba86ec04e2ce0ff5a0e64f4f20becadcc6ddc (patch) | |
tree | 6d0aec2cc1659615ae903851789ea59f8eddf138 /bs4 | |
parent | d1261fb0a2df9929658dfdc9fe5880974e287d21 (diff) |
Added a new method, wrap().
Diffstat (limited to 'bs4')
-rw-r--r-- | bs4/element.py | 5 | ||||
-rw-r--r-- | bs4/tests/test_tree.py | 31 |
2 files changed, 31 insertions, 5 deletions
diff --git a/bs4/element.py b/bs4/element.py index eb7e8aa..3ef6ef1 100644 --- a/bs4/element.py +++ b/bs4/element.py @@ -160,6 +160,11 @@ class PageElement(object): replace_with_children = unwrap replaceWithChildren = unwrap # BS3 + def wrap(self, wrap_inside): + me = self.replace_with(wrap_inside) + wrap_inside.append(me) + return wrap_inside + def extract(self): """Destructively rips this element out of the tree.""" if self.parent is not None: diff --git a/bs4/tests/test_tree.py b/bs4/tests/test_tree.py index 867fdaa..9a10edf 100644 --- a/bs4/tests/test_tree.py +++ b/bs4/tests/test_tree.py @@ -352,7 +352,7 @@ class TestFindAllByAttribute(TreeTest): class TestIndex(TreeTest): """Test Tag.index""" def test_index(self): - tree = self.soup("""<wrap> + tree = self.soup("""<div> <a>Identical</a> <b>Not identical</b> <a>Identical</a> @@ -360,10 +360,10 @@ class TestIndex(TreeTest): <c><d>Identical with child</d></c> <b>Also not identical</b> <c><d>Identical with child</d></c> - </wrap>""") - wrap = tree.wrap - for i, element in enumerate(wrap.contents): - self.assertEqual(i, wrap.index(element)) + </div>""") + div = tree.div + for i, element in enumerate(div.contents): + self.assertEqual(i, div.index(element)) self.assertRaises(ValueError, tree.index, 1) @@ -926,6 +926,27 @@ class TestTreeModification(SoupTest): self.assertEqual(tree.em, None) self.assertEqual(tree.p.text, "Unneeded formatting is unneeded") + def test_wrap(self): + soup = self.soup("I wish I was bold.") + value = soup.string.wrap(soup.new_tag("b")) + self.assertEqual(value.decode(), "<b>I wish I was bold.</b>") + self.assertEqual( + soup.decode(), self.document_for("<b>I wish I was bold.</b>")) + + def test_wrap_extracts_tag_from_elsewhere(self): + soup = self.soup("<b></b>I wish I was bold.") + soup.b.next_sibling.wrap(soup.b) + self.assertEqual( + soup.decode(), self.document_for("<b>I wish I was bold.</b>")) + + def test_wrap_puts_new_contents_at_the_end(self): + soup = self.soup("<b>I like being bold.</b>I wish I was bold.") + soup.b.next_sibling.wrap(soup.b) + self.assertEqual(2, len(soup.b.contents)) + self.assertEqual( + soup.decode(), self.document_for( + "<b>I like being bold.I wish I was bold.</b>")) + def test_extract(self): soup = self.soup( '<html><body>Some content. <div id="nav">Nav crap</div> More content.</body></html>') |