summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/test/simple.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/django/test/simple.py')
-rw-r--r--lib/python2.7/site-packages/django/test/simple.py253
1 files changed, 0 insertions, 253 deletions
diff --git a/lib/python2.7/site-packages/django/test/simple.py b/lib/python2.7/site-packages/django/test/simple.py
deleted file mode 100644
index f28b8a2..0000000
--- a/lib/python2.7/site-packages/django/test/simple.py
+++ /dev/null
@@ -1,253 +0,0 @@
-"""
-This module is pending deprecation as of Django 1.6 and will be removed in
-version 1.8.
-
-"""
-import json
-import re
-import unittest as real_unittest
-import warnings
-
-from django.db.models import get_app, get_apps
-from django.test import _doctest as doctest
-from django.test import runner
-from django.test.utils import compare_xml, strip_quotes
-from django.utils import unittest
-from django.utils.importlib import import_module
-from django.utils.module_loading import module_has_submodule
-
-__all__ = ('DjangoTestSuiteRunner',)
-
-warnings.warn(
- "The django.test.simple module and DjangoTestSuiteRunner are deprecated; "
- "use django.test.runner.DiscoverRunner instead.",
- PendingDeprecationWarning)
-
-# The module name for tests outside models.py
-TEST_MODULE = 'tests'
-
-
-normalize_long_ints = lambda s: re.sub(r'(?<![\w])(\d+)L(?![\w])', '\\1', s)
-normalize_decimals = lambda s: re.sub(r"Decimal\('(\d+(\.\d*)?)'\)",
- lambda m: "Decimal(\"%s\")" % m.groups()[0], s)
-
-
-class OutputChecker(doctest.OutputChecker):
- def check_output(self, want, got, optionflags):
- """
- The entry method for doctest output checking. Defers to a sequence of
- child checkers
- """
- checks = (self.check_output_default,
- self.check_output_numeric,
- self.check_output_xml,
- self.check_output_json)
- for check in checks:
- if check(want, got, optionflags):
- return True
- return False
-
- def check_output_default(self, want, got, optionflags):
- """
- The default comparator provided by doctest - not perfect, but good for
- most purposes
- """
- return doctest.OutputChecker.check_output(self, want, got, optionflags)
-
- def check_output_numeric(self, want, got, optionflags):
- """Doctest does an exact string comparison of output, which means that
- some numerically equivalent values aren't equal. This check normalizes
- * long integers (22L) so that they equal normal integers. (22)
- * Decimals so that they are comparable, regardless of the change
- made to __repr__ in Python 2.6.
- """
- return doctest.OutputChecker.check_output(self,
- normalize_decimals(normalize_long_ints(want)),
- normalize_decimals(normalize_long_ints(got)),
- optionflags)
-
- def check_output_xml(self, want, got, optionsflags):
- try:
- return compare_xml(want, got)
- except Exception:
- return False
-
- def check_output_json(self, want, got, optionsflags):
- """
- Tries to compare want and got as if they were JSON-encoded data
- """
- want, got = strip_quotes(want, got)
- try:
- want_json = json.loads(want)
- got_json = json.loads(got)
- except Exception:
- return False
- return want_json == got_json
-
-
-class DocTestRunner(doctest.DocTestRunner):
- def __init__(self, *args, **kwargs):
- doctest.DocTestRunner.__init__(self, *args, **kwargs)
- self.optionflags = doctest.ELLIPSIS
-
-
-doctestOutputChecker = OutputChecker()
-
-
-def get_tests(app_module):
- parts = app_module.__name__.split('.')
- prefix, last = parts[:-1], parts[-1]
- try:
- test_module = import_module('.'.join(prefix + [TEST_MODULE]))
- except ImportError:
- # Couldn't import tests.py. Was it due to a missing file, or
- # due to an import error in a tests.py that actually exists?
- # app_module either points to a models.py file, or models/__init__.py
- # Tests are therefore either in same directory, or one level up
- if last == 'models':
- app_root = import_module('.'.join(prefix))
- else:
- app_root = app_module
-
- if not module_has_submodule(app_root, TEST_MODULE):
- test_module = None
- else:
- # The module exists, so there must be an import error in the test
- # module itself.
- raise
- return test_module
-
-
-def make_doctest(module):
- return doctest.DocTestSuite(module,
- checker=doctestOutputChecker,
- runner=DocTestRunner,
- )
-
-
-def build_suite(app_module):
- """
- Create a complete Django test suite for the provided application module.
- """
- suite = unittest.TestSuite()
-
- # Load unit and doctests in the models.py module. If module has
- # a suite() method, use it. Otherwise build the test suite ourselves.
- if hasattr(app_module, 'suite'):
- suite.addTest(app_module.suite())
- else:
- suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(
- app_module))
- try:
- suite.addTest(make_doctest(app_module))
- except ValueError:
- # No doc tests in models.py
- pass
-
- # Check to see if a separate 'tests' module exists parallel to the
- # models module
- test_module = get_tests(app_module)
- if test_module:
- # Load unit and doctests in the tests.py module. If module has
- # a suite() method, use it. Otherwise build the test suite ourselves.
- if hasattr(test_module, 'suite'):
- suite.addTest(test_module.suite())
- else:
- suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(
- test_module))
- try:
- suite.addTest(make_doctest(test_module))
- except ValueError:
- # No doc tests in tests.py
- pass
- return suite
-
-
-def build_test(label):
- """
- Construct a test case with the specified label. Label should be of the
- form model.TestClass or model.TestClass.test_method. Returns an
- instantiated test or test suite corresponding to the label provided.
-
- """
- parts = label.split('.')
- if len(parts) < 2 or len(parts) > 3:
- raise ValueError("Test label '%s' should be of the form app.TestCase "
- "or app.TestCase.test_method" % label)
-
- #
- # First, look for TestCase instances with a name that matches
- #
- app_module = get_app(parts[0])
- test_module = get_tests(app_module)
- TestClass = getattr(app_module, parts[1], None)
-
- # Couldn't find the test class in models.py; look in tests.py
- if TestClass is None:
- if test_module:
- TestClass = getattr(test_module, parts[1], None)
-
- try:
- if issubclass(TestClass, (unittest.TestCase, real_unittest.TestCase)):
- if len(parts) == 2: # label is app.TestClass
- try:
- return unittest.TestLoader().loadTestsFromTestCase(
- TestClass)
- except TypeError:
- raise ValueError(
- "Test label '%s' does not refer to a test class"
- % label)
- else: # label is app.TestClass.test_method
- return TestClass(parts[2])
- except TypeError:
- # TestClass isn't a TestClass - it must be a method or normal class
- pass
-
- #
- # If there isn't a TestCase, look for a doctest that matches
- #
- tests = []
- for module in app_module, test_module:
- try:
- doctests = make_doctest(module)
- # Now iterate over the suite, looking for doctests whose name
- # matches the pattern that was given
- for test in doctests:
- if test._dt_test.name in (
- '%s.%s' % (module.__name__, '.'.join(parts[1:])),
- '%s.__test__.%s' % (
- module.__name__, '.'.join(parts[1:]))):
- tests.append(test)
- except ValueError:
- # No doctests found.
- pass
-
- # If no tests were found, then we were given a bad test label.
- if not tests:
- raise ValueError("Test label '%s' does not refer to a test" % label)
-
- # Construct a suite out of the tests that matched.
- return unittest.TestSuite(tests)
-
-
-class DjangoTestSuiteRunner(runner.DiscoverRunner):
-
- def build_suite(self, test_labels, extra_tests=None, **kwargs):
- suite = unittest.TestSuite()
-
- if test_labels:
- for label in test_labels:
- if '.' in label:
- suite.addTest(build_test(label))
- else:
- app = get_app(label)
- suite.addTest(build_suite(app))
- else:
- for app in get_apps():
- suite.addTest(build_suite(app))
-
- if extra_tests:
- for test in extra_tests:
- suite.addTest(test)
-
- return runner.reorder_suite(suite, (unittest.TestCase,))