summaryrefslogtreecommitdiff
path: root/bs4
diff options
context:
space:
mode:
authorLeonard Richardson <leonard.richardson@canonical.com>2012-04-26 23:29:32 -0400
committerLeonard Richardson <leonard.richardson@canonical.com>2012-04-26 23:29:32 -0400
commitf71ba86ec04e2ce0ff5a0e64f4f20becadcc6ddc (patch)
tree6d0aec2cc1659615ae903851789ea59f8eddf138 /bs4
parentd1261fb0a2df9929658dfdc9fe5880974e287d21 (diff)
Added a new method, wrap().
Diffstat (limited to 'bs4')
-rw-r--r--bs4/element.py5
-rw-r--r--bs4/tests/test_tree.py31
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>')