Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9dc49f6

Browse files
committed
Merge pull request#240 from gsnedders/tree_types
Sort out the tokenizer and tree-construction tests; r=nobody!
2 parentsb5b91cc +68d6f34 commit9dc49f6

File tree

6 files changed

+711
-924
lines changed

6 files changed

+711
-924
lines changed

‎.pytest.expect

Lines changed: 459 additions & 729 deletions
Large diffs are not rendered by default.

‎html5lib/tests/conftest.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
importos.path
22

33
from .tree_constructionimportTreeConstructionFile
4+
from .tokenizerimportTokenizerFile
45

56
_dir=os.path.abspath(os.path.dirname(__file__))
67
_testdata=os.path.join(_dir,"testdata")
78
_tree_construction=os.path.join(_testdata,"tree-construction")
9+
_tokenizer=os.path.join(_testdata,"tokenizer")
810

911

1012
defpytest_collectstart():
@@ -19,3 +21,6 @@ def pytest_collect_file(path, parent):
1921
return
2022
ifpath.ext==".dat":
2123
returnTreeConstructionFile(path,parent)
24+
elifdir==_tokenizer:
25+
ifpath.ext==".test":
26+
returnTokenizerFile(path,parent)

‎html5lib/tests/support.py

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,24 @@
1313
os.path.pardir,
1414
os.path.pardir)))
1515

16-
fromhtml5libimporttreebuilders
16+
fromhtml5libimporttreebuilders,treewalkers,treeadapters
1717
delbase_path
1818

1919
# Build a dict of available trees
20-
treeTypes= {"DOM":treebuilders.getTreeBuilder("dom")}
20+
treeTypes= {}
2121

22-
# Try whatever etree implementations are available from a list that are
23-
#"supposed" to work
22+
# DOM impls
23+
treeTypes["DOM"]= {
24+
"builder":treebuilders.getTreeBuilder("dom"),
25+
"walker":treewalkers.getTreeWalker("dom")
26+
}
27+
28+
# ElementTree impls
2429
importxml.etree.ElementTreeasElementTree
25-
treeTypes['ElementTree']=treebuilders.getTreeBuilder("etree",ElementTree,fullTree=True)
30+
treeTypes['ElementTree']= {
31+
"builder":treebuilders.getTreeBuilder("etree",ElementTree,fullTree=True),
32+
"walker":treewalkers.getTreeWalker("etree",ElementTree)
33+
}
2634

2735
try:
2836
importxml.etree.cElementTreeascElementTree
@@ -33,14 +41,32 @@
3341
ifcElementTree.ElementisElementTree.Element:
3442
treeTypes['cElementTree']=None
3543
else:
36-
treeTypes['cElementTree']=treebuilders.getTreeBuilder("etree",cElementTree,fullTree=True)
44+
treeTypes['cElementTree']= {
45+
"builder":treebuilders.getTreeBuilder("etree",cElementTree,fullTree=True),
46+
"walker":treewalkers.getTreeWalker("etree",cElementTree)
47+
}
3748

3849
try:
3950
importlxml.etreeaslxml# flake8: noqa
4051
exceptImportError:
4152
treeTypes['lxml']=None
4253
else:
43-
treeTypes['lxml']=treebuilders.getTreeBuilder("lxml")
54+
treeTypes['lxml']= {
55+
"builder":treebuilders.getTreeBuilder("lxml"),
56+
"walker":treewalkers.getTreeWalker("lxml")
57+
}
58+
59+
# Genshi impls
60+
try:
61+
importgenshi# flake8: noqa
62+
exceptImportError:
63+
pass
64+
else:
65+
treeTypes["genshi"]= {
66+
"builder":treebuilders.getTreeBuilder("dom"),
67+
"adapter":lambdatree:treeadapters.genshi.to_genshi(treewalkers.getTreeWalker("dom")(tree)),
68+
"walker":treewalkers.getTreeWalker("genshi")
69+
}
4470

4571

4672
defget_data_files(subdirectory,files='*.dat'):

‎html5lib/tests/test_treewalkers.py

Lines changed: 28 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,12 @@
11
from __future__importabsolute_import,division,unicode_literals
22

3-
importos
4-
importsys
5-
importunittest
6-
importwarnings
7-
fromdifflibimportunified_diff
3+
importpytest
84

9-
try:
10-
unittest.TestCase.assertEqual
11-
exceptAttributeError:
12-
unittest.TestCase.assertEqual=unittest.TestCase.assertEquals
5+
from .supportimporttreeTypes
136

