]> gitweb.michael.orlitzky.com - dunshire.git/blobdiff - test/__main__.py
test: add the ability to run the test suite verbosely.
[dunshire.git] / test / __main__.py
old mode 100644 (file)
new mode 100755 (executable)
index 6a8af8a..c8f0f24
@@ -1,6 +1,58 @@
+#!/usr/bin/env python
 """
 An implementation of __main__() that allows us to "run this module."
 """
+from sys import argv
+
 from test import build_suite, run_suite
 
-run_suite(build_suite())
+
+def main(doctests, loop, verbose):
+    """
+    The main function for this module. It runs the tests.
+
+    We take two command-line arguments. The first enables you to turn
+    off the doctests, which are deterministic. The second tells us to
+    repeat the test suite indefinitely rather than return the result of
+    running it once. The flags usually occur together so that we don't
+    waste time running the doctests in a loop.
+
+    Parameters
+    ----------
+
+    doctests : bool
+        Do you want to run the doctests?
+
+    loop : bool
+        Do you want to loop and rerun the tests indefinitely?
+
+    verbose : bool
+        Do you want to see the name and result of each test as
+        it is run?
+
+    """
+    # Running the test suite clobbers it! And deepcopy() doesn't work
+    # on a suite that contains doctests! ARRRGRRGRRGRHG!!!!!! You're all
+    # idiots.
+    verbosity = 1
+    if verbose: verbosity = 2
+    result = run_suite(build_suite(doctests), verbosity)
+
+    if result.wasSuccessful() and not loop:
+        return 0
+
+    if loop:
+        passed = 0
+        while result.wasSuccessful():
+            print('Passed: {:d}'.format(passed))
+            passed += 1
+            result = run_suite(build_suite(doctests), verbosity)
+
+    return 1
+
+
+if __name__ == '__main__':
+    doctests = not "--no-doctests" in argv
+    loop = '--loop' in argv
+    verbose = '--verbose' in argv
+    exit(main(doctests, loop, verbose))