Files
django-anymail/runtests.py
medmunds b4e22c63b3 Reformat code with automated tools
Apply standardized code style
2023-02-06 15:05:24 -08:00

84 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python
# python setup.py test
# or
# runtests.py [tests.test_x tests.test_y.SomeTestCase ...]
import os
import sys
import warnings
import django
from django.conf import settings
from django.test.utils import get_runner
def setup_and_run_tests(test_labels=None):
"""Discover and run project tests. Returns number of failures."""
test_labels = test_labels or ["tests"]
tags = envlist("ANYMAIL_ONLY_TEST")
exclude_tags = envlist("ANYMAIL_SKIP_TESTS")
# In automated testing, don't run live tests unless specifically requested
if envbool("CONTINUOUS_INTEGRATION") and not envbool("ANYMAIL_RUN_LIVE_TESTS"):
exclude_tags.append("live")
if tags:
print("Only running tests tagged: %r" % tags)
if exclude_tags:
print("Excluding tests tagged: %r" % exclude_tags)
# show DeprecationWarning and other default-ignored warnings:
warnings.simplefilter("default")
os.environ["DJANGO_SETTINGS_MODULE"] = (
"tests.test_settings.settings_%d_%d" % django.VERSION[:2]
)
django.setup()
TestRunner = get_runner(settings)
test_runner = TestRunner(verbosity=1, tags=tags, exclude_tags=exclude_tags)
return test_runner.run_tests(test_labels)
def runtests(test_labels=None):
"""Run project tests and exit"""
# Used as setup test_suite: must either exit or return a TestSuite
failures = setup_and_run_tests(test_labels)
sys.exit(bool(failures))
def envbool(var, default=False):
"""Returns value of environment variable var as a bool, or default if not set/empty.
Converts `'true'` and similar string representations to `True`,
and `'false'` and similar string representations to `False`.
"""
# Adapted from the old :func:`~distutils.util.strtobool`
val = os.getenv(var, "").strip().lower()
if val == "":
return default
elif val in ("y", "yes", "t", "true", "on", "1"):
return True
elif val in ("n", "no", "f", "false", "off", "0"):
return False
else:
raise ValueError("invalid boolean value env[%r]=%r" % (var, val))
def envlist(var):
"""Returns value of environment variable var split in a comma-separated list.
Returns an empty list if variable is empty or not set.
"""
val = [item.strip() for item in os.getenv(var, "").split(",")]
if val == [""]:
# "Splitting an empty string with a specified separator returns ['']"
val = []
return val
if __name__ == "__main__":
runtests(test_labels=sys.argv[1:])