14-
from .supportimportget_data_files,TestData,convertExpected
15-
16-
fromhtml5libimporthtml5parser,treewalkers,treebuilders,treeadapters,constants
7+
fromhtml5libimporthtml5parser,treewalkers
178
fromhtml5lib.filters.lintimportFilterasLint
189

19-
20-
treeTypes= {
21-
"DOM": {"builder":treebuilders.getTreeBuilder("dom"),
22-
"walker":treewalkers.getTreeWalker("dom")},
23-
}
24-
25-
# Try whatever etree implementations are available from a list that are
26-
#"supposed" to work
27-
try:
28-
importxml.etree.ElementTreeasElementTree
29-
exceptImportError:
30-
pass
31-
else:
32-
treeTypes['ElementTree']= \
33-
{"builder":treebuilders.getTreeBuilder("etree",ElementTree,fullTree=True),
34-
"walker":treewalkers.getTreeWalker("etree",ElementTree)}
35-
36-
try:
37-
importxml.etree.cElementTreeasElementTree
38-
exceptImportError:
39-
pass
40-
else:
41-
treeTypes['cElementTree']= \
42-
{"builder":treebuilders.getTreeBuilder("etree",ElementTree,fullTree=True),
43-
"walker":treewalkers.getTreeWalker("etree",ElementTree)}
44-
45-
46-
try:
47-
importlxml.etreeasElementTree# flake8: noqa
48-
exceptImportError:
49-
pass
50-
else:
51-
treeTypes['lxml_native']= \
52-
{"builder":treebuilders.getTreeBuilder("lxml"),
53-
"walker":treewalkers.getTreeWalker("lxml")}
54-
55-
56-
try:
57-
importgenshi# flake8: noqa
58-
exceptImportError:
59-
pass
60-
else:
61-
treeTypes["genshi"]= \
62-
{"builder":treebuilders.getTreeBuilder("dom"),
63-
"adapter":lambdatree:treeadapters.genshi.to_genshi(treewalkers.getTreeWalker("dom")(tree)),
64-
"walker":treewalkers.getTreeWalker("genshi")}
65-
6610
importre
6711
attrlist=re.compile(r"^(\s+)\w+=.*(\n\1\w+=.*)+",re.M)
6812

@@ -73,80 +17,29 @@ def sortattrs(x):
7317
return"\n".join(lines)
7418

7519

