| from __future__ import absolute_import, division, unicode_literals |
| |
| import codecs |
| import json |
| |
| import pytest |
| |
| from html5lib import parseFragment, serialize |
| |
| |
| class SanitizerFile(pytest.File): |
| def collect(self): |
| with codecs.open(str(self.fspath), "r", encoding="utf-8") as fp: |
| tests = json.load(fp) |
| for i, test in enumerate(tests): |
| yield SanitizerTest(str(i), self, test=test) |
| |
| |
| class SanitizerTest(pytest.Item): |
| def __init__(self, name, parent, test): |
| super(SanitizerTest, self).__init__(name, parent) |
| self.obj = lambda: 1 # this is to hack around skipif needing a function! |
| self.test = test |
| |
| def runtest(self): |
| input = self.test["input"] |
| expected = self.test["output"] |
| |
| parsed = parseFragment(input) |
| serialized = serialize(parsed, |
| sanitize=True, |
| omit_optional_tags=False, |
| use_trailing_solidus=True, |
| space_before_trailing_solidus=False, |
| quote_attr_values="always", |
| quote_char="'", |
| alphabetical_attributes=True) |
| errorMsg = "\n".join(["\n\nInput:", input, |
| "\nExpected:", expected, |
| "\nReceived:", serialized]) |
| assert expected == serialized, 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) |