diff --git a/setup.cfg b/setup.cfg index 8d515cb4..579a575c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -9,4 +9,5 @@ ignore = .github [tool:pytest] -norecursedirs = lib .pc .git +norecursedirs = lib .pc .git output cache resources +testpaths = tests diff --git a/setup.py b/setup.py index a1d98980..c1ccbfaf 100644 --- a/setup.py +++ b/setup.py @@ -216,7 +216,8 @@ setup( setup_requires=[ 'setuptools_scm', 'cffi>=1.5.0', - 'pytest-runner' + 'pytest-runner', + 'pytest-helpers-namespace' ], use_scm_version={'version_scheme': 'post-release'}, cffi_modules=[ diff --git a/test_requirements.txt b/test_requirements.txt index 11dafdd5..c2fab9d3 100644 --- a/test_requirements.txt +++ b/test_requirements.txt @@ -1 +1,2 @@ -pytest >= 2.7.2 +pytest >= 2.8 +pytest-helpers-namespace \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 00000000..787c8a1e --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +# © 2017 James R. Barlow: github.com/jbarlow83 + +import sys +import os +import platform + +pytest_plugins = ['helpers_namespace'] + +import pytest + + +if sys.version_info.major < 3: + print("Requires Python 3.4+") + sys.exit(1) + + +@pytest.helpers.register +def is_linux(): + return platform.system() == 'Linux' + + +@pytest.helpers.register +def running_in_docker(): + # Docker creates a file named /.dockerinit + return os.path.exists('/.dockerinit') diff --git a/tests/test_hocrtransform.py b/tests/test_hocrtransform.py index 21079d17..752d1de8 100644 --- a/tests/test_hocrtransform.py +++ b/tests/test_hocrtransform.py @@ -15,14 +15,9 @@ import pytest import sys -if sys.version_info.major < 3: - print("Requires Python 3.4+") - sys.exit(1) - TESTS_ROOT = os.path.abspath(os.path.dirname(__file__)) SPOOF_PATH = os.path.join(TESTS_ROOT, 'spoof') PROJECT_ROOT = os.path.dirname(TESTS_ROOT) -OCRMYPDF = os.path.join(PROJECT_ROOT, 'OCRmyPDF.sh') TEST_RESOURCES = os.path.join(PROJECT_ROOT, 'tests', 'resources') TEST_OUTPUT = os.environ.get( 'OCRMYPDF_TEST_OUTPUT', diff --git a/tests/test_main.py b/tests/test_main.py index e9d56c5f..2824727d 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 # © 2015 James R. Barlow: github.com/jbarlow83 -from __future__ import print_function from subprocess import Popen, PIPE, check_output, check_call, DEVNULL import os import shutil @@ -13,13 +12,8 @@ import PyPDF2 as pypdf from ocrmypdf.exceptions import ExitCode from ocrmypdf import leptonica from ocrmypdf.pdfa import file_claims_pdfa -import platform -if sys.version_info.major < 3: - print("Requires Python 3.4+") - sys.exit(1) - TESTS_ROOT = os.path.abspath(os.path.dirname(__file__)) SPOOF_PATH = os.path.join(TESTS_ROOT, 'spoof') PROJECT_ROOT = os.path.dirname(TESTS_ROOT) @@ -30,15 +24,6 @@ TEST_OUTPUT = os.environ.get( OCRMYPDF = [sys.executable, '-m', 'ocrmypdf'] -def running_in_docker(): - # Docker creates a file named /.dockerinit - return os.path.exists('/.dockerinit') - - -def is_linux(): - return platform.system() == 'Linux' - - def setup_module(): with suppress(FileNotFoundError): shutil.rmtree(TEST_OUTPUT) @@ -115,7 +100,7 @@ def spoof_tesseract_noop(): @pytest.fixture def spoof_tesseract_cache(): - if running_in_docker(): + if pytest.helpers.running_in_docker(): return os.environ.copy() return spoof(tesseract="tesseract_cache.py") @@ -246,7 +231,7 @@ def test_preserve_metadata(spoof_tesseract_noop, output_type): @pytest.mark.skipif( - is_linux() and not running_in_docker(), + pytest.helpers.is_linux() and not pytest.helpers.running_in_docker(), reason="likely to fail if Linux locale is not configured correctly") @pytest.mark.parametrize("output_type", [ 'pdfa', 'pdf' @@ -511,7 +496,7 @@ def test_missing_docinfo(spoof_tesseract_noop): assert p.returncode == ExitCode.ok, err -@pytest.mark.skipif(running_in_docker(), +@pytest.mark.skipif(pytest.helpers.running_in_docker(), reason="writes to tests/resources") def test_uppercase_extension(spoof_tesseract_noop): shutil.copy(_infile("skew.pdf"), _infile("UPPERCASE.PDF")) diff --git a/tests/test_pageinfo.py b/tests/test_pageinfo.py index d28fc1d2..90be6c9d 100644 --- a/tests/test_pageinfo.py +++ b/tests/test_pageinfo.py @@ -14,10 +14,6 @@ import pytest import sys -if sys.version_info.major < 3: - print("Requires Python 3.4+") - sys.exit(1) - TESTS_ROOT = os.path.abspath(os.path.dirname(__file__)) SPOOF_PATH = os.path.join(TESTS_ROOT, 'spoof') PROJECT_ROOT = os.path.dirname(TESTS_ROOT) diff --git a/tests/test_tess4.py b/tests/test_tess4.py index 9dfc1e98..c0aef95b 100644 --- a/tests/test_tess4.py +++ b/tests/test_tess4.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 # © 2017 James R. Barlow: github.com/jbarlow83 -from __future__ import print_function from subprocess import Popen, PIPE, check_output, check_call, DEVNULL import os import shutil @@ -14,13 +13,9 @@ from ocrmypdf.exceptions import ExitCode from ocrmypdf import leptonica from ocrmypdf.pdfa import file_claims_pdfa from ocrmypdf.exec import tesseract -import platform +from common import is_linux, running_in_docker -if sys.version_info.major < 3: - print("Requires Python 3.4+") - sys.exit(1) - TESTS_ROOT = os.path.abspath(os.path.dirname(__file__)) SPOOF_PATH = os.path.join(TESTS_ROOT, 'spoof') PROJECT_ROOT = os.path.dirname(TESTS_ROOT) @@ -33,15 +28,6 @@ pytestmark = pytest.mark.skipif(not tesseract.v4(), reason="tesseract 4.0 required") -def running_in_docker(): - # Docker creates a file named /.dockerinit - return os.path.exists('/.dockerinit') - - -def is_linux(): - return platform.system() == 'Linux' - - def _infile(input_basename): return os.path.join(TEST_RESOURCES, input_basename)