Source code for wolframclient.cli.commands.test
from __future__ import absolute_import, print_function, unicode_literals
import sys
import unittest
from wolframclient.cli.utils import SimpleCommand
from wolframclient.utils import six
from wolframclient.utils.decorators import to_tuple
from wolframclient.utils.functional import map
from wolframclient.utils.importutils import module_path
[docs]@to_tuple
def dependencies():
yield ("pytz", "2018.6")
if not six.JYTHON:
yield ("numpy", not six.PY2 and "1.15.3" or None)
yield ("pillow", "5.3.0")
yield ("requests", "2.20.0")
yield ("oauthlib", "2.1.0")
yield ("pyzmq", "17.1.2")
yield ("pandas", "0.23.4")
yield ("unittest-xml-reporting", None)
if not six.PY2:
yield ("aiohttp", "3.4.4")
[docs]class Command(SimpleCommand):
""" Run test suites from the tests modules.
A list of patterns can be provided to specify the tests to run.
"""
modules = ["wolframclient.tests"]
dependencies = dependencies()
[docs] def add_arguments(self, parser):
parser.add_argument(
"-x",
"--xml",
dest="produce_xml",
action="store_true",
help="produce xml reports from the test results",
)
parser.add_argument(
"-d",
"--xml-dir",
dest="xml_output_dir",
help="produce an xml report in a specific directory.",
)
parser.add_argument(
"-v",
"--verbosity",
type=int,
choices=[0, 1, 2],
default=2,
help="set output verbosity",
)
parser.add_argument("args", nargs="*")
[docs] def handle(self, *args, **opts):
suite = unittest.TestSuite()
for root in map(module_path, self.modules):
for arg in args or ["*"]:
suite.addTests(
unittest.defaultTestLoader.discover(root, pattern=arg, top_level_dir=root)
)
# verbosity > 1 print test name
verbosity = opts.get("verbosity")
xml_path = opts.get("xml_output_dir")
# if opts.get('produce_xml'):
if xml_path is not None or opts.get("produce_xml"):
import xmlrunner
runner = xmlrunner.XMLTestRunner(
output=xml_path or "test-reports", verbosity=verbosity
)
else:
runner = unittest.TextTestRunner(verbosity=verbosity)
result = runner.run(suite)
if not result.wasSuccessful():
sys.exit(1)