mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-05-11 07:51:49 +02:00
Fixup: use numpy to do the comparison
This commit is contained in:
parent
bbebbeb054
commit
3e5fcc2e4a
1 changed files with 39 additions and 5 deletions
|
@ -5,13 +5,16 @@ import copy
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
import shutil
|
import shutil
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional, Sequence
|
from typing import Optional, Sequence
|
||||||
|
|
||||||
import fitz
|
import fitz
|
||||||
|
import numpy as np
|
||||||
import pytest
|
import pytest
|
||||||
from click.testing import CliRunner, Result
|
from click.testing import CliRunner, Result
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
|
@ -204,13 +207,44 @@ class TestCliConversion(TestCliBasic):
|
||||||
|
|
||||||
converted = fitz.open(destination)
|
converted = fitz.open(destination)
|
||||||
ref = fitz.open(reference)
|
ref = fitz.open(reference)
|
||||||
assert len(converted) == len(ref), "different number of pages"
|
errors = []
|
||||||
|
if len(converted) != len(ref):
|
||||||
|
errors.append("different number of pages")
|
||||||
|
|
||||||
|
diffs = doc.parent / "diffs"
|
||||||
|
diffs.mkdir(parents=True, exist_ok=True)
|
||||||
for page, ref_page in zip(converted, ref):
|
for page, ref_page in zip(converted, ref):
|
||||||
page.get_pixmap(dpi=150)
|
curr_pixmap = page.get_pixmap(dpi=150)
|
||||||
ref_page.get_pixmap(dpi=150)
|
ref_pixmap = ref_page.get_pixmap(dpi=150)
|
||||||
assert page.get_pixmap().tobytes() == ref_page.get_pixmap().tobytes(), (
|
if curr_pixmap.tobytes() != ref_pixmap.tobytes():
|
||||||
f"different page content for page {page.number}"
|
errors.append(f"page {page.number} differs")
|
||||||
|
|
||||||
|
t0 = time.perf_counter()
|
||||||
|
|
||||||
|
arr_ref = np.frombuffer(ref_pixmap.samples, dtype=np.uint8).reshape(
|
||||||
|
ref_pixmap.height, ref_pixmap.width, ref_pixmap.n
|
||||||
|
)
|
||||||
|
arr_curr = np.frombuffer(curr_pixmap.samples, dtype=np.uint8).reshape(
|
||||||
|
curr_pixmap.height, curr_pixmap.width, curr_pixmap.n
|
||||||
|
)
|
||||||
|
|
||||||
|
# Find differences (any channel differs)
|
||||||
|
diff = (arr_ref != arr_curr).any(axis=2)
|
||||||
|
|
||||||
|
# Get coordinates of differences
|
||||||
|
diff_coords = np.where(diff)
|
||||||
|
# Mark differences in red
|
||||||
|
for y, x in zip(diff_coords[0], diff_coords[1]):
|
||||||
|
# Note: PyMuPDF's set_pixel takes (x, y) not (y, x)
|
||||||
|
ref_pixmap.set_pixel(int(x), int(y), (255, 0, 0)) # Red
|
||||||
|
|
||||||
|
t1 = time.perf_counter()
|
||||||
|
print(f"diff took {t1 - t0} seconds")
|
||||||
|
ref_pixmap.save(diffs / f"{destination.stem}_{page.number}.jpeg")
|
||||||
|
|
||||||
|
if len(errors) > 0:
|
||||||
|
raise AssertionError(
|
||||||
|
f"The resulting document differs from the reference. See {str(diffs)} for a visual diff."
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_output_filename(self, sample_pdf: str) -> None:
|
def test_output_filename(self, sample_pdf: str) -> None:
|
||||||
|
|
Loading…
Reference in a new issue