summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoffrey Sneddon <me@gsnedders.com>2015-12-08 16:02:57 +0000
committerGeoffrey Sneddon <me@gsnedders.com>2015-12-08 16:02:57 +0000
commitc91a18b10c9d34ae45192401b7a81f7139fb4745 (patch)
treec264f1b33a094307f0f867216825bb1ca3e90cc1
parentab193d0dc6df48257fdd50e10b0572845d9e2940 (diff)
downloadbeautifulsoup4-c91a18b10c9d34ae45192401b7a81f7139fb4745.tar.gz
Fix foster parenting with html5lib.
This makes all of the html5lib tests pass. Yay!
-rw-r--r--bs4/builder/_html5lib.py8
-rw-r--r--bs4/tests/test_html5lib.py5
2 files changed, 10 insertions, 3 deletions
diff --git a/bs4/builder/_html5lib.py b/bs4/builder/_html5lib.py
index a535747..755518d 100644
--- a/bs4/builder/_html5lib.py
+++ b/bs4/builder/_html5lib.py
@@ -217,8 +217,10 @@ class Element(html5lib.treebuilders._base.Node):
child = node
elif node.element.__class__ == NavigableString:
string_child = child = node.element
+ node.parent = self
else:
child = node.element
+ node.parent = self
if not isinstance(child, basestring) and child.parent is not None:
node.element.extract()
@@ -283,11 +285,11 @@ class Element(html5lib.treebuilders._base.Node):
attributes = property(getAttributes, setAttributes)
def insertText(self, data, insertBefore=None):
+ text = TextNode(self.soup.new_string(data), self.soup)
if insertBefore:
- text = TextNode(self.soup.new_string(data), self.soup)
- self.insertBefore(data, insertBefore)
+ self.insertBefore(text, insertBefore)
else:
- self.appendChild(data)
+ self.appendChild(text)
def insertBefore(self, node, refNode):
index = self.element.index(refNode.element)
diff --git a/bs4/tests/test_html5lib.py b/bs4/tests/test_html5lib.py
index 65536c2..34883fe 100644
--- a/bs4/tests/test_html5lib.py
+++ b/bs4/tests/test_html5lib.py
@@ -96,3 +96,8 @@ class HTML5LibBuilderSmokeTest(SoupTest, HTML5TreeBuilderSmokeTest):
a1, a2 = soup.find_all('a')
self.assertEqual(a1, a2)
assert a1 is not a2
+
+ def test_foster_parenting(self):
+ markup = b"""<table><td></tbody>A"""
+ soup = self.soup(markup)
+ self.assertEqual(u"<body>A<table><tbody><tr><td></td></tr></tbody></table></body>", soup.body.decode())