summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthäus G. Chajdas <dev@anteru.net>2022-12-07 21:56:46 +0100
committerMatthäus G. Chajdas <dev@anteru.net>2022-12-07 21:57:31 +0100
commit21d4997827496c3066bde6d98a88343680e6ffc2 (patch)
tree62821c3baee87294be84bd8a4b7d5c47ef148635
parent0db531852f848913853929a7af1b0bab44d59f1a (diff)
downloadpygments-git-21d4997827496c3066bde6d98a88343680e6ffc2.tar.gz
Remove the lxml dependency.
Replace lxml with html.parser for the structural-diff.
-rw-r--r--requirements.txt1
-rw-r--r--tests/support/structural_diff.py42
-rw-r--r--tox.ini1
3 files changed, 31 insertions, 13 deletions
diff --git a/requirements.txt b/requirements.txt
index be5330a8..05a0b12b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,4 +5,3 @@ pyflakes
pylint
tox
wcag-contrast-ratio
-lxml
diff --git a/tests/support/structural_diff.py b/tests/support/structural_diff.py
index d2e4d7f2..cea27d10 100644
--- a/tests/support/structural_diff.py
+++ b/tests/support/structural_diff.py
@@ -1,17 +1,37 @@
-import lxml.html
-import lxml.etree
-import pytest
+import html.parser
+
+
+class Parser(html.parser.HTMLParser):
+ def __init__(self):
+ super().__init__()
+ self._stream = []
+
+ def handle_starttag(self, tag, attrs):
+ attrs = sorted(attrs, key=lambda x: x[0])
+ attrs = '|'.join([k[0] + ':' + k[1] for k in attrs])
+ self._stream.append(('<', tag, attrs))
+
+ def handle_endtag(self, tag):
+ self._stream.append(('>', tag, ''))
+
+ def handle_data(self, data):
+ self._stream.append(('_', data, ''))
+
+ @property
+ def stream(self):
+ return self._stream
+
def _serialize(t):
- for a, e in lxml.etree.iterwalk(t, events=("start", "end"),):
- text = e.text.strip() if e.text else ""
- yield (a, e.tag, repr(text), ', '.join([k[0]+':'+k[1] for k in sorted(e.attrib.items(), key = lambda x: x[0])]))
+ parser = Parser()
+ parser.feed(t)
+ return parser.stream
+
def structural_diff(a, b):
"""Check if there is a structural difference between two HTML files."""
- a_s = _serialize(lxml.html.fromstring(a))
- b_s = _serialize(lxml.html.fromstring(b))
-
+ a_s = _serialize(a)
+ b_s = _serialize(b)
+
for e, f in zip(a_s, b_s):
- print(e, f)
- assert e == f \ No newline at end of file
+ assert e == f, f'Expected: {e}, found: {f}'
diff --git a/tox.ini b/tox.ini
index 3d6dac4c..dc0a5be5 100644
--- a/tox.ini
+++ b/tox.ini
@@ -6,7 +6,6 @@ deps =
pytest
pytest-cov
wcag-contrast-ratio
- lxml
commands = pytest {posargs}