Ejemplo n.º 1
0
    def handle(self, *test_labels, **options):
        from django.conf import settings
        from django.test.utils import get_runner
        from djhudson.runners import HudsonTestSuiteRunner
        from djhudson.plugins import trigger_plugin_signal

        verbosity = int(options.get("verbosity", 1))
        interactive = options.get("interactive", False)
        failfast = options.get("failfast", False)

        trigger_plugin_signal("configure", settings, options)

        # Lookup can import modules, so give coverage-like plugins a chance,
        # to do something before it.
        TestRunner = get_runner(settings)

        if not issubclass(TestRunner, HudsonTestSuiteRunner):
            TestRunner = type("DynamicHudsonRunner", (HudsonTestSuiteRunner, TestRunner), {})

        test_runner = TestRunner(
            verbosity=verbosity,
            interactive=interactive,
            failfast=failfast,
            excludes=getattr(settings, "TEST_EXCLUDES", []),
        )

        # filter test labels

        result = test_runner.run_tests(test_labels)
        result._doc.write(options["xml_report_file"], encoding="utf-8")

        trigger_plugin_signal("report", result, test_labels)

        if len(result.failures) + len(result.errors):
            sys.exit(1)
Ejemplo n.º 2
0
 def build_suite(self, test_labels, extra_tests=None, **kwargs):
     trigger_plugin_signal("before_suite_build", test_labels)
     suite = super(HudsonTestSuiteRunner, self).build_suite(test_labels, extra_tests, **kwargs)
     filtered_suite = unittest.TestSuite()
     for case in flattened_suite(suite):
         exclude = False
         for expr in self._excludes:
             if re.match(expr, case.id()):
                 exclude = True
                 break
         if not exclude:
             filtered_suite.addTest(case)
     return filtered_suite
Ejemplo n.º 3
0
    def run_suite(self, suite, **kwargs):
        test_runner = unittest.TextTestRunner(
                verbosity=self.verbosity,
                failfast=self.failfast,
                buffer=kwargs.pop('buffer', False),
                resultclass=XMLTestResult)

        # make sure global URLs are loaded here
        from django.conf import settings
        importlib.import_module(settings.ROOT_URLCONF)

        trigger_plugin_signal("before_suite_run", suite)
        result = test_runner.run(suite)
        trigger_plugin_signal("after_suite_run", suite, result)
        return result
Ejemplo n.º 4
0
 def setup_databases(self):
     trigger_plugin_signal("before_database_setup")
     return super(HudsonTestSuiteRunner, self).setup_databases()