diff --git a/tests/test_filters.py b/tests/test_filters.py index 2d6284931..2f3e9673f 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -6,12 +6,13 @@ from io import BytesIO from itertools import product as cartesian_product from pathlib import Path +from unittest import mock import pytest from PIL import Image from pypdf import PdfReader -from pypdf.errors import DeprecationError, PdfReadError +from pypdf.errors import DependencyError, DeprecationError, PdfReadError from pypdf.filters import ( ASCII85Decode, ASCIIHexDecode, @@ -19,6 +20,7 @@ CCITTFaxDecode, CCITTParameters, FlateDecode, + JBIG2Decode, ) from pypdf.generic import ArrayObject, DictionaryObject, IndirectObject, NameObject, NumberObject @@ -642,3 +644,25 @@ def test_ascii85decode__non_recoverable(caplog): with pytest.raises(ValueError, match="Non-Ascii85 digit found: Ã"): ASCII85Decode.decode(data) assert caplog.text == "" + + +def test_jbig2decode__binary_errors(): + with ( + mock.patch("pypdf.filters._JBIG2DEC_BINARY", None), + pytest.raises(DependencyError, match="jbig2dec binary is not available.") + ): + JBIG2Decode.decode(b"dummy") + + result = subprocess.CompletedProcess( + args=["dummy"], returncode=0, stdout=b"", + stderr=( + b"jbig2dec: unrecognized option '--embedded'\n" + b"Usage: jbig2dec [options] \n" + b" or jbig2dec [options] \n" + ) + ) + with ( + mock.patch("pypdf.filters.subprocess.run", return_value=result), + pytest.raises(DependencyError, match="jbig2dec>=0.15 is required.") + ): + JBIG2Decode.decode(b"dummy")