Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions doc/for-framework-folk.rst
Original file line number Diff line number Diff line change
Expand Up @@ -361,9 +361,9 @@ meet the testtools ``TestResult`` API.
Test Doubles
------------

In testtools.testresult.doubles there are three test doubles that testtools
uses for its own testing: ``Python26TestResult``, ``Python27TestResult``,
``ExtendedTestResult``. These TestResult objects implement a single variation of
In testtools.testresult.doubles there are several test doubles that testtools
uses for its own testing: ``Python3TestResult``, and ``ExtendedTestResult``.
These TestResult objects implement a single variation of
the TestResult API each, and log activity to a list ``self._events``. These are
made available for the convenience of people writing their own extensions.

Expand Down
58 changes: 22 additions & 36 deletions testtools/testresult/doubles.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@

__all__ = [
"ExtendedTestResult",
"Python26TestResult",
"Python27TestResult",
"Python3TestResult",
"StreamResult",
"TwistedTestResult",
]
Expand All @@ -24,56 +23,30 @@ def __init__(self, event_log=None):
self._events = event_log


class Python26TestResult(LoggingBase):
"""A precisely python 2.6 like test result, that logs."""
class Python3TestResult(LoggingBase):
"""A precisely python 3 like test result, that logs."""

def __init__(self, event_log=None):
super().__init__(event_log=event_log)
self.shouldStop = False
self._was_successful = True
self.testsRun = 0
self.failfast = False

def addError(self, test, err):
self._was_successful = False
self._events.append(("addError", test, err))
if self.failfast:
self.stop()

def addFailure(self, test, err):
self._was_successful = False
self._events.append(("addFailure", test, err))

def addSuccess(self, test):
self._events.append(("addSuccess", test))

def startTest(self, test):
self._events.append(("startTest", test))
self.testsRun += 1

def stop(self):
self.shouldStop = True

def stopTest(self, test):
self._events.append(("stopTest", test))

def wasSuccessful(self):
return self._was_successful


class Python27TestResult(Python26TestResult):
"""A precisely python 2.7 like test result, that logs."""

def __init__(self, event_log=None):
super().__init__(event_log)
self.failfast = False

def addError(self, test, err):
super().addError(test, err)
if self.failfast:
self.stop()

def addFailure(self, test, err):
super().addFailure(test, err)
if self.failfast:
self.stop()
def addSuccess(self, test):
self._events.append(("addSuccess", test))

def addExpectedFailure(self, test, err):
self._events.append(("addExpectedFailure", test, err))
Expand All @@ -86,14 +59,27 @@ def addUnexpectedSuccess(self, test):
if self.failfast:
self.stop()

def startTest(self, test):
self._events.append(("startTest", test))
self.testsRun += 1

def startTestRun(self):
self._events.append(("startTestRun",))

def stop(self):
self.shouldStop = True

def stopTest(self, test):
self._events.append(("stopTest", test))

def stopTestRun(self):
self._events.append(("stopTestRun",))

def wasSuccessful(self):
return self._was_successful


class ExtendedTestResult(Python27TestResult):
class ExtendedTestResult(Python3TestResult):
"""A test result like the proposed extended unittest result API."""

