summaryrefslogtreecommitdiff
path: root/psutil/tests/runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'psutil/tests/runner.py')
-rwxr-xr-xpsutil/tests/runner.py29
1 files changed, 27 insertions, 2 deletions
diff --git a/psutil/tests/runner.py b/psutil/tests/runner.py
index 9e19d198..1a28aa43 100755
--- a/psutil/tests/runner.py
+++ b/psutil/tests/runner.py
@@ -24,11 +24,13 @@ except ImportError:
import psutil
from psutil._common import memoize
+from psutil.tests import safe_rmpath
from psutil.tests import TOX
HERE = os.path.abspath(os.path.dirname(__file__))
VERBOSITY = 1 if TOX else 2
+FAILED_TESTS_FNAME = '.failed-tests.txt'
if os.name == 'posix':
GREEN = 1
RED = 2
@@ -157,15 +159,38 @@ def get_suite(name=None):
return suite
-def run(name=None):
+def get_suite_from_failed():
+ # ...from previously failed test run
+ suite = unittest.TestSuite()
+ if not os.path.isfile(FAILED_TESTS_FNAME):
+ return suite
+ with open(FAILED_TESTS_FNAME, 'rt') as f:
+ names = f.read().split()
+ for n in names:
+ suite.addTest(unittest.defaultTestLoader.loadTestsFromName(n))
+ return suite
+
+
+def save_failed_tests(result):
+ if result.wasSuccessful():
+ return safe_rmpath(FAILED_TESTS_FNAME)
+ with open(FAILED_TESTS_FNAME, 'wt') as f:
+ for t in result.errors + result.failures:
+ tname = str(t[0])
+ f.write(tname + '\n')
+
+
+def run(name=None, last_failed=False):
setup_tests()
runner = ColouredRunner(verbosity=VERBOSITY)
+ suite = get_suite_from_failed() if last_failed else get_suite(name)
try:
- result = runner.run(get_suite(name))
+ result = runner.run(suite)
except (KeyboardInterrupt, SystemExit) as err:
print("received %s" % err.__class__.__name__, file=sys.stderr)
runner.result.printErrors()
sys.exit(1)
else:
+ save_failed_tests(result)
success = result.wasSuccessful()
sys.exit(0 if success else 1)