def run(self, result, debug=False): """Override TestSuite run to start suite-level fixtures. To avoid exception confusion, use a null Fixture when there are no fixtures. """ fixtures, intercept, host, port, prefix = self._get_intercept() try: with fixture.nest([fix() for fix in fixtures]): if intercept: with interceptor.Urllib3Interceptor( intercept, host, port, prefix): result = super(GabbiSuite, self).run(result, debug) else: result = super(GabbiSuite, self).run(result, debug) except unittest.SkipTest as exc: for test in self._tests: result.addSkip(test, str(exc)) # If we have an exception in the nested fixtures, that means # there's been an exception somewhere in the cycle other # than a specific test (as that would have been caught # already), thus from a fixture. If that exception were to # continue to raise here, then some test runners would # swallow it and the traceback of the failure would be # undiscoverable. To ensure the traceback is reported (via # the testrunner) to a human, the first test in the suite is # marked as having an error (it's fixture failed) and then # the entire suite is skipped, and the result stream told # we're done. If there are no tests (an empty suite) the # exception is re-raised. except Exception as exc: if self._tests: result.addError(self._tests[0], sys.exc_info()) for test in self._tests: result.addSkip(test, 'fixture failure') result.stop() else: raise return result
def run(self, result, debug=False): """Override TestSuite run to start suite-level fixtures. To avoid exception confusion, use a null Fixture when there are no fixtures. """ # If there are fixtures, nest in their context. fixtures = [fixture.GabbiFixture] intercept = None try: first_test = self._find_first_full_test() fixtures = first_test.fixtures host = first_test.host port = first_test.port prefix = first_test.prefix intercept = first_test.intercept # Unbind a passed in WSGI application. During the # metaclass building process intercept becomes bound. try: intercept = intercept.__func__ except AttributeError: pass except AttributeError: pass try: with fixture.nest([fix() for fix in fixtures]): if intercept: with fixture.InterceptFixture(host, port, intercept, prefix): result = super(GabbiSuite, self).run(result, debug) else: result = super(GabbiSuite, self).run(result, debug) except case.SkipTest as exc: for test in self._tests: result.addSkip(test, str(exc)) return result
def run(self, result, debug=False): """Override TestSuite run to start suite-level fixtures. To avoid exception confusion, use a null Fixture when there are no fixtures. """ fixtures, intercept, host, port, prefix = self._get_intercept() try: with fixture.nest([fix() for fix in fixtures]): if intercept: with interceptor.Urllib3Interceptor( intercept, host, port, prefix): result = super(GabbiSuite, self).run(result, debug) else: result = super(GabbiSuite, self).run(result, debug) except unittest.SkipTest as exc: for test in self._tests: result.addSkip(test, str(exc)) return result
def run(self, result, debug=False): """Override TestSuite run to start suite-level fixtures. To avoid exception confusion, use a null Fixture when there are no fixtures. """ # If there are fixtures, nest in their context. fixtures = [fixture.GabbiFixture] intercept = None try: first_test = self._find_first_full_test() fixtures = first_test.fixtures host = first_test.host port = first_test.port prefix = first_test.prefix intercept = first_test.intercept # Unbind a passed in WSGI application. During the # metaclass building process intercept becomes bound. try: intercept = intercept.__func__ except AttributeError: pass except AttributeError: pass try: with fixture.nest([fix() for fix in fixtures]): if intercept: with interceptor.Httplib2Interceptor( intercept, host, port, prefix): result = super(GabbiSuite, self).run(result, debug) else: result = super(GabbiSuite, self).run(result, debug) except case.SkipTest as exc: for test in self._tests: result.addSkip(test, str(exc))