Skip to content

Commit

Permalink
Modify tests to deal with variety of Ghostscript versions
Browse files Browse the repository at this point in the history
  • Loading branch information
jbarlow83 committed Jan 9, 2025
1 parent 6edc749 commit 65df44f
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions tests/test_ghostscript.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@

import pikepdf
import pytest
from packaging.version import Version
from PIL import Image, UnidentifiedImageError

from ocrmypdf._exec import ghostscript
from ocrmypdf._exec.ghostscript import DuplicateFilter, rasterize_pdf
from ocrmypdf.exceptions import ColorConversionNeededError, ExitCode, InputFileError
from ocrmypdf.helpers import Resolution
Expand Down Expand Up @@ -210,7 +212,8 @@ def test_filter_alt_messages(self, duplicate_filter_logger, caplog):
assert caplog.records[3].msg == "yet another error message"


def test_recoverable_image_error_path(outdir, caplog):
@pytest.fixture
def pdf_with_invalid_image(outdir):
# issue 1451
Name = pikepdf.Name
pdf = pikepdf.new()
Expand All @@ -235,18 +238,27 @@ def test_recoverable_image_error_path(outdir, caplog):
)
pdf.save(outdir / 'invalid_image.pdf')
pdf.save('invalid_image.pdf')
return outdir / 'invalid_image.pdf'


def test_recoverable_image_error(pdf_with_invalid_image, outdir, caplog):
# When stop_on_error is False, we expect Ghostscript to print an error
# but continue
rasterize_pdf(
outdir / 'invalid_image.pdf',
outdir / 'out1.png',
outdir / 'out.png',
raster_device='pngmono',
raster_dpi=Resolution(10, 10),
stop_on_error=False,
)
assert 'Image has both ImageMask and ColorSpace' in caplog.text


@pytest.mark.xfail(
ghostscript.version() < Version('10.04.0'),
reason="Older Ghostscript behavior is different",
)
def test_recoverable_image_error_with_stop(pdf_with_invalid_image, outdir, caplog):
# When stop_on_error is True, Ghostscript will print an error and exit
# but still produce a viable image. We intercept this case and raise
# InputFileError because it will contain an image of the whole page minus
Expand All @@ -256,7 +268,7 @@ def test_recoverable_image_error_path(outdir, caplog):
):
rasterize_pdf(
outdir / 'invalid_image.pdf',
outdir / 'out2.png',
outdir / 'out.png',
raster_device='pngmono',
raster_dpi=Resolution(100, 100),
stop_on_error=True,
Expand Down

0 comments on commit 65df44f

Please sign in to comment.