From 06fade8759f3175af9e37bafb638de42c731025f Mon Sep 17 00:00:00 2001 From: Geoffrey Sneddon Date: Tue, 3 May 2016 16:13:26 +0200 Subject: [PATCH 1/7] Move to a single definition of treeTypes for all tests --- html5lib/tests/support.py | 40 +++++++++++++++---- html5lib/tests/test_treewalkers.py | 59 +++++------------------------ html5lib/tests/tree_construction.py | 13 +++++-- 3 files changed, 52 insertions(+), 60 deletions(-) diff --git a/html5lib/tests/support.py b/html5lib/tests/support.py index 56e09c81..54a64a85 100644 --- a/html5lib/tests/support.py +++ b/html5lib/tests/support.py @@ -13,16 +13,24 @@ os.path.pardir, os.path.pardir))) -from html5lib import treebuilders +from html5lib import treebuilders, treewalkers, treeadapters del base_path # Build a dict of available trees -treeTypes = {"DOM": treebuilders.getTreeBuilder("dom")} +treeTypes = {} -# Try whatever etree implementations are available from a list that are -#"supposed" to work +# DOM impls +treeTypes["DOM"] = { + "builder": treebuilders.getTreeBuilder("dom"), + "walker": treewalkers.getTreeWalker("dom") +} + +# ElementTree impls import xml.etree.ElementTree as ElementTree -treeTypes['ElementTree'] = treebuilders.getTreeBuilder("etree", ElementTree, fullTree=True) +treeTypes['ElementTree'] = { + "builder": treebuilders.getTreeBuilder("etree", ElementTree, fullTree=True), + "walker": treewalkers.getTreeWalker("etree", ElementTree) +} try: import xml.etree.cElementTree as cElementTree @@ -33,14 +41,32 @@ if cElementTree.Element is ElementTree.Element: treeTypes['cElementTree'] = None else: - treeTypes['cElementTree'] = treebuilders.getTreeBuilder("etree", cElementTree, fullTree=True) + treeTypes['cElementTree'] = { + "builder": treebuilders.getTreeBuilder("etree", cElementTree, fullTree=True), + "walker": treewalkers.getTreeWalker("etree", cElementTree) + } try: import lxml.etree as lxml # flake8: noqa except ImportError: treeTypes['lxml'] = None else: - treeTypes['lxml'] = treebuilders.getTreeBuilder("lxml") + treeTypes['lxml'] = { + "builder": treebuilders.getTreeBuilder("lxml"), + "walker": treewalkers.getTreeWalker("lxml") + } + +# Genshi impls +try: + import genshi # flake8: noqa +except ImportError: + pass +else: + treeTypes["genshi"] = { + "builder": treebuilders.getTreeBuilder("dom"), + "adapter": lambda tree: treeadapters.genshi.to_genshi(treewalkers.getTreeWalker("dom")(tree)), + "walker": treewalkers.getTreeWalker("genshi") + } def get_data_files(subdirectory, files='*.dat'): diff --git a/html5lib/tests/test_treewalkers.py b/html5lib/tests/test_treewalkers.py index e59f25ea..1d96ff88 100644 --- a/html5lib/tests/test_treewalkers.py +++ b/html5lib/tests/test_treewalkers.py @@ -11,57 +11,12 @@ except AttributeError: unittest.TestCase.assertEqual = unittest.TestCase.assertEquals -from .support import get_data_files, TestData, convertExpected +import pytest -from html5lib import html5parser, treewalkers, treebuilders, treeadapters, constants -from html5lib.filters.lint import Filter as Lint - - -treeTypes = { - "DOM": {"builder": treebuilders.getTreeBuilder("dom"), - "walker": treewalkers.getTreeWalker("dom")}, -} - -# Try whatever etree implementations are available from a list that are -#"supposed" to work -try: - import xml.etree.ElementTree as ElementTree -except ImportError: - pass -else: - treeTypes['ElementTree'] = \ - {"builder": treebuilders.getTreeBuilder("etree", ElementTree, fullTree=True), - "walker": treewalkers.getTreeWalker("etree", ElementTree)} - -try: - import xml.etree.cElementTree as ElementTree -except ImportError: - pass -else: - treeTypes['cElementTree'] = \ - {"builder": treebuilders.getTreeBuilder("etree", ElementTree, fullTree=True), - "walker": treewalkers.getTreeWalker("etree", ElementTree)} +from .support import get_data_files, TestData, convertExpected, treeTypes - -try: - import lxml.etree as ElementTree # flake8: noqa -except ImportError: - pass -else: - treeTypes['lxml_native'] = \ - {"builder": treebuilders.getTreeBuilder("lxml"), - "walker": treewalkers.getTreeWalker("lxml")} - - -try: - import genshi # flake8: noqa -except ImportError: - pass -else: - treeTypes["genshi"] = \ - {"builder": treebuilders.getTreeBuilder("dom"), - "adapter": lambda tree: treeadapters.genshi.to_genshi(treewalkers.getTreeWalker("dom")(tree)), - "walker": treewalkers.getTreeWalker("genshi")} +from html5lib import html5parser, treewalkers, constants +from html5lib.filters.lint import Filter as Lint import re attrlist = re.compile(r"^(\s+)\w+=.*(\n\1\w+=.*)+", re.M) @@ -89,6 +44,8 @@ def test_all_tokens(self): {'type': 'EndTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'html'} ] for treeName, treeCls in sorted(treeTypes.items()): + if treeCls is None: + continue p = html5parser.HTMLParser(tree=treeCls["builder"]) document = p.parse("a
b
c") document = treeCls.get("adapter", lambda x: x)(document) @@ -98,6 +55,8 @@ def test_all_tokens(self): def runTreewalkerTest(innerHTML, input, expected, errors, treeClass): + if treeClass is None: + pytest.skip("Treebuilder not loaded") warnings.resetwarnings() warnings.simplefilter("error") try: @@ -164,6 +123,8 @@ def set_attribute_on_first_child(docfrag, name, value, treeName): def runTreewalkerEditTest(intext, expected, attrs_to_add, tree): """tests what happens when we add attributes to the intext""" treeName, treeClass = tree + if treeClass is None: + pytest.skip("Treebuilder not loaded") parser = html5parser.HTMLParser(tree=treeClass["builder"]) document = parser.parseFragment(intext) for nom, val in attrs_to_add: diff --git a/html5lib/tests/tree_construction.py b/html5lib/tests/tree_construction.py index c1125387..b46f1fc9 100644 --- a/html5lib/tests/tree_construction.py +++ b/html5lib/tests/tree_construction.py @@ -13,18 +13,23 @@ class TreeConstructionFile(pytest.File): def collect(self): tests = TestData(str(self.fspath), "data") for i, test in enumerate(tests): - for treeName, treeClass in sorted(treeTypes.items()): + for treeName, treeAPIs in sorted(treeTypes.items()): + if treeAPIs is not None and "adapter" in treeAPIs: + continue for namespaceHTMLElements in (True, False): if namespaceHTMLElements: nodeid = "%d::%s::namespaced" % (i, treeName) else: nodeid = "%d::%s::void-namespace" % (i, treeName) - item = ParserTest(nodeid, self, - test, treeClass, namespaceHTMLElements) + item = ParserTest(nodeid, + self, + test, + treeAPIs["builder"] if treeAPIs is not None else None, + namespaceHTMLElements) item.add_marker(getattr(pytest.mark, treeName)) if namespaceHTMLElements: item.add_marker(pytest.mark.namespaced) - if treeClass is None: + if treeAPIs is None: item.add_marker(pytest.mark.skipif(True, reason="Treebuilder not loaded")) yield item From 0cb9e89af8a22a83f2f6c1933a9f4be3ef113067 Mon Sep 17 00:00:00 2001 From: Geoffrey Sneddon Date: Tue, 3 May 2016 16:42:10 +0200 Subject: [PATCH 2/7] Split out each tree construction test into its own collector --- html5lib/tests/tree_construction.py | 51 ++++++++++++++++++----------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/html5lib/tests/tree_construction.py b/html5lib/tests/tree_construction.py index b46f1fc9..9d6ef74b 100644 --- a/html5lib/tests/tree_construction.py +++ b/html5lib/tests/tree_construction.py @@ -13,25 +13,38 @@ class TreeConstructionFile(pytest.File): def collect(self): tests = TestData(str(self.fspath), "data") for i, test in enumerate(tests): - for treeName, treeAPIs in sorted(treeTypes.items()): - if treeAPIs is not None and "adapter" in treeAPIs: - continue - for namespaceHTMLElements in (True, False): - if namespaceHTMLElements: - nodeid = "%d::%s::namespaced" % (i, treeName) - else: - nodeid = "%d::%s::void-namespace" % (i, treeName) - item = ParserTest(nodeid, - self, - test, - treeAPIs["builder"] if treeAPIs is not None else None, - namespaceHTMLElements) - item.add_marker(getattr(pytest.mark, treeName)) - if namespaceHTMLElements: - item.add_marker(pytest.mark.namespaced) - if treeAPIs is None: - item.add_marker(pytest.mark.skipif(True, reason="Treebuilder not loaded")) - yield item + yield TreeConstructionTest(str(i), self, testdata=test) + + +class TreeConstructionTest(pytest.Collector): + def __init__(self, name, parent=None, config=None, session=None, testdata=None): + super(TreeConstructionTest, self).__init__(name, parent, config, session) + self.testdata = testdata + + def collect(self): + for treeName, treeAPIs in sorted(treeTypes.items()): + for x in self._getParserTests(treeName, treeAPIs): + yield x + + def _getParserTests(self, treeName, treeAPIs): + if treeAPIs is not None and "adapter" in treeAPIs: + return + for namespaceHTMLElements in (True, False): + if namespaceHTMLElements: + nodeid = "%s::namespaced" % treeName + else: + nodeid = "%s::void-namespace" % treeName + item = ParserTest(nodeid, + self, + self.testdata, + treeAPIs["builder"] if treeAPIs is not None else None, + namespaceHTMLElements) + item.add_marker(getattr(pytest.mark, treeName)) + if namespaceHTMLElements: + item.add_marker(pytest.mark.namespaced) + if treeAPIs is None: + item.add_marker(pytest.mark.skipif(True, reason="Treebuilder not loaded")) + yield item def convertTreeDump(data): From bd2f09ce9ae9a94d102432c4b9b21dbdde584a1e Mon Sep 17 00:00:00 2001 From: Geoffrey Sneddon Date: Tue, 3 May 2016 16:53:16 +0200 Subject: [PATCH 3/7] Prepare tree construction tests for moving treewalker tests over --- .pytest.expect | 880 ++++++++++++++-------------- html5lib/tests/tree_construction.py | 13 +- 2 files changed, 450 insertions(+), 443 deletions(-) diff --git a/.pytest.expect b/.pytest.expect index c9133f40..dec81a4a 100644 --- a/.pytest.expect +++ b/.pytest.expect @@ -291,443 +291,443 @@ b'html5lib/tests/test_treewalkers.py::test_treewalker::[868]': FAIL b'html5lib/tests/test_treewalkers.py::test_treewalker::[871]': FAIL b'html5lib/tests/test_treewalkers.py::test_treewalker::[965]': FAIL b'html5lib/tests/test_treewalkers.py::test_treewalker::[966]': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::0::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::0::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::0::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::0::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::0::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::0::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::0::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::0::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::1::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::1::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::1::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::1::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::1::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::1::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::1::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::1::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::2::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::2::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::2::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::2::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::2::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::2::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::2::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::2::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::3::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::3::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::3::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::3::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::3::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::3::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::3::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::3::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::4::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::4::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::4::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::4::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::4::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::4::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::4::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/math.dat::4::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::0::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::10::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::12::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::15::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::17::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::1::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::20::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::2::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::3::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::5::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/ruby.dat::7::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests11.dat::2::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::181::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::181::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::181::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::181::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::181::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::181::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::181::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::181::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::183::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::183::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::183::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::183::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::183::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::183::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::183::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::183::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::185::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::185::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::185::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::185::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::185::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::185::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::185::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::185::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::84::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::84::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::84::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::84::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::84::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::84::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::84::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::84::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::86::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::86::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::86::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::86::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::86::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::86::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::86::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::86::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::88::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::88::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::88::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::88::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::88::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::88::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::88::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests16.dat::88::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::18::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::18::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::18::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::18::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::18::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::18::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::18::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::18::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::21::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::21::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::21::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::21::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::21::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::21::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::21::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests19.dat::21::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::6::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests2.dat::7::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::7::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::8::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::8::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::8::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::8::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::8::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::8::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::8::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests25.dat::8::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests5.dat::16::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests5.dat::16::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests5.dat::16::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests5.dat::16::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests5.dat::16::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests5.dat::16::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/tests5.dat::16::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/tests5.dat::16::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::lxml::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::DOM::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::DOM::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::ElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::ElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::cElementTree::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::cElementTree::void-namespace': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::lxml::namespaced': FAIL -u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::lxml::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::18::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::19::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::1::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::22::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::23::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::26::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::27::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::2::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::30::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::31::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::34::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::35::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::38::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::39::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::3::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::40::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::41::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::47::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::1::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::1::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::1::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::1::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::1::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::1::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::1::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::1::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::2::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::2::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::2::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::2::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::2::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::2::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::2::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::2::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::3::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::3::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::3::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::3::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::3::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::3::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::3::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::3::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::4::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::4::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::4::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::4::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::4::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::4::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::4::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::4::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/namespace-sensitivity.dat::0::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::0::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::0::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::0::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::0::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::0::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::0::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::0::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::0::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::10::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::10::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::10::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::10::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::10::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::10::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::10::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::10::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::12::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::12::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::12::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::12::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::12::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::12::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::12::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::12::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::15::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::15::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::15::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::15::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::15::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::15::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::15::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::15::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::17::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::17::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::17::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::17::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::17::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::17::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::17::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::17::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::1::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::1::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::1::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::1::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::1::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::1::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::1::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::1::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::20::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::20::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::20::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::20::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::20::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::20::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::20::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::20::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::2::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::2::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::2::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::2::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::2::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::2::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::2::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::2::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::3::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::3::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::3::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::3::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::3::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::3::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::3::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::3::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::5::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::5::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::5::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::5::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::5::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::5::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::5::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::5::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::7::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::7::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::7::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::7::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::7::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::7::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::7::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/ruby.dat::7::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests11.dat::2::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests11.dat::2::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests11.dat::2::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests11.dat::2::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests11.dat::2::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests11.dat::2::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests11.dat::2::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests11.dat::2::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::181::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::181::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::181::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::181::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::181::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::181::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::181::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::181::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::183::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::183::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::183::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::183::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::183::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::183::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::183::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::183::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::185::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::185::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::185::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::185::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::185::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::185::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::185::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::185::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::84::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::84::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::84::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::84::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::84::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::84::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::84::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::84::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::86::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::86::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::86::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::86::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::86::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::86::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::86::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::86::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::88::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::88::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::88::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::88::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::88::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::88::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::88::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests16.dat::88::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::18::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::18::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::18::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::18::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::18::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::18::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::18::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::18::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::21::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::21::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::21::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::21::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::21::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::21::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::21::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests19.dat::21::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::6::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::6::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::6::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::6::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::6::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::6::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::6::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::6::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::7::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::7::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::7::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::7::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::7::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::7::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::7::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests2.dat::7::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::7::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::7::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::7::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::7::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::7::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::7::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::7::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::7::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::8::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::8::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::8::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::8::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::8::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::8::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::8::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests25.dat::8::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests5.dat::16::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests5.dat::16::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests5.dat::16::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests5.dat::16::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests5.dat::16::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests5.dat::16::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/tests5.dat::16::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/tests5.dat::16::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::14::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::15::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::16::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::DOM::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::ElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::cElementTree::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::lxml::parser::namespaced': FAIL +u'html5lib/tests/testdata/tree-construction/webkit02.dat::2::lxml::parser::void-namespace': FAIL diff --git a/html5lib/tests/tree_construction.py b/html5lib/tests/tree_construction.py index 9d6ef74b..85188fe1 100644 --- a/html5lib/tests/tree_construction.py +++ b/html5lib/tests/tree_construction.py @@ -1,5 +1,6 @@ from __future__ import absolute_import, division, unicode_literals +import itertools import warnings import re @@ -23,7 +24,8 @@ def __init__(self, name, parent=None, config=None, session=None, testdata=None): def collect(self): for treeName, treeAPIs in sorted(treeTypes.items()): - for x in self._getParserTests(treeName, treeAPIs): + for x in itertools.chain(self._getParserTests(treeName, treeAPIs), + self._getTreeWalkerTests(treeName, treeAPIs)): yield x def _getParserTests(self, treeName, treeAPIs): @@ -31,21 +33,26 @@ def _getParserTests(self, treeName, treeAPIs): return for namespaceHTMLElements in (True, False): if namespaceHTMLElements: - nodeid = "%s::namespaced" % treeName + nodeid = "%s::parser::namespaced" % treeName else: - nodeid = "%s::void-namespace" % treeName + nodeid = "%s::parser::void-namespace" % treeName item = ParserTest(nodeid, self, self.testdata, treeAPIs["builder"] if treeAPIs is not None else None, namespaceHTMLElements) item.add_marker(getattr(pytest.mark, treeName)) + item.add_marker(pytest.mark.parser) if namespaceHTMLElements: item.add_marker(pytest.mark.namespaced) if treeAPIs is None: item.add_marker(pytest.mark.skipif(True, reason="Treebuilder not loaded")) yield item + def _getTreeWalkerTests(self, treeName, treeAPIs): + if False: + yield + def convertTreeDump(data): return "\n".join(convert(3)(data).split("\n")[1:]) From 7556f22800c5ee2df3261a6b950d1f1b221d592c Mon Sep 17 00:00:00 2001 From: Geoffrey Sneddon Date: Tue, 3 May 2016 18:58:04 +0100 Subject: [PATCH 4/7] Move tree construction treewalker tests to tree_construction.py --- .pytest.expect | 280 +--------------------------- html5lib/tests/test_treewalkers.py | 62 +----- html5lib/tests/tree_construction.py | 89 ++++++++- 3 files changed, 90 insertions(+), 341 deletions(-) diff --git a/.pytest.expect b/.pytest.expect index dec81a4a..0cab7521 100644 --- a/.pytest.expect +++ b/.pytest.expect @@ -16,281 +16,6 @@ b'html5lib/tests/test_tokenizer.py::testTokenizer::[5006]': FAIL b'html5lib/tests/test_tokenizer.py::testTokenizer::[5008]': FAIL b'html5lib/tests/test_tokenizer.py::testTokenizer::[5020]': FAIL b'html5lib/tests/test_tokenizer.py::testTokenizer::[5418]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1111]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1112]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1188]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1453]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1465]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1466]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1467]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1691]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1692]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1693]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1694]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1709]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1710]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1713]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1714]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1717]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1718]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1721]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1722]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1725]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1726]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1729]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1730]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1731]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1732]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1738]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1739]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1783]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1784]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1785]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1786]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1787]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1791]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1829]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1830]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1831]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1832]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1834]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1836]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1839]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1841]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1844]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1846]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[1849]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2064]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2178]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2180]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2182]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[218]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[219]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[220]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[221]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2275]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2277]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2279]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2341]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2344]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[236]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[237]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[240]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[241]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2438]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2439]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[244]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[245]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[248]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[249]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[252]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[253]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[256]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[257]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2584]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2585]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[258]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[259]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[265]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2661]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[266]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2926]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2938]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2939]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[2940]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[310]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[311]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[312]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[313]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[314]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3164]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3165]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3166]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3167]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3182]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3183]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3186]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3187]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[318]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3190]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3191]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3194]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3195]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3198]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3199]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3202]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3203]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3204]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3205]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3211]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3212]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3256]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3257]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3258]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3259]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3260]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3264]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3302]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3303]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3304]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3305]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3307]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3309]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3312]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3314]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3317]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3319]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3322]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3537]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[356]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[357]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[358]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[359]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[361]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[363]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3651]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3653]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3655]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[366]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[368]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[371]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[373]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3748]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3750]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3752]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[376]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3814]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3817]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3911]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[3912]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4057]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4058]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4134]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4399]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4411]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4412]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4413]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4637]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4638]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4639]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4640]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4655]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4656]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4659]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4660]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4663]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4664]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4667]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4668]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4671]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4672]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4675]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4676]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4677]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4678]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4684]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4685]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4729]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4730]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4731]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4732]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4733]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4737]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4775]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4776]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4777]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4778]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4780]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4782]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4785]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4787]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4790]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4792]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[4795]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5010]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5124]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5126]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5128]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5221]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5223]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5225]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5287]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5290]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5384]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5385]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5530]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5531]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5607]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5872]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5884]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5885]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[5886]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[591]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6110]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6111]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6112]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6113]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6128]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6129]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6132]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6133]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6136]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6137]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6140]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6141]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6144]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6145]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6148]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6149]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6150]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6151]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6157]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6158]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6202]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6203]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6204]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6205]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6206]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6210]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6248]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6249]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6250]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6251]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6253]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6255]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6258]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6260]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6263]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6265]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6268]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6483]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6597]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6599]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6601]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6694]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6696]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6698]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6760]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6763]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6857]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[6858]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[7003]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[7004]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[705]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[707]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[7080]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[709]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[7345]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[7357]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[7358]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[7359]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[802]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[804]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[806]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[868]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[871]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[965]': FAIL -b'html5lib/tests/test_treewalkers.py::test_treewalker::[966]': FAIL u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::namespaced': FAIL u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::void-namespace': FAIL u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::parser::namespaced': FAIL @@ -453,12 +178,17 @@ u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::pars u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::48::lxml::parser::void-namespace': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::0::DOM::parser::namespaced': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::0::DOM::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::DOM::treewalker': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::0::ElementTree::parser::namespaced': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::0::ElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::ElementTree::treewalker': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::0::cElementTree::parser::namespaced': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::0::cElementTree::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::cElementTree::treewalker': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::genshi::treewalker': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::0::lxml::parser::namespaced': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::0::lxml::parser::void-namespace': FAIL +u'html5lib/tests/testdata/tree-construction/math.dat::0::lxml::treewalker': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::1::DOM::parser::namespaced': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::1::DOM::parser::void-namespace': FAIL u'html5lib/tests/testdata/tree-construction/math.dat::1::ElementTree::parser::namespaced': FAIL diff --git a/html5lib/tests/test_treewalkers.py b/html5lib/tests/test_treewalkers.py index 1d96ff88..73af7e49 100644 --- a/html5lib/tests/test_treewalkers.py +++ b/html5lib/tests/test_treewalkers.py @@ -1,10 +1,6 @@ from __future__ import absolute_import, division, unicode_literals -import os -import sys import unittest -import warnings -from difflib import unified_diff try: unittest.TestCase.assertEqual @@ -13,9 +9,9 @@ import pytest -from .support import get_data_files, TestData, convertExpected, treeTypes +from .support import treeTypes -from html5lib import html5parser, treewalkers, constants +from html5lib import html5parser, treewalkers from html5lib.filters.lint import Filter as Lint import re @@ -54,60 +50,6 @@ def test_all_tokens(self): self.assertEqual(expectedToken, outputToken) -def runTreewalkerTest(innerHTML, input, expected, errors, treeClass): - if treeClass is None: - pytest.skip("Treebuilder not loaded") - warnings.resetwarnings() - warnings.simplefilter("error") - try: - p = html5parser.HTMLParser(tree=treeClass["builder"]) - if innerHTML: - document = p.parseFragment(input, innerHTML) - else: - document = p.parse(input) - except constants.DataLossWarning: - # Ignore testcases we know we don't pass - return - - document = treeClass.get("adapter", lambda x: x)(document) - try: - output = treewalkers.pprint(Lint(treeClass["walker"](document))) - output = attrlist.sub(sortattrs, output) - expected = attrlist.sub(sortattrs, convertExpected(expected)) - diff = "".join(unified_diff([line + "\n" for line in expected.splitlines()], - [line + "\n" for line in output.splitlines()], - "Expected", "Received")) - assert expected == output, "\n".join([ - "", "Input:", input, - "", "Expected:", expected, - "", "Received:", output, - "", "Diff:", diff, - ]) - except NotImplementedError: - pass # Amnesty for those that confess... - - -def test_treewalker(): - sys.stdout.write('Testing tree walkers ' + " ".join(list(treeTypes.keys())) + "\n") - - for treeName, treeCls in sorted(treeTypes.items()): - files = get_data_files('tree-construction') - for filename in files: - testName = os.path.basename(filename).replace(".dat", "") - if testName in ("template",): - continue - - tests = TestData(filename, "data") - - for index, test in enumerate(tests): - (input, errors, - innerHTML, expected) = [test[key] for key in ("data", "errors", - "document-fragment", - "document")] - errors = errors.split("\n") - yield runTreewalkerTest, innerHTML, input, expected, errors, treeCls - - def set_attribute_on_first_child(docfrag, name, value, treeName): """naively sets an attribute on the first child of the document fragment passed in""" diff --git a/html5lib/tests/tree_construction.py b/html5lib/tests/tree_construction.py index 85188fe1..fda850ed 100644 --- a/html5lib/tests/tree_construction.py +++ b/html5lib/tests/tree_construction.py @@ -1,13 +1,25 @@ from __future__ import absolute_import, division, unicode_literals import itertools -import warnings import re +import warnings +from difflib import unified_diff import pytest from .support import TestData, convert, convertExpected, treeTypes -from html5lib import html5parser, constants +from html5lib import html5parser, constants, treewalkers +from html5lib.filters.lint import Filter as Lint + +_attrlist_re = re.compile(r"^(\s+)\w+=.*(\n\1\w+=.*)+", re.M) + + +def sortattrs(s): + def replace(m): + lines = m.group(0).split("\n") + lines.sort() + return "\n".join(lines) + return _attrlist_re.sub(replace, s) class TreeConstructionFile(pytest.File): @@ -50,8 +62,16 @@ def _getParserTests(self, treeName, treeAPIs): yield item def _getTreeWalkerTests(self, treeName, treeAPIs): - if False: - yield + nodeid = "%s::treewalker" % treeName + item = TreeWalkerTest(nodeid, + self, + self.testdata, + treeAPIs) + item.add_marker(getattr(pytest.mark, treeName)) + item.add_marker(pytest.mark.treewalker) + if treeAPIs is None: + item.add_marker(pytest.mark.skipif(True, reason="Treebuilder not loaded")) + yield item def convertTreeDump(data): @@ -74,7 +94,7 @@ def runtest(self): input = self.test['data'] fragmentContainer = self.test['document-fragment'] - expected = self.test['document'] + expected = convertExpected(self.test['document']) expectedErrors = self.test['errors'].split("\n") if self.test['errors'] else [] with warnings.catch_warnings(): @@ -89,7 +109,7 @@ def runtest(self): output = convertTreeDump(p.tree.testSerializer(document)) - expected = convertExpected(expected) + expected = expected if self.namespaceHTMLElements: expected = namespaceExpected(r"\1", expected) @@ -117,3 +137,60 @@ def repr_failure(self, excinfo): return excinfo.getrepr(funcargs=True, showlocals=False, style="short", tbfilter=False) + + +class TreeWalkerTest(pytest.Item): + def __init__(self, name, parent, test, treeAPIs): + super(TreeWalkerTest, self).__init__(name, parent) + self.obj = lambda: 1 # this is to hack around skipif needing a function! + self.test = test + self.treeAPIs = treeAPIs + + def runtest(self): + p = html5parser.HTMLParser(tree=self.treeAPIs["builder"]) + + input = self.test['data'] + fragmentContainer = self.test['document-fragment'] + expected = convertExpected(self.test['document']) + + with warnings.catch_warnings(): + warnings.simplefilter("error") + try: + if fragmentContainer: + document = p.parseFragment(input, fragmentContainer) + else: + document = p.parse(input) + except constants.DataLossWarning: + pytest.skip("data loss warning") + + poutput = convertTreeDump(p.tree.testSerializer(document)) + namespace_expected = namespaceExpected(r"\1", expected) + if poutput != namespace_expected: + pytest.skip("parser output incorrect") + + document = self.treeAPIs.get("adapter", lambda x: x)(document) + + try: + output = treewalkers.pprint(Lint(self.treeAPIs["walker"](document))) + output = sortattrs(output) + expected = sortattrs(expected) + diff = "".join(unified_diff([line + "\n" for line in expected.splitlines()], + [line + "\n" for line in output.splitlines()], + "Expected", "Received")) + assert expected == output, "\n".join([ + "", "Input:", input, + "", "Expected:", expected, + "", "Received:", output, + "", "Diff:", diff, + ]) + except NotImplementedError: + pytest.skip("tree walker NotImplementedError") + + def repr_failure(self, excinfo): + traceback = excinfo.traceback + ntraceback = traceback.cut(path=__file__) + excinfo.traceback = ntraceback.filter() + + return excinfo.getrepr(funcargs=True, + showlocals=False, + style="short", tbfilter=False) From 8ddd3b983c270cee4f733f4662065495b5f963dc Mon Sep 17 00:00:00 2001 From: Geoffrey Sneddon Date: Tue, 3 May 2016 19:58:05 +0100 Subject: [PATCH 5/7] Generate tokenizer tests from testdata files --- .pytest.expect | 28 ++--- html5lib/tests/conftest.py | 5 + .../tests/{test_tokenizer.py => tokenizer.py} | 103 +++++++++++------- 3 files changed, 85 insertions(+), 51 deletions(-) rename html5lib/tests/{test_tokenizer.py => tokenizer.py} (69%) diff --git a/.pytest.expect b/.pytest.expect index 0cab7521..3133aebe 100644 --- a/.pytest.expect +++ b/.pytest.expect @@ -2,20 +2,20 @@ pytest-expect file v1 (2, 7, 11, 'final', 0) b'html5lib/tests/test_encoding.py::test_encoding::[110]': FAIL b'html5lib/tests/test_encoding.py::test_encoding::[111]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[4718]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[4990]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[4993]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[4994]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[4996]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[4997]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[4999]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[5002]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[5003]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[5005]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[5006]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[5008]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[5020]': FAIL -b'html5lib/tests/test_tokenizer.py::testTokenizer::[5418]': FAIL +u'html5lib/tests/testdata/tokenizer/test2.test::0::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::228::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::231::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::232::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::234::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::235::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::237::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::240::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::241::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::243::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::244::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::246::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::258::dataState': FAIL +u'html5lib/tests/testdata/tokenizer/test3.test::656::dataState': FAIL u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::namespaced': FAIL u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::DOM::parser::void-namespace': FAIL u'html5lib/tests/testdata/tree-construction/foreign-fragment.dat::0::ElementTree::parser::namespaced': FAIL diff --git a/html5lib/tests/conftest.py b/html5lib/tests/conftest.py index b6f0a1cd..811aebbf 100644 --- a/html5lib/tests/conftest.py +++ b/html5lib/tests/conftest.py @@ -1,10 +1,12 @@ import os.path from .tree_construction import TreeConstructionFile +from .tokenizer import TokenizerFile _dir = os.path.abspath(os.path.dirname(__file__)) _testdata = os.path.join(_dir, "testdata") _tree_construction = os.path.join(_testdata, "tree-construction") +_tokenizer = os.path.join(_testdata, "tokenizer") def pytest_collectstart(): @@ -19,3 +21,6 @@ def pytest_collect_file(path, parent): return if path.ext == ".dat": return TreeConstructionFile(path, parent) + elif dir == _tokenizer: + if path.ext == ".test": + return TokenizerFile(path, parent) diff --git a/html5lib/tests/test_tokenizer.py b/html5lib/tests/tokenizer.py similarity index 69% rename from html5lib/tests/test_tokenizer.py rename to html5lib/tests/tokenizer.py index 87e098f3..c6163a1f 100644 --- a/html5lib/tests/test_tokenizer.py +++ b/html5lib/tests/tokenizer.py @@ -1,13 +1,13 @@ from __future__ import absolute_import, division, unicode_literals +import codecs import json import warnings import re +import pytest from six import unichr -from .support import get_data_files - from html5lib.tokenizer import HTMLTokenizer from html5lib import constants, utils @@ -172,27 +172,6 @@ def repl(m): return test -def runTokenizerTest(test): - warnings.resetwarnings() - warnings.simplefilter("error") - - expected = test['output'] - if 'lastStartTag' not in test: - test['lastStartTag'] = None - parser = TokenizerTestParser(test['initialState'], - test['lastStartTag']) - tokens = parser.parse(test['input']) - received = normalizeTokens(tokens) - errorMsg = "\n".join(["\n\nInitial state:", - test['initialState'], - "\nInput:", test['input'], - "\nExpected:", repr(expected), - "\nreceived:", repr(tokens)]) - errorMsg = errorMsg - ignoreErrorOrder = test.get('ignoreErrorOrder', False) - assert tokensMatch(expected, received, ignoreErrorOrder, True), errorMsg - - def _doCapitalize(match): return match.group(1).upper() @@ -205,18 +184,68 @@ def capitalize(s): return s -def testTokenizer(): - for filename in get_data_files('tokenizer', '*.test'): - with open(filename) as fp: +class TokenizerFile(pytest.File): + def collect(self): + with codecs.open(str(self.fspath), "r", encoding="utf-8") as fp: tests = json.load(fp) - if 'tests' in tests: - for index, test in enumerate(tests['tests']): - if 'initialStates' not in test: - test["initialStates"] = ["Data state"] - if 'doubleEscaped' in test: - test = unescape(test) - if test["input"] is None: - continue # Not valid input for this platform - for initialState in test["initialStates"]: - test["initialState"] = capitalize(initialState) - yield runTokenizerTest, test + if 'tests' in tests: + for i, test in enumerate(tests['tests']): + yield TokenizerTestCollector(str(i), self, testdata=test) + + +class TokenizerTestCollector(pytest.Collector): + def __init__(self, name, parent=None, config=None, session=None, testdata=None): + super(TokenizerTestCollector, self).__init__(name, parent, config, session) + if 'initialStates' not in testdata: + testdata["initialStates"] = ["Data state"] + if 'doubleEscaped' in testdata: + testdata = unescape(testdata) + self.testdata = testdata + + def collect(self): + for initialState in self.testdata["initialStates"]: + initialState = capitalize(initialState) + item = TokenizerTest(initialState, + self, + self.testdata, + initialState) + if self.testdata["input"] is None: + item.add_marker(pytest.mark.skipif(True, reason="Relies on lone surrogates")) + yield item + + +class TokenizerTest(pytest.Item): + def __init__(self, name, parent, test, initialState): + super(TokenizerTest, self).__init__(name, parent) + self.obj = lambda: 1 # this is to hack around skipif needing a function! + self.test = test + self.initialState = initialState + + def runtest(self): + warnings.resetwarnings() + warnings.simplefilter("error") + + expected = self.test['output'] + if 'lastStartTag' not in self.test: + self.test['lastStartTag'] = None + parser = TokenizerTestParser(self.initialState, + self.test['lastStartTag']) + tokens = parser.parse(self.test['input']) + received = normalizeTokens(tokens) + errorMsg = "\n".join(["\n\nInitial state:", + self.initialState, + "\nInput:", self.test['input'], + "\nExpected:", repr(expected), + "\nreceived:", repr(tokens)]) + errorMsg = errorMsg + ignoreErrorOrder = self.test.get('ignoreErrorOrder', False) + assert tokensMatch(expected, received, ignoreErrorOrder, True), errorMsg + + def repr_failure(self, excinfo): + traceback = excinfo.traceback + ntraceback = traceback.cut(path=__file__) + excinfo.traceback = ntraceback.filter() + + return excinfo.getrepr(funcargs=True, + showlocals=False, + style="short", tbfilter=False) From a75b120409f1440b3603c3ed8643d1bdc1f9ed3c Mon Sep 17 00:00:00 2001 From: Geoffrey Sneddon Date: Tue, 3 May 2016 20:08:37 +0100 Subject: [PATCH 6/7] Fix new flake8 warning ("not x in" v. "x not in") --- html5lib/tests/test_treewalkers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html5lib/tests/test_treewalkers.py b/html5lib/tests/test_treewalkers.py index 73af7e49..4d216117 100644 --- a/html5lib/tests/test_treewalkers.py +++ b/html5lib/tests/test_treewalkers.py @@ -75,7 +75,7 @@ def runTreewalkerEditTest(intext, expected, attrs_to_add, tree): document = treeClass.get("adapter", lambda x: x)(document) output = treewalkers.pprint(treeClass["walker"](document)) output = attrlist.sub(sortattrs, output) - if not output in expected: + if output not in expected: raise AssertionError("TreewalkerEditTest: %s\nExpected:\n%s\nReceived:\n%s" % (treeName, expected, output)) From 68d6f3466092c608091c03b5cba7e8f7afd7c245 Mon Sep 17 00:00:00 2001 From: Geoffrey Sneddon Date: Tue, 3 May 2016 20:19:12 +0100 Subject: [PATCH 7/7] Remove last remanent of unittest from test_treewalkers.py --- html5lib/tests/test_treewalkers.py | 54 +++++++++++++----------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/html5lib/tests/test_treewalkers.py b/html5lib/tests/test_treewalkers.py index 4d216117..045d9d7b 100644 --- a/html5lib/tests/test_treewalkers.py +++ b/html5lib/tests/test_treewalkers.py @@ -1,12 +1,5 @@ from __future__ import absolute_import, division, unicode_literals -import unittest - -try: - unittest.TestCase.assertEqual -except AttributeError: - unittest.TestCase.assertEqual = unittest.TestCase.assertEquals - import pytest from .support import treeTypes @@ -24,30 +17,29 @@ def sortattrs(x): return "\n".join(lines) -class TokenTestCase(unittest.TestCase): - def test_all_tokens(self): - expected = [ - {'data': {}, 'type': 'StartTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'html'}, - {'data': {}, 'type': 'StartTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'head'}, - {'type': 'EndTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'head'}, - {'data': {}, 'type': 'StartTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'body'}, - {'data': 'a', 'type': 'Characters'}, - {'data': {}, 'type': 'StartTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'div'}, - {'data': 'b', 'type': 'Characters'}, - {'type': 'EndTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'div'}, - {'data': 'c', 'type': 'Characters'}, - {'type': 'EndTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'body'}, - {'type': 'EndTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'html'} - ] - for treeName, treeCls in sorted(treeTypes.items()): - if treeCls is None: - continue - p = html5parser.HTMLParser(tree=treeCls["builder"]) - document = p.parse("a
b
c") - document = treeCls.get("adapter", lambda x: x)(document) - output = Lint(treeCls["walker"](document)) - for expectedToken, outputToken in zip(expected, output): - self.assertEqual(expectedToken, outputToken) +def test_all_tokens(): + expected = [ + {'data': {}, 'type': 'StartTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'html'}, + {'data': {}, 'type': 'StartTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'head'}, + {'type': 'EndTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'head'}, + {'data': {}, 'type': 'StartTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'body'}, + {'data': 'a', 'type': 'Characters'}, + {'data': {}, 'type': 'StartTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'div'}, + {'data': 'b', 'type': 'Characters'}, + {'type': 'EndTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'div'}, + {'data': 'c', 'type': 'Characters'}, + {'type': 'EndTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'body'}, + {'type': 'EndTag', 'namespace': 'http://www.w3.org/1999/xhtml', 'name': 'html'} + ] + for treeName, treeCls in sorted(treeTypes.items()): + if treeCls is None: + continue + p = html5parser.HTMLParser(tree=treeCls["builder"]) + document = p.parse("a
b
c") + document = treeCls.get("adapter", lambda x: x)(document) + output = Lint(treeCls["walker"](document)) + for expectedToken, outputToken in zip(expected, output): + assert expectedToken == outputToken def set_attribute_on_first_child(docfrag, name, value, treeName):