diff --git a/tests/test_html2docx.py b/tests/test_html2docx.py new file mode 100644 index 0000000..dee721c --- /dev/null +++ b/tests/test_html2docx.py @@ -0,0 +1,46 @@ +import json +import pathlib + +import docx +import pytest + +from html2docx import html2docx + + +def generate_testdata(): + datadir = pathlib.Path(__file__).parent.joinpath("data") + for html_path in datadir.glob("*.html"): + spec_path = datadir.joinpath(f"{html_path.stem}.json") + yield html_path, spec_path + + +@pytest.mark.parametrize("html_path,spec_path", generate_testdata()) +def test_html2docx(html_path, spec_path): + title = html_path.name + with html_path.open() as fp: + html = fp.read() + with spec_path.open() as fp: + spec = json.load(fp) + + buf = html2docx(html, title=title) + doc = docx.Document(buf) + + assert doc.core_properties.title == title + assert len(doc.paragraphs) == len(spec) + for p, p_spec in zip(doc.paragraphs, spec): + assert p.text == p_spec["text"] + assert p.style.name == p_spec.get("style", "Normal") + + runs_spec = p_spec["runs"] + assert len(p.runs) == len(runs_spec) + for run, run_spec in zip(p.runs, runs_spec): + assert run.text == run_spec["text"] + assert run.bold is run_spec.get( + "bold", False + ), f"Wrong bold for text '{run.text}'." + assert run.italic is run_spec.get( + "italic", False + ), f"Wrong italic for text '{run.text}'." + assert run.underline is run_spec.get( + "underline", False + ), f"Wrong underline for text '{run.text}'." diff --git a/tests/tests.py b/tests/tests.py deleted file mode 100644 index 69474eb..0000000 --- a/tests/tests.py +++ /dev/null @@ -1,48 +0,0 @@ -import json -import pathlib -from unittest import TestCase - -import docx - -from html2docx import html2docx - - -class Html2DocxTest(TestCase): - def test_html2docx(self): - datadir = pathlib.Path(__file__).parent.joinpath("html2docx") - for path in datadir.glob("*.html"): - with self.subTest(path.name): - with datadir.joinpath(f"{path.stem}.json").open() as fp: - spec = json.load(fp) - - with path.open() as fp: - html = fp.read() - - buf = html2docx(html, title=path.name) - doc = docx.Document(buf) - - self.assertEqual(doc.core_properties.title, path.name) - self.assertEqual(len(doc.paragraphs), len(spec)) - for p, p_spec in zip(doc.paragraphs, spec): - self.assertEqual(p.text, p_spec["text"]) - self.assertEqual(p.style.name, p_spec.get("style", "Normal")) - - runs_spec = p_spec["runs"] - self.assertEqual(len(p.runs), len(runs_spec)) - for run, run_spec in zip(p.runs, runs_spec): - self.assertEqual(run.text, run_spec["text"]) - self.assertEqual( - run.bold, - run_spec.get("bold", False), - f"Wrong bold for text '{run.text}'.", - ) - self.assertEqual( - run.italic, - run_spec.get("italic", False), - f"Wrong italic for text '{run.text}'.", - ) - self.assertEqual( - run.underline, - run_spec.get("underline", False), - f"Wrong underline for text '{run.text}'.", - ) diff --git a/tox.ini b/tox.ini index c02012a..ab7026f 100644 --- a/tox.ini +++ b/tox.ini @@ -7,7 +7,8 @@ envlist = minversion = 1.9 [testenv] -commands = python -m unittest +commands = pytest {posargs} +deps = pytest [testenv:black] commands = black --target-version=py36 --check --diff .