def __init__(self, event_log=None):
Expand Down
49 changes: 24 additions & 25 deletions testtools/tests/test_testcase.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,7 @@
)
from testtools.testresult.doubles import (
ExtendedTestResult,
Python26TestResult,
Python27TestResult,
Python3TestResult,
)
from testtools.tests.helpers import (
AsText,
Expand Down Expand Up @@ -1217,9 +1216,9 @@ def test(self):
case = Case("test")
return case

def test_raising__UnexpectedSuccess_py27(self):
def test_raising__UnexpectedSuccess_py3(self):
case = self.make_unexpected_case()
result = Python27TestResult()
result = Python3TestResult()
case.run(result)
case = result._events[0][1]
self.assertEqual(
Expand Down Expand Up @@ -1720,7 +1719,7 @@ def test_that_raises_skipException(self):
self.skipTest("skipping this test")

events = []
result = Python27TestResult(events)
result = Python3TestResult(events)
test = SkippingTest("test_that_raises_skipException")
test.run(result)
case = result._events[0][1]
Expand All @@ -1741,7 +1740,7 @@ def test_that_raises_skipException(self):
self.skipTest("skipping this test")

events = []
result = Python27TestResult(events)
result = Python3TestResult(events)
test = SkippingTest("test_that_raises_skipException")
test.run(result)
case = result._events[0][1]
Expand All @@ -1764,21 +1763,21 @@ def test_that_raises_skipException(self):
pass

events = []
result = Python26TestResult(events)
result = Python3TestResult(events)
test = SkippingTest("test_that_raises_skipException")
test.run(result)
self.assertEqual("addSuccess", events[1][0])
self.assertEqual("addSkip", events[1][0])

def test_skip_with_old_result_object_calls_addError(self):
class SkippingTest(TestCase):
def test_that_raises_skipException(self):
raise self.skipException("skipping this test")

events = []
result = Python26TestResult(events)
result = Python3TestResult(events)
test = SkippingTest("test_that_raises_skipException")
test.run(result)
self.assertEqual("addSuccess", events[1][0])
self.assertEqual("addSkip", events[1][0])

def test_skip_decorator(self):
class SkippingTest(TestCase):
Expand All @@ -1787,10 +1786,10 @@ def test_that_is_decorated_with_skip(self):
self.fail()

events = []
result = Python26TestResult(events)
result = Python3TestResult(events)
test = SkippingTest("test_that_is_decorated_with_skip")
test.run(result)
self.assertEqual("addSuccess", events[1][0])
self.assertEqual("addSkip", events[1][0])

def test_skipIf_decorator(self):
class SkippingTest(TestCase):
Expand All @@ -1799,10 +1798,10 @@ def test_that_is_decorated_with_skipIf(self):
self.fail()

events = []
result = Python26TestResult(events)
result = Python3TestResult(events)
test = SkippingTest("test_that_is_decorated_with_skipIf")
test.run(result)
self.assertEqual("addSuccess", events[1][0])
self.assertEqual("addSkip", events[1][0])

def test_skipUnless_decorator(self):
class SkippingTest(TestCase):
Expand All @@ -1811,10 +1810,10 @@ def test_that_is_decorated_with_skipUnless(self):
self.fail()

events = []
result = Python26TestResult(events)
result = Python3TestResult(events)
test = SkippingTest("test_that_is_decorated_with_skipUnless")
test.run(result)
self.assertEqual("addSuccess", events[1][0])
self.assertEqual("addSkip", events[1][0])

def test_skip_decorator_shared(self):
def shared(testcase):
Expand All @@ -1827,13 +1826,13 @@ class NotSkippingTest(TestCase):
test_no_skip = skipIf(False, "skipping this test")(shared)

events = []
result = Python26TestResult(events)
result = Python3TestResult(events)
test = SkippingTest("test_skip")
test.run(result)
self.assertEqual("addSuccess", events[1][0])
self.assertEqual("addSkip", events[1][0])

events2 = []
result2 = Python26TestResult(events2)
result2 = Python3TestResult(events2)
test2 = NotSkippingTest("test_no_skip")
test2.run(result2)
self.assertEqual("addFailure", events2[1][0])
Expand All @@ -1845,13 +1844,13 @@ def test_that_is_decorated_with_skip(self):
self.fail()

events = []
result = Python26TestResult(events)
result = Python3TestResult(events)
try:
test = SkippingTest("test_that_is_decorated_with_skip")
except unittest.SkipTest:
self.fail("SkipTest raised")
test.run(result)
self.assertEqual("addSuccess", events[1][0])
self.assertEqual("addSkip", events[1][0])

def test_skipIf_class_decorator(self):
@skipIf(True, "skipping this testcase")
Expand All @@ -1860,13 +1859,13 @@ def test_that_is_decorated_with_skipIf(self):
self.fail()

events = []
result = Python26TestResult(events)
result = Python3TestResult(events)
try:
test = SkippingTest("test_that_is_decorated_with_skipIf")
except unittest.SkipTest:
self.fail("SkipTest raised")
test.run(result)
self.assertEqual("addSuccess", events[1][0])
self.assertEqual("addSkip", events[1][0])

def test_skipUnless_class_decorator(self):
@skipUnless(False, "skipping this testcase")
Expand All @@ -1875,13 +1874,13 @@ def test_that_is_decorated_with_skipUnless(self):
self.fail()

events = []
result = Python26TestResult(events)
result = Python3TestResult(events)
try:
test = SkippingTest("test_that_is_decorated_with_skipUnless")
except unittest.SkipTest:
self.fail("SkipTest raised")
test.run(result)
self.assertEqual("addSuccess", events[1][0])
self.assertEqual("addSkip", events[1][0])

def check_skip_decorator_does_not_run_setup(self, decorator, reason):
class SkippingTest(TestCase):
Expand Down
Loading