summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xrun_tests.py (renamed from testall.py)43
-rwxr-xr-xsetup.py2
2 files changed, 25 insertions, 20 deletions
diff --git a/testall.py b/run_tests.py
index 462550b7..3b9df045 100755
--- a/testall.py
+++ b/run_tests.py
@@ -1,33 +1,32 @@
#!/usr/bin/env python3
import sys
-
-import os
import logging
import unittest
-import distutils.core
-from glob import glob
-from os.path import splitext, basename, join as pjoin
+from argparse import ArgumentParser
+from distutils.core import Command
+from importlib import import_module
+from pathlib import Path
-def run_tests():
+def run_tests(filenames=None):
"""
Find and run all tests in the tests/ directory.
Excludes live tests (tests/live_*).
"""
- testfiles = ['tests.test_overall']
- exclude = ['__init__.py', 'test_overall.py']
- for t in glob(pjoin('tests', '*.py')):
- if True not in [t.endswith(ex) for ex in exclude]:
- if basename(t).startswith('test_'):
- testfiles.append('tests.%s' % splitext(basename(t))[0])
+ if not filenames:
+ filenames = [i for i in Path('tests').glob('test_*')]
+ else:
+ filenames = [Path(i) for i in filenames]
+
+ modules = ['.'.join(test.parts[:-1] + (test.stem,)) for test in filenames]
suites = []
- for file in testfiles:
- __import__(file)
- suites.append(sys.modules[file].suite)
+ for filename in modules:
+ module = import_module(filename)
+ suites.append(module.suite)
tests = unittest.TestSuite(suites)
runner = unittest.TextTestRunner(verbosity=2)
@@ -42,12 +41,12 @@ def run_tests():
# Add a 'test' command for setup.py
-class TestCommand(distutils.core.Command):
+class TestCommand(Command):
- user_options = [ ]
+ user_options = []
def initialize_options(self):
- self._dir = os.getcwd()
+ pass
def finalize_options(self):
pass
@@ -57,8 +56,14 @@ class TestCommand(distutils.core.Command):
if __name__ == '__main__':
- result = run_tests()
+ parser = ArgumentParser(description='Run unit tests.')
+ parser.add_argument('tests', metavar='TEST', nargs='*', help='list of tests to run, or nothing to run them all')
+ args = parser.parse_args()
+
+ result = run_tests(args.tests)
print("<tests %s ran='%s' errors='%s' fails='%s' success='%s'/>" % (
"xmlns='http//andyet.net/protocol/tests'",
result.testsRun, len(result.errors),
len(result.failures), result.wasSuccessful()))
+
+ sys.exit(not result.wasSuccessful())
diff --git a/setup.py b/setup.py
index 5221fbdc..9e497059 100755
--- a/setup.py
+++ b/setup.py
@@ -13,7 +13,7 @@ try:
except ImportError:
from distutils.core import setup
-from testall import TestCommand
+from run_tests import TestCommand
from slixmpp.version import __version__
VERSION = __version__