76-
classTokenTestCase(unittest.TestCase):
77-
deftest_all_tokens(self):
78-
expected= [
79-
{'data': {},'type':'StartTag','namespace':'http://www.w3.org/1999/xhtml','name':'html'},
80-
{'data': {},'type':'StartTag','namespace':'http://www.w3.org/1999/xhtml','name':'head'},
81-
{'type':'EndTag','namespace':'http://www.w3.org/1999/xhtml','name':'head'},
82-
{'data': {},'type':'StartTag','namespace':'http://www.w3.org/1999/xhtml','name':'body'},
83-
{'data':'a','type':'Characters'},
84-
{'data': {},'type':'StartTag','namespace':'http://www.w3.org/1999/xhtml','name':'div'},
85-
{'data':'b','type':'Characters'},
86-
{'type':'EndTag','namespace':'http://www.w3.org/1999/xhtml','name':'div'},
87-
{'data':'c','type':'Characters'},
88-
{'type':'EndTag','namespace':'http://www.w3.org/1999/xhtml','name':'body'},
89-
{'type':'EndTag','namespace':'http://www.w3.org/1999/xhtml','name':'html'}
90-
]
91-
fortreeName,treeClsinsorted(treeTypes.items()):
92-
p=html5parser.HTMLParser(tree=treeCls["builder"])
93-
document=p.parse("<html><head></head><body>a<div>b</div>c</body></html>")
94-
document=treeCls.get("adapter",lambdax:x)(document)
95-
output=Lint(treeCls["walker"](document))
96-
forexpectedToken,outputTokeninzip(expected,output):
97-
self.assertEqual(expectedToken,outputToken)
98-
99-
100-
defrunTreewalkerTest(innerHTML,input,expected,errors,treeClass):
101-
warnings.resetwarnings()
102-
warnings.simplefilter("error")
103-
try:
104-
p=html5parser.HTMLParser(tree=treeClass["builder"])
105-
ifinnerHTML:
106-
document=p.parseFragment(input,innerHTML)
107-
else:
108-
document=p.parse(input)
109-
exceptconstants.DataLossWarning:
110-
# Ignore testcases we know we don't pass
111-
return
112-
113-
document=treeClass.get("adapter",lambdax:x)(document)
114-
try:
115-
output=treewalkers.pprint(Lint(treeClass["walker"](document)))
116-
output=attrlist.sub(sortattrs,output)
117-
expected=attrlist.sub(sortattrs,convertExpected(expected))
118-
diff="".join(unified_diff([line+"\n"forlineinexpected.splitlines()],
119-
[line+"\n"forlineinoutput.splitlines()],
120-
"Expected","Received"))
121-
assertexpected==output,"\n".join([
122-
"","Input:",input,
123-
"","Expected:",expected,
124-
"","Received:",output,
125-
"","Diff:",diff,
126-
])
127-
exceptNotImplementedError:
128-
pass# Amnesty for those that confess...
129-
130-
131-
deftest_treewalker():
132-
sys.stdout.write('Testing tree walkers '+" ".join(list(treeTypes.keys()))+"\n")
133-
20+
deftest_all_tokens():
21+
expected= [
22+
{'data': {},'type':'StartTag','namespace':'http://www.w3.org/1999/xhtml','name':'html'},
23+
{'data': {},'type':'StartTag','namespace':'http://www.w3.org/1999/xhtml','name':'head'},
24+
{'type':'EndTag','namespace':'http://www.w3.org/1999/xhtml','name':'head'},
25+
{'data': {},'type':'StartTag','namespace':'http://www.w3.org/1999/xhtml','name':'body'},
26+
{'data':'a','type':'Characters'},
27+
{'data': {},'type':'StartTag','namespace':'http://www.w3.org/1999/xhtml','name':'div'},
28+
{'data':'b','type':'Characters'},
29+
{'type':'EndTag','namespace':'http://www.w3.org/1999/xhtml','name':'div'},
30+
{'data':'c','type':'Characters'},
31+
{'type':'EndTag','namespace':'http://www.w3.org/1999/xhtml','name':'body'},
32+
{'type':'EndTag','namespace':'http://www.w3.org/1999/xhtml','name':'html'}
33+
]
13434
fortreeName,treeClsinsorted(treeTypes.items()):
135-
files=get_data_files('tree-construction')
136-
forfilenameinfiles:
137-
testName=os.path.basename(filename).replace(".dat","")
138-
iftestNamein ("template",):
139-
continue
140-
141-
tests=TestData(filename,"data")
142-
143-
forindex,testinenumerate(tests):
144-
(input,errors,
145-
innerHTML,expected)= [test[key]forkeyin ("data","errors",
146-
"document-fragment",
147-
"document")]
148-
errors=errors.split("\n")
149-
yieldrunTreewalkerTest,innerHTML,input,expected,errors,treeCls
35+
iftreeClsisNone:
36+
continue
37+
p=html5parser.HTMLParser(tree=treeCls["builder"])
38+
document=p.parse("<html><head></head><body>a<div>b</div>c</body></html>")
39+
document=treeCls.get("adapter",lambdax:x)(document)
40+
output=Lint(treeCls["walker"](document))
41+
forexpectedToken,outputTokeninzip(expected,output):
42+
assertexpectedToken==outputToken
15043

15144

15245
defset_attribute_on_first_child(docfrag,name,value,treeName):
@@ -164,6 +57,8 @@ def set_attribute_on_first_child(docfrag, name, value, treeName):
16457
defrunTreewalkerEditTest(intext,expected,attrs_to_add,tree):
16558
"""tests what happens when we add attributes to the intext"""
16659
treeName,treeClass=tree
60+
iftreeClassisNone:
61+
pytest.skip("Treebuilder not loaded")
16762
parser=html5parser.HTMLParser(tree=treeClass["builder"])
16863
document=parser.parseFragment(intext)
16964
fornom,valinattrs_to_add:
@@ -172,7 +67,7 @@ def runTreewalkerEditTest(intext, expected, attrs_to_add, tree):
17267
document=treeClass.get("adapter",lambdax:x)(document)
17368
output=treewalkers.pprint(treeClass["walker"](document))
17469
output=attrlist.sub(sortattrs,output)
175-
ifnotoutputinexpected:
70+
ifoutputnotinexpected:
17671
raiseAssertionError("TreewalkerEditTest: %s\nExpected:\n%s\nReceived:\n%s"% (treeName,expected,output))
17772

17873

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp