forked from mirrors/gecko-dev
Differential Revision: https://phabricator.services.mozilla.com/D65685 --HG-- rename : third_party/python/psutil-cp27-none-win_amd64/psutil-5.4.3.dist-info/METADATA => third_party/python/psutil-cp27-none-win_amd64/psutil-5.7.0.dist-info/METADATA rename : third_party/python/psutil-cp27-none-win_amd64/psutil-5.4.3.dist-info/WHEEL => third_party/python/psutil-cp27-none-win_amd64/psutil-5.7.0.dist-info/WHEEL rename : third_party/python/psutil-cp27-none-win_amd64/psutil-5.4.3.dist-info/top_level.txt => third_party/python/psutil-cp27-none-win_amd64/psutil-5.7.0.dist-info/top_level.txt rename : third_party/python/psutil/psutil/tests/runner.py => third_party/python/psutil-cp27-none-win_amd64/psutil/tests/runner.py rename : third_party/python/psutil/psutil/arch/windows/wmi.h => third_party/python/psutil/psutil/arch/windows/net.h rename : third_party/python/psutil/psutil/arch/windows/wmi.h => third_party/python/psutil/psutil/arch/windows/socks.h rename : third_party/python/psutil/scripts/internal/download_exes.py => third_party/python/psutil/scripts/internal/win_download_wheels.py extra : moz-landing-system : lando
162 lines
5.1 KiB
Python
162 lines
5.1 KiB
Python
#!/usr/bin/env python3
|
|
|
|
# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""
|
|
Unit test runner, providing new features on top of unittest module:
|
|
- colourized output (error, skip)
|
|
- print failures/tracebacks on CTRL+C
|
|
- re-run failed tests only (make test-failed)
|
|
"""
|
|
|
|
from __future__ import print_function
|
|
import optparse
|
|
import os
|
|
import sys
|
|
import unittest
|
|
from unittest import TestResult
|
|
from unittest import TextTestResult
|
|
from unittest import TextTestRunner
|
|
try:
|
|
import ctypes
|
|
except ImportError:
|
|
ctypes = None
|
|
|
|
import psutil
|
|
from psutil._common import hilite
|
|
from psutil._common import print_color
|
|
from psutil._common import term_supports_colors
|
|
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'
|
|
|
|
|
|
# =====================================================================
|
|
# --- unittest subclasses
|
|
# =====================================================================
|
|
|
|
|
|
class ColouredResult(TextTestResult):
|
|
|
|
def _print_color(self, s, color, bold=False):
|
|
file = sys.stderr if color == "red" else sys.stdout
|
|
print_color(s, color, bold=bold, file=file)
|
|
|
|
def addSuccess(self, test):
|
|
TestResult.addSuccess(self, test)
|
|
self._print_color("OK", "green")
|
|
|
|
def addError(self, test, err):
|
|
TestResult.addError(self, test, err)
|
|
self._print_color("ERROR", "red", bold=True)
|
|
|
|
def addFailure(self, test, err):
|
|
TestResult.addFailure(self, test, err)
|
|
self._print_color("FAIL", "red")
|
|
|
|
def addSkip(self, test, reason):
|
|
TestResult.addSkip(self, test, reason)
|
|
self._print_color("skipped: %s" % reason, "brown")
|
|
|
|
def printErrorList(self, flavour, errors):
|
|
flavour = hilite(flavour, "red", bold=flavour == 'ERROR')
|
|
TextTestResult.printErrorList(self, flavour, errors)
|
|
|
|
|
|
class ColouredRunner(TextTestRunner):
|
|
resultclass = ColouredResult if term_supports_colors() else TextTestResult
|
|
|
|
def _makeResult(self):
|
|
# Store result instance so that it can be accessed on
|
|
# KeyboardInterrupt.
|
|
self.result = TextTestRunner._makeResult(self)
|
|
return self.result
|
|
|
|
|
|
# =====================================================================
|
|
# --- public API
|
|
# =====================================================================
|
|
|
|
|
|
def setup_tests():
|
|
if 'PSUTIL_TESTING' not in os.environ:
|
|
# This won't work on Windows but set_testing() below will do it.
|
|
os.environ['PSUTIL_TESTING'] = '1'
|
|
psutil._psplatform.cext.set_testing()
|
|
|
|
|
|
def get_suite(name=None):
|
|
suite = unittest.TestSuite()
|
|
if name is None:
|
|
testmods = [os.path.splitext(x)[0] for x in os.listdir(HERE)
|
|
if x.endswith('.py') and x.startswith('test_') and not
|
|
x.startswith('test_memory_leaks')]
|
|
if "WHEELHOUSE_UPLOADER_USERNAME" in os.environ:
|
|
testmods = [x for x in testmods if not x.endswith((
|
|
"osx", "posix", "linux"))]
|
|
for tm in testmods:
|
|
# ...so that the full test paths are printed on screen
|
|
tm = "psutil.tests.%s" % tm
|
|
suite.addTest(unittest.defaultTestLoader.loadTestsFromName(tm))
|
|
else:
|
|
name = os.path.splitext(os.path.basename(name))[0]
|
|
suite.addTest(unittest.defaultTestLoader.loadTestsFromName(name))
|
|
return suite
|
|
|
|
|
|
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])
|
|
unittest.defaultTestLoader.loadTestsFromName(tname)
|
|
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(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)
|
|
|
|
|
|
def main():
|
|
usage = "python3 -m psutil.tests [opts]"
|
|
parser = optparse.OptionParser(usage=usage, description="run unit tests")
|
|
parser.add_option("--last-failed",
|
|
action="store_true", default=False,
|
|
help="only run last failed tests")
|
|
opts, args = parser.parse_args()
|
|
run(last_failed=opts.last_failed)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|