145 lines
3.3 KiB
Python
145 lines
3.3 KiB
Python
# -*- 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]
|