~bzr/ubuntu/natty/python-testtools/bzr-ppa

« back to all changes in this revision

Viewing changes to pyunit3k/tests/test_testresult.py

  • Committer: Jonathan Lange
  • Date: 2008-07-23 01:39:20 UTC
  • mfrom: (6.2.5 result-tests)
  • Revision ID: jml@canonical.com-20080723013920-hz0fdus6fe12eqw9
Tests for pyunit3k's TestResult extensions.

 * Author: jml
 * Reviewer: spiv

Add tests for TestResult and MultiTestResult. As yet no tests for the base
functionality of TestResult.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (c) 2008 Jonathan M. Lange. See LICENSE for details.
 
2
 
 
3
"""Test TestResults and related things."""
 
4
 
 
5
__metaclass__ = type
 
6
 
 
7
import sys
 
8
 
 
9
from pyunit3k import ITestResult, MultiTestResult, TestCase, TestResult
 
10
from pyunit3k.tests.helpers import LoggingResult
 
11
 
 
12
 
 
13
class TestTestResult(TestCase):
 
14
    """Tests for `TestResult`."""
 
15
 
 
16
    def makeResult(self):
 
17
        """Make an arbitrary result for testing."""
 
18
        return TestResult()
 
19
 
 
20
    def test_done(self):
 
21
        # `TestResult` has a `done` method that, by default, does nothing.
 
22
        self.makeResult().done()
 
23
 
 
24
    def test_interface(self):
 
25
        # pyunit3k's `TestResult` implements `ITestResult`.
 
26
        self.assertTrue(
 
27
            ITestResult.providedBy(self.makeResult()),
 
28
            'ITestResult not provided by TestResult')
 
29
 
 
30
 
 
31
class TestMultiTestResult(TestCase):
 
32
    """Tests for `MultiTestResult`."""
 
33
 
 
34
    def setUp(self):
 
35
        self.result1 = LoggingResult([])
 
36
        self.result2 = LoggingResult([])
 
37
        self.multiResult = MultiTestResult(self.result1, self.result2)
 
38
 
 
39
    def assertResultLogsEqual(self, expectedEvents):
 
40
        """Assert that our test results have received the expected events."""
 
41
        self.assertEqual(expectedEvents, self.result1._events)
 
42
        self.assertEqual(expectedEvents, self.result2._events)
 
43
 
 
44
    def makeExceptionInfo(self, exceptionFactory, *args, **kwargs):
 
45
        try:
 
46
            raise exceptionFactory(*args, **kwargs)
 
47
        except:
 
48
            return sys.exc_info()
 
49
 
 
50
    def test_empty(self):
 
51
        # Initializing a `MultiTestResult` doesn't do anything to its
 
52
        # `TestResult`s.
 
53
        self.assertResultLogsEqual([])
 
54
 
 
55
    def test_startTest(self):
 
56
        # Calling `startTest` on a `MultiTestResult` calls `startTest` on all
 
57
        # its `TestResult`s.
 
58
        self.multiResult.startTest(self)
 
59
        self.assertResultLogsEqual([('startTest', self)])
 
60
 
 
61
    def test_stopTest(self):
 
62
        # Calling `stopTest` on a `MultiTestResult` calls `stopTest` on all
 
63
        # its `TestResult`s.
 
64
        self.multiResult.stopTest(self)
 
65
        self.assertResultLogsEqual([('stopTest', self)])
 
66
 
 
67
    def test_addSuccess(self):
 
68
        # Calling `addSuccess` on a `MultiTestResult` calls `addSuccess` on
 
69
        # all its `TestResult`s.
 
70
        self.multiResult.addSuccess(self)
 
71
        self.assertResultLogsEqual([('addSuccess', self)])
 
72
 
 
73
    def test_done(self):
 
74
        # Calling `done` on a `MultiTestResult` calls `done` on all its
 
75
        # `TestResult`s.
 
76
        self.multiResult.done()
 
77
        self.assertResultLogsEqual([('done')])
 
78
 
 
79
    def test_addFailure(self):
 
80
        # Calling `addFailure` on a `MultiTestResult` calls `addFailure` on
 
81
        # all its `TestResult`s.
 
82
        exc_info = self.makeExceptionInfo(AssertionError, 'failure')
 
83
        self.multiResult.addFailure(self, exc_info)
 
84
        self.assertResultLogsEqual([('addFailure', self, exc_info)])
 
85
 
 
86
    def test_addError(self):
 
87
        # Calling `addError` on a `MultiTestResult` calls `addError` on all
 
88
        # its `TestResult`s.
 
89
        exc_info = self.makeExceptionInfo(RuntimeError, 'error')
 
90
        self.multiResult.addError(self, exc_info)
 
91
        self.assertResultLogsEqual([('addError', self, exc_info)])
 
92
 
 
93
 
 
94
def test_suite():
 
95
    from unittest import TestLoader
 
96
    return TestLoader().loadTestsFromName(__name__)