def test__run_user_returns_result(self): case = self.make_case() def returns(): return 1 run = RunTest(case) run.result = ExtendedTestResult() self.assertEqual(1, run._run_user(returns)) self.assertEqual([], run.result._events)
def test__run_user_does_not_catch_keyboard(self): case = self.make_case() def raises(): raise KeyboardInterrupt("yo") run = RunTest(case, None) run.result = ExtendedTestResult() self.assertRaises(KeyboardInterrupt, run._run_user, raises) self.assertEqual([], run.result._events)
def test__run_user_does_not_catch_keyboard(self): case = self.make_case() def raises(): raise KeyboardInterrupt("yo") run = RunTest(case, None) run.result = ExtendedTestResult() self.assertThat(lambda: run._run_user(raises), Raises(MatchesException(KeyboardInterrupt))) self.assertEqual([], run.result._events)
def test__run_user_can_catch_Exception(self): case = self.make_case() e = Exception('Yo') def raises(): raise e log = [] run = RunTest(case, [(Exception, None)]) run.result = ExtendedTestResult() status = run._run_user(raises) self.assertEqual(run.exception_caught, status) self.assertEqual([], run.result._events) self.assertEqual([], log)
def test__run_user_uncaught_Exception_raised(self): case = self.make_case() e = KeyError('Yo') def raises(): raise e log = [] def log_exc(self, result, err): log.append((result, err)) run = RunTest(case, [(ValueError, log_exc)]) run.result = ExtendedTestResult() self.assertRaises(KeyError, run._run_user, raises) self.assertEqual([], run.result._events) self.assertEqual([], log)
def test__run_prepared_result_does_not_mask_keyboard(self): class Case(TestCase): def test(self): raise KeyboardInterrupt("go") case = Case('test') run = RunTest(case) run.result = ExtendedTestResult() self.assertThat(lambda: run._run_prepared_result(run.result), Raises(MatchesException(KeyboardInterrupt))) self.assertEqual( [('startTest', case), ('stopTest', case)], run.result._events) # tearDown is still run though! self.assertEqual(True, getattr(case, '_TestCase__teardown_called'))
def test__run_prepared_result_uncaught_Exception_raised(self): e = KeyError('Yo') class Case(TestCase): def test(self): raise e case = Case('test') log = [] def log_exc(self, result, err): log.append((result, err)) run = RunTest(case, [(ValueError, log_exc)]) run.result = ExtendedTestResult() self.assertThat(lambda: run._run_prepared_result(run.result), Raises(MatchesException(KeyError))) self.assertEqual( [('startTest', case), ('stopTest', case)], run.result._events) self.assertEqual([], log)
def test__run_prepared_result_does_not_mask_keyboard(self): tearDownRuns = [] class Case(TestCase): def test(self): raise KeyboardInterrupt("go") def _run_teardown(self, result): tearDownRuns.append(self) return super(Case, self)._run_teardown(result) case = Case('test') run = RunTest(case) run.result = ExtendedTestResult() self.assertThat(lambda: run._run_prepared_result(run.result), Raises(MatchesException(KeyboardInterrupt))) self.assertEqual( [('startTest', case), ('stopTest', case)], run.result._events) # tearDown is still run though! self.assertThat(tearDownRuns, HasLength(1))
def test__run_user_calls_onException(self): case = self.make_case() log = [] def handler(exc_info): log.append("got it") self.assertEqual(3, len(exc_info)) self.assertIsInstance(exc_info[1], KeyError) self.assertIs(KeyError, exc_info[0]) case.addOnException(handler) e = KeyError('Yo') def raises(): raise e run = RunTest(case, [(KeyError, None)]) run.result = ExtendedTestResult() status = run._run_user(raises) self.assertEqual(run.exception_caught, status) self.assertEqual([], run.result._events) self.assertEqual(["got it"], log)
def test__run_user_uncaught_Exception_from_exception_handler_raised(self): case = self.make_case() def broken_handler(exc_info): # ValueError because thats what we know how to catch - and must # not. raise ValueError('boo') case.addOnException(broken_handler) e = KeyError('Yo') def raises(): raise e log = [] def log_exc(self, result, err): log.append((result, err)) run = RunTest(case, [(ValueError, log_exc)]) run.result = ExtendedTestResult() self.assertRaises(ValueError, run._run_user, raises) self.assertEqual([], run.result._events) self.assertEqual([], log)
def test__run_prepared_result_uncaught_Exception_triggers_error(self): # https://bugs.launchpad.net/testtools/+bug/1364188 # When something isn't handled, the test that was # executing has errored, one way or another. e = SystemExit(0) class Case(TestCase): def test(self): raise e case = Case('test') log = [] def log_exc(self, result, err): log.append((result, err)) run = RunTest(case, [], log_exc) run.result = ExtendedTestResult() self.assertThat(lambda: run._run_prepared_result(run.result), Raises(MatchesException(SystemExit))) self.assertEqual( [('startTest', case), ('stopTest', case)], run.result._events) self.assertEqual([(run.result, e)], log)