forked from orbit-oss/flask
Moved loader code into the testsuite and out of the runner
This commit is contained in:
parent
f30b1174b8
commit
5a49688554
2 changed files with 53 additions and 56 deletions
|
|
@ -20,6 +20,9 @@ from contextlib import contextmanager
|
||||||
from werkzeug.utils import import_string, find_modules
|
from werkzeug.utils import import_string, find_modules
|
||||||
|
|
||||||
|
|
||||||
|
common_prefix = __name__ + '.'
|
||||||
|
|
||||||
|
|
||||||
def add_to_path(path):
|
def add_to_path(path):
|
||||||
def _samefile(x, y):
|
def _samefile(x, y):
|
||||||
try:
|
try:
|
||||||
|
|
@ -47,6 +50,25 @@ def iter_suites():
|
||||||
yield mod.suite()
|
yield mod.suite()
|
||||||
|
|
||||||
|
|
||||||
|
def find_all_tests():
|
||||||
|
suites = [suite()]
|
||||||
|
while suites:
|
||||||
|
s = suites.pop()
|
||||||
|
try:
|
||||||
|
suites.extend(s)
|
||||||
|
except TypeError:
|
||||||
|
yield s
|
||||||
|
|
||||||
|
|
||||||
|
def find_all_tests_with_name():
|
||||||
|
for testcase in find_all_tests():
|
||||||
|
yield testcase, '%s.%s.%s' % (
|
||||||
|
testcase.__class__.__module__,
|
||||||
|
testcase.__class__.__name__,
|
||||||
|
testcase._testMethodName
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def catch_warnings():
|
def catch_warnings():
|
||||||
"""Catch warnings in a with block in a list"""
|
"""Catch warnings in a with block in a list"""
|
||||||
|
|
@ -113,6 +135,36 @@ class FlaskTestCase(unittest.TestCase):
|
||||||
return self.assertEqual(x, y)
|
return self.assertEqual(x, y)
|
||||||
|
|
||||||
|
|
||||||
|
class BetterLoader(unittest.TestLoader):
|
||||||
|
|
||||||
|
def loadTestsFromName(self, name, module=None):
|
||||||
|
if name == 'suite':
|
||||||
|
return suite()
|
||||||
|
for testcase, testname in find_all_tests_with_name():
|
||||||
|
if testname == name:
|
||||||
|
return testcase
|
||||||
|
if testname.startswith(common_prefix):
|
||||||
|
if testname[len(common_prefix):] == name:
|
||||||
|
return testcase
|
||||||
|
|
||||||
|
all_tests = []
|
||||||
|
for testcase, testname in find_all_tests_with_name():
|
||||||
|
if testname.endswith('.' + name) or ('.' + name + '.') in testname or \
|
||||||
|
testname.startswith(name + '.'):
|
||||||
|
all_tests.append(testcase)
|
||||||
|
|
||||||
|
if not all_tests:
|
||||||
|
print >> sys.stderr, 'Error: could not find test case for "%s"' % name
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if len(all_tests) == 1:
|
||||||
|
return all_tests[0]
|
||||||
|
rv = unittest.TestSuite()
|
||||||
|
for test in all_tests:
|
||||||
|
rv.addTest(test)
|
||||||
|
return rv
|
||||||
|
|
||||||
|
|
||||||
def suite():
|
def suite():
|
||||||
setup_paths()
|
setup_paths()
|
||||||
suite = unittest.TestSuite()
|
suite = unittest.TestSuite()
|
||||||
|
|
|
||||||
57
run-tests.py
57
run-tests.py
|
|
@ -1,58 +1,3 @@
|
||||||
import sys
|
|
||||||
import unittest
|
import unittest
|
||||||
from unittest.loader import TestLoader
|
from flask.testsuite import BetterLoader
|
||||||
from flask.testsuite import suite
|
|
||||||
|
|
||||||
common_prefix = suite.__module__ + '.'
|
|
||||||
|
|
||||||
|
|
||||||
def find_all_tests():
|
|
||||||
suites = [suite()]
|
|
||||||
while suites:
|
|
||||||
s = suites.pop()
|
|
||||||
try:
|
|
||||||
suites.extend(s)
|
|
||||||
except TypeError:
|
|
||||||
yield s
|
|
||||||
|
|
||||||
|
|
||||||
def find_all_tests_with_name():
|
|
||||||
for testcase in find_all_tests():
|
|
||||||
yield testcase, '%s.%s.%s' % (
|
|
||||||
testcase.__class__.__module__,
|
|
||||||
testcase.__class__.__name__,
|
|
||||||
testcase._testMethodName
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class BetterLoader(TestLoader):
|
|
||||||
|
|
||||||
def loadTestsFromName(self, name, module=None):
|
|
||||||
if name == 'suite':
|
|
||||||
return suite()
|
|
||||||
for testcase, testname in find_all_tests_with_name():
|
|
||||||
if testname == name:
|
|
||||||
return testcase
|
|
||||||
if testname.startswith(common_prefix):
|
|
||||||
if testname[len(common_prefix):] == name:
|
|
||||||
return testcase
|
|
||||||
|
|
||||||
all_tests = []
|
|
||||||
for testcase, testname in find_all_tests_with_name():
|
|
||||||
if testname.endswith('.' + name) or ('.' + name + '.') in testname or \
|
|
||||||
testname.startswith(name + '.'):
|
|
||||||
all_tests.append(testcase)
|
|
||||||
|
|
||||||
if not all_tests:
|
|
||||||
print >> sys.stderr, 'Error: could not find test case for "%s"' % name
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if len(all_tests) == 1:
|
|
||||||
return all_tests[0]
|
|
||||||
rv = unittest.TestSuite()
|
|
||||||
for test in all_tests:
|
|
||||||
rv.addTest(test)
|
|
||||||
return rv
|
|
||||||
|
|
||||||
|
|
||||||
unittest.main(testLoader=BetterLoader(), defaultTest='suite')
|
unittest.main(testLoader=BetterLoader(), defaultTest='suite')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue