fr/fr_env/lib/python3.8/site-packages/imageio/testing.py

146 lines
3.3 KiB
Python
Raw Permalink Normal View History

2021-02-17 12:26:31 +05:30
# -*- coding: utf-8 -*-
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
""" Functionality used for testing. This code itself is not covered in tests.
"""
import os
import sys
import inspect
import shutil
import atexit
import pytest
# Get root dir
THIS_DIR = os.path.abspath(os.path.dirname(__file__))
ROOT_DIR = THIS_DIR
for i in range(9):
ROOT_DIR = os.path.dirname(ROOT_DIR)
if os.path.isfile(os.path.join(ROOT_DIR, ".gitignore")):
break
## Functions to use in tests
def run_tests_if_main(show_coverage=False):
""" Run tests in a given file if it is run as a script
Coverage is reported for running this single test. Set show_coverage to
launch the report in the web browser.
"""
local_vars = inspect.currentframe().f_back.f_locals
if not local_vars.get("__name__", "") == "__main__":
return
# we are in a "__main__"
os.chdir(ROOT_DIR)
fname = str(local_vars["__file__"])
_clear_imageio()
_enable_faulthandler()
pytest.main(
[
"-v",
"-x",
"--color=yes",
"--cov",
"imageio",
"--cov-config",
".coveragerc",
"--cov-report",
"html",
fname,
]
)
if show_coverage:
import webbrowser
fname = os.path.join(ROOT_DIR, "htmlcov", "index.html")
webbrowser.open_new_tab(fname)
_the_test_dir = None
def get_test_dir():
global _the_test_dir
if _the_test_dir is None:
# Define dir
from imageio.core import appdata_dir
_the_test_dir = os.path.join(appdata_dir("imageio"), "testdir")
# Clear and create it now
clean_test_dir(True)
os.makedirs(_the_test_dir)
os.makedirs(os.path.join(_the_test_dir, "images"))
# And later
atexit.register(clean_test_dir)
return _the_test_dir
def clean_test_dir(strict=False):
if os.path.isdir(_the_test_dir):
try:
shutil.rmtree(_the_test_dir)
except Exception:
if strict:
raise
def need_internet():
if os.getenv("IMAGEIO_NO_INTERNET", "").lower() in ("1", "true", "yes"):
pytest.skip("No internet")
## Functions to use from invoke tasks
def test_unit(cov_report="term"):
""" Run all unit tests. Returns exit code.
"""
orig_dir = os.getcwd()
os.chdir(ROOT_DIR)
try:
_clear_imageio()
_enable_faulthandler()
return pytest.main(
[
"-v",
"--cov",
"imageio",
"--cov-config",
".coveragerc",
"--cov-report",
cov_report,
"tests",
]
)
finally:
os.chdir(orig_dir)
import imageio
print("Tests were performed on", str(imageio))
## Requirements
def _enable_faulthandler():
""" Enable faulthandler (if we can), so that we get tracebacks
on segfaults.
"""
try:
import faulthandler
faulthandler.enable()
print("Faulthandler enabled")
except Exception:
print("Could not enable faulthandler")
def _clear_imageio():
# Remove ourselves from sys.modules to force an import
for key in list(sys.modules.keys()):
if key.startswith("imageio"):
del sys.modules[key]