Skip to content

Commit c8f3069

Browse files
committed
Add a separate testsuite for treebuilders.
1 parent 1a28d72 commit c8f3069

File tree

1 file changed

+167
-0
lines changed

1 file changed

+167
-0
lines changed

html5lib/tests/test_treebuilder.py

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
from __future__ import absolute_import, division, unicode_literals
2+
3+
import pytest
4+
5+
from . import support # noqa
6+
7+
from html5lib.constants import namespaces
8+
9+
10+
@pytest.fixture(params=support.treeTypes.items())
11+
def treeBuilder(request):
12+
treeName, treeAPIs = request.param
13+
if treeAPIs is None:
14+
pytest.skip("Treebuilder not loaded")
15+
elif "adapter" in treeAPIs:
16+
pytest.skip("Tree type requires adapter")
17+
return treeAPIs["builder"]
18+
19+
20+
def _Element(builder, local, namespace=None):
21+
token = {
22+
"name": local,
23+
"data": {}
24+
}
25+
if namespace is not None:
26+
token["namespace"] = namespace
27+
return builder.createElement(token)
28+
29+
30+
def test_append(treeBuilder):
31+
# set everything up
32+
builder = treeBuilder(True)
33+
parent = _Element(builder, "div", namespaces["html"])
34+
child = _Element(builder, "span", namespaces["html"])
35+
assert parent.parent is None
36+
assert not parent.hasContent()
37+
assert child.parent is None
38+
39+
# append the child
40+
parent.appendChild(child)
41+
assert parent.hasContent()
42+
assert child.parent == parent
43+
44+
45+
def test_insertText(treeBuilder):
46+
# set everything up
47+
builder = treeBuilder(True)
48+
parent = _Element(builder, "div", namespaces["html"])
49+
assert parent.parent is None
50+
assert not parent.hasContent()
51+
52+
# do the insertText
53+
parent.insertText("foo")
54+
assert parent.hasContent()
55+
56+
57+
def test_insertText_before(treeBuilder):
58+
# set everything up
59+
builder = treeBuilder(True)
60+
parent = _Element(builder, "div", namespaces["html"])
61+
ref_child = _Element(builder, "foo", namespaces["html"])
62+
assert parent.parent is None
63+
assert not parent.hasContent()
64+
assert ref_child.parent is None
65+
66+
# add the ref child
67+
parent.appendChild(ref_child)
68+
assert parent.hasContent()
69+
assert ref_child.parent == parent
70+
71+
# do the insertText
72+
parent.insertText("bar", ref_child)
73+
assert parent.hasContent()
74+
assert ref_child.parent == parent
75+
76+
77+
def test_insertBefore(treeBuilder):
78+
# set everything up
79+
builder = treeBuilder(True)
80+
parent = _Element(builder, "div", namespaces["html"])
81+
child = _Element(builder, "span", namespaces["html"])
82+
ref_child = _Element(builder, "foo", namespaces["html"])
83+
assert parent.parent is None
84+
assert not parent.hasContent()
85+
assert ref_child.parent is None
86+
assert child.parent is None
87+
88+
# add the ref child
89+
parent.appendChild(ref_child)
90+
assert parent.hasContent()
91+
assert ref_child.parent == parent
92+
93+
# do the insertBefore
94+
parent.insertBefore(child, ref_child)
95+
assert parent.hasContent()
96+
assert ref_child.parent == parent
97+
assert child.parent == parent
98+
99+
100+
def test_removeChild(treeBuilder):
101+
# set everything up
102+
builder = treeBuilder(True)
103+
parent = _Element(builder, "div", namespaces["html"])
104+
child = _Element(builder, "span", namespaces["html"])
105+
assert parent.parent is None
106+
assert not parent.hasContent()
107+
assert child.parent is None
108+
109+
# append the child
110+
parent.appendChild(child)
111+
assert parent.hasContent()
112+
assert child.parent == parent
113+
114+
# and remove it
115+
parent.removeChild(child)
116+
assert not parent.hasContent()
117+
assert child.parent is None
118+
119+
120+
def test_reparentChildren(treeBuilder):
121+
# set everything up
122+
builder = treeBuilder(True)
123+
parent = _Element(builder, "div", namespaces["html"])
124+
new_parent = _Element(builder, "div", namespaces["html"])
125+
child = _Element(builder, "span", namespaces["html"])
126+
assert not parent.hasContent()
127+
assert not new_parent.hasContent()
128+
129+
# append the child
130+
parent.appendChild(child)
131+
assert parent.hasContent()
132+
assert child.parent == parent
133+
134+
# and reparent
135+
parent.reparentChildren(new_parent)
136+
assert not parent.hasContent()
137+
assert new_parent.hasContent()
138+
assert child.parent == new_parent
139+
140+
141+
def test_cloneNode(treeBuilder):
142+
# set everything up
143+
builder = treeBuilder(True)
144+
parent = _Element(builder, "div", namespaces["html"])
145+
child = _Element(builder, "span", namespaces["html"])
146+
assert not parent.hasContent()
147+
148+
# append the child
149+
parent.appendChild(child)
150+
assert parent.hasContent()
151+
assert child.parent == parent
152+
153+
# and clone the parent
154+
new_parent = parent.cloneNode()
155+
assert parent.hasContent()
156+
assert not new_parent.hasContent()
157+
assert child.parent == parent
158+
159+
160+
def test_tb_constructor(treeBuilder):
161+
builder = treeBuilder(True)
162+
assert builder.defaultNamespace == namespaces["html"]
163+
assert builder.openElements == []
164+
assert builder.activeFormattingElements == []
165+
assert builder.headPointer is None
166+
assert builder.formPointer is None
167+
assert builder.insertFromTable == False

0 commit comments

Comments
 (0)