diff --git a/tests/test_main.py b/tests/test_main.py index 52a816e5..524f74e2 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -16,7 +16,7 @@ from PIL import Image import ocrmypdf from ocrmypdf._exec import tesseract -from ocrmypdf.exceptions import ExitCode, MissingDependencyError +from ocrmypdf.exceptions import ExitCode, MissingDependencyError, OutputFileAccessError from ocrmypdf.pdfa import file_claims_pdfa from ocrmypdf.pdfinfo import Colorspace, Encoding, PdfInfo from ocrmypdf.subprocess import get_version @@ -239,8 +239,8 @@ def test_german(resources, outdir): def test_klingon(resources, outpdf): - p = run_ocrmypdf(resources / 'francais.pdf', outpdf, '-l', 'klz') - assert p.returncode == ExitCode.missing_dependency + with pytest.raises(MissingDependencyError): + run_ocrmypdf_api(resources / 'francais.pdf', outpdf, '-l', 'klz') def test_missing_docinfo(resources, outpdf): @@ -345,8 +345,8 @@ def test_tesseract_thresholding_invalid(value, resources, no_outpdf): @pytest.mark.parametrize('renderer', RENDERERS) -def test_tesseract_crash(renderer, resources, no_outpdf): - p = run_ocrmypdf( +def test_tesseract_crash(renderer, resources, no_outpdf, caplog): + exitcode = run_ocrmypdf_api( resources / 'ccitt.pdf', no_outpdf, '-v', @@ -356,24 +356,22 @@ def test_tesseract_crash(renderer, resources, no_outpdf): '--plugin', 'tests/plugins/tesseract_crash.py', ) - assert p.returncode == ExitCode.child_process_error + assert exitcode == ExitCode.child_process_error assert not no_outpdf.exists() - assert "SubprocessOutputError" in p.stderr + assert "SubprocessOutputError" in caplog.text -def test_tesseract_crash_autorotate(resources, no_outpdf): - p = run_ocrmypdf( +def test_tesseract_crash_autorotate(resources, no_outpdf, caplog): + exitcode = run_ocrmypdf_api( resources / 'ccitt.pdf', no_outpdf, '-r', '--plugin', 'tests/plugins/tesseract_crash.py', ) - assert p.returncode == ExitCode.child_process_error + assert exitcode == ExitCode.child_process_error assert not no_outpdf.exists() - assert "uncaught exception" in p.stderr - print(p.stdout) - print(p.stderr) + assert "uncaught exception" in caplog.text @pytest.mark.parametrize('renderer', RENDERERS) @@ -482,13 +480,13 @@ def protected_file(outdir): os.name == 'nt' or os.geteuid() == 0, reason="root can write to anything" ) def test_destination_not_writable(resources, protected_file): - p = run_ocrmypdf( + exitcode = run_ocrmypdf_api( resources / 'jbig2.pdf', protected_file, '--plugin', 'tests/plugins/tesseract_noop.py', ) - assert p.returncode == ExitCode.file_access_error, "Expected error" + assert exitcode == ExitCode.file_access_error @pytest.fixture @@ -791,15 +789,18 @@ def test_pdfa_n(pdfa_level, resources, outpdf): assert pdfa_info['conformance'] == f'PDF/A-{pdfa_level}B' -def test_decompression_bomb_error(resources, outpdf): - p = run_ocrmypdf(resources / 'hugemono.pdf', outpdf) - assert 'decompression bomb' in p.stderr and '--max-image-mpixels' in p.stderr +def test_decompression_bomb_error(resources, outpdf, caplog): + run_ocrmypdf_api(resources / 'hugemono.pdf', outpdf) + assert 'decompression bomb' in caplog.text + assert 'max-image-mpixels' in caplog.text @pytest.mark.slow def test_decompression_bomb_succeeds(resources, outpdf): - p = run_ocrmypdf(resources / 'hugemono.pdf', outpdf, '--max-image-mpixels', '2000') - assert p.returncode == 0 + exitcode = run_ocrmypdf_api( + resources / 'hugemono.pdf', outpdf, '--max-image-mpixels', '2000' + ) + assert exitcode == 0 def test_text_curves(resources, outpdf): @@ -829,37 +830,37 @@ def test_text_curves_force(resources, outpdf): assert len(info.pages[0].images) != 0, "force did not rasterize" -def test_output_is_dir(resources, outdir): - p = run_ocrmypdf( +def test_output_is_dir(resources, outdir, caplog): + exitcode = run_ocrmypdf_api( resources / 'trivial.pdf', outdir, '--force-ocr', '--plugin', 'tests/plugins/tesseract_noop.py', ) - assert p.returncode == ExitCode.file_access_error - assert 'is not a writable file' in p.stderr + assert exitcode == ExitCode.file_access_error + assert 'is not a writable file' in caplog.text @pytest.mark.skipif(os.name == 'nt', reason="symlink needs admin permissions") def test_output_is_symlink(resources, outdir): sym = Path(outdir / 'this_is_a_symlink') sym.symlink_to(outdir / 'out.pdf') - p = run_ocrmypdf( + exitcode = run_ocrmypdf_api( resources / 'trivial.pdf', sym, '--force-ocr', '--plugin', 'tests/plugins/tesseract_noop.py', ) - assert p.returncode == ExitCode.ok, p.stderr + assert exitcode == ExitCode.ok assert (outdir / 'out.pdf').stat().st_size > 0, 'target file not created' -def test_livecycle(resources, no_outpdf): - p = run_ocrmypdf(resources / 'livecycle.pdf', no_outpdf) +def test_livecycle(resources, no_outpdf, caplog): + exitcode = run_ocrmypdf_api(resources / 'livecycle.pdf', no_outpdf) - assert p.returncode == ExitCode.input_file, p.stderr + assert exitcode == ExitCode.input_file, caplog.text def test_version_check(): @@ -928,7 +929,7 @@ def test_outputtype_none_bad_setup(resources, outpdf): def test_outputtype_none(resources, outtxt): - p = run_ocrmypdf( + exitcode = run_ocrmypdf_api( resources / 'trivial.pdf', '-', '--output-type=none', @@ -937,7 +938,8 @@ def test_outputtype_none(resources, outtxt): '--plugin', 'tests/plugins/tesseract_noop.py', ) - assert p.returncode == ExitCode.ok + assert exitcode == ExitCode.ok + assert outtxt.exists() @pytest.fixture