Source code for sourcefinder.testutil.decorators
import os
import unittest
[docs]
def requires_database():
"""Decorator to skip a test if database functionality is
disabled.
This function checks the environment variable `TKP_DISABLEDB`. If it is set
to a truthy value, the test is skipped with an appropriate message.
Returns
-------
function
A decorator that either skips the test or allows it to run.
"""
if os.environ.get("TKP_DISABLEDB", False):
return unittest.skip("Database functionality disabled in configuration")
return lambda func: func
[docs]
def requires_data(*args):
"""Decorator to skip a test if required data files are not
available.
This function checks for the existence of the specified data files.
If any of the files do not exist, the test is skipped with an appropriate
message.
Parameters
----------
*args : str
Variable-length argument list of file paths to check.
Returns
-------
function
A decorator that either skips the test or allows it to run.
"""
for filename in args:
if not os.path.exists(filename):
return unittest.skip("Test data (%s) not available" % filename)
return lambda func: func
[docs]
def requires_module(module_name):
"""Decorator to skip a test if a required module is not
available.
This function attempts to import the specified module. If the module
cannot be imported, the test is skipped with an appropriate message.
Parameters
----------
module_name : str
The name of the module to check for availability.
Returns
-------
function
A decorator that either skips the test or allows it to run.
"""
try:
__import__(module_name)
except ImportError:
return unittest.skip("Required module (%s) not available" % module_name)
return lambda func: func
[docs]
def duration(test_duration):
"""Decorator to skip a test if its duration exceeds the maximum
allowed duration.
This function checks the environment variable
``TKP_MAXTESTDURATION`` to determine the maximum allowed test
duration. If the test's duration exceeds this value, the test is
skipped with an appropriate message.
Parameters
----------
test_duration : float
The duration of the test in seconds.
Returns
-------
function
A decorator that either skips the test or allows it to run.
"""
max_duration = float(os.environ.get("TKP_MAXTESTDURATION", False))
if max_duration:
if max_duration < test_duration:
return unittest.skip(
"Tests of duration > %s disabled with TKP_MAXTESTDURATION" %
max_duration)
return lambda func: func
[docs]
def requires_test_db_managed():
"""Decorator to disable tests that perform potentially low-level
database management operations, such as destroying and creating
databases.
This decorator checks the environment variables to determine whether
such tests should be enabled or skipped:
- If the ``TKP_DBENGINE`` environment variable is set to
'monetdb', the test is skipped because database management tests
are not supported for MonetDB and must be tested manually.
- If the ``TKP_TESTDBMANAGEMENT`` environment variable is set, the
test is allowed to run.
- Otherwise, the test is skipped with an appropriate message.
Returns
-------
function
A decorator that either skips the test or allows it to run.
"""
if os.environ.get('TKP_DBENGINE', 'postgresql') == 'monetdb':
return unittest.skip("DB management tests not supported for Monetdb,"
"must be tested manually.")
if os.environ.get("TKP_TESTDBMANAGEMENT", False):
return lambda func: func
return unittest.skip("DB management tests disabled, TKP_TESTDBMANAGEMENT"
" not set")
[docs]
def high_ram_requirements():
"""Decorator to disable tests that break Travis due to
out-of-memory issues.
This function checks the `TRAVIS` environment variable to determine if the
tests are running in a Travis CI environment. If so, tests with high RAM
requirements are skipped with an appropriate message.
Returns
-------
function
A decorator that either skips the test or allows it to run.
"""
if os.environ.get("TRAVIS", False):
return unittest.skip(("High-ram requirement unit-tests disabled on "
"Travis"))
return lambda func: func