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

« back to all changes in this revision

Viewing changes to testtools/tests/test_matchers.py

  • Committer: Robert Collins
  • Date: 2009-12-15 23:13:38 UTC
  • mfrom: (16.11.2 upstream)
  • Revision ID: robertc@robertcollins.net-20091215231338-en4foxftyfaaqgn0
* New upstream release.
* Include the manual in the package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
    TestCase,
10
10
    )
11
11
from testtools.matchers import (
 
12
    Equals,
12
13
    DocTestMatches,
 
14
    MatchesAny,
13
15
    )
14
16
 
15
17
 
16
 
class TestDocTestMatchesInterface(TestCase):
 
18
class TestMatchersInterface:
17
19
 
18
 
    def test_matches_matches(self):
19
 
        matcher = DocTestMatches("Ran 1 test in ...s", doctest.ELLIPSIS)
20
 
        matches = ["Ran 1 test in 0.000s", "Ran 1 test in 1.234s"]
21
 
        mismatches = ["Ran 1 tests in 0.000s", "Ran 2 test in 0.000s"]
 
20
    def test_matches_match(self):
 
21
        matcher = self.matches_matcher
 
22
        matches = self.matches_matches
 
23
        mismatches = self.matches_mismatches
22
24
        for candidate in matches:
23
 
            self.assertTrue(matcher.matches(candidate))
 
25
            self.assertEqual(None, matcher.match(candidate))
24
26
        for candidate in mismatches:
25
 
            self.assertFalse(matcher.matches(candidate))
 
27
            mismatch = matcher.match(candidate)
 
28
            self.assertNotEqual(None, mismatch)
 
29
            self.assertNotEqual(None, getattr(mismatch, 'describe', None))
26
30
 
27
31
    def test__str__(self):
28
32
        # [(expected, object to __str__)].
29
 
        examples = [("DocTestMatches('Ran 1 test in ...s\\n')",
30
 
            DocTestMatches("Ran 1 test in ...s")),
31
 
            ("DocTestMatches('foo\\n', flags=8)", DocTestMatches("foo", flags=8)),
32
 
            ]
 
33
        examples = self.str_examples
33
34
        for expected, matcher in examples:
34
35
            self.assertThat(matcher, DocTestMatches(expected))
35
36
 
36
37
    def test_describe_difference(self):
37
38
        # [(expected, matchee, matcher), ...]
38
 
        examples = [('Expected:\n    Ran 1 test in ...s\nGot:\n'
39
 
            '    Ran 1 test in 0.123s\n', "Ran 1 test in 0.123s",
40
 
            DocTestMatches("Ran 1 test in ...s", doctest.ELLIPSIS))]
 
39
        examples = self.describe_examples
41
40
        for difference, matchee, matcher in examples:
42
 
            self.assertEqual(difference, matcher.describe_difference(matchee))
 
41
            mismatch = matcher.match(matchee)
 
42
            self.assertEqual(difference, mismatch.describe())
 
43
 
 
44
 
 
45
class TestDocTestMatchesInterface(TestCase, TestMatchersInterface):
 
46
 
 
47
    matches_matcher = DocTestMatches("Ran 1 test in ...s", doctest.ELLIPSIS)
 
48
    matches_matches = ["Ran 1 test in 0.000s", "Ran 1 test in 1.234s"]
 
49
    matches_mismatches = ["Ran 1 tests in 0.000s", "Ran 2 test in 0.000s"]
 
50
 
 
51
    str_examples = [("DocTestMatches('Ran 1 test in ...s\\n')",
 
52
        DocTestMatches("Ran 1 test in ...s")),
 
53
        ("DocTestMatches('foo\\n', flags=8)", DocTestMatches("foo", flags=8)),
 
54
        ]
 
55
 
 
56
    describe_examples = [('Expected:\n    Ran 1 tests in ...s\nGot:\n'
 
57
        '    Ran 1 test in 0.123s\n', "Ran 1 test in 0.123s",
 
58
        DocTestMatches("Ran 1 tests in ...s", doctest.ELLIPSIS))]
43
59
 
44
60
 
45
61
class TestDocTestMatchesSpecific(TestCase):
54
70
        self.assertEqual(doctest.ELLIPSIS, matcher.flags)
55
71
 
56
72
 
 
73
class TestEqualsInterface(TestCase, TestMatchersInterface):
 
74
 
 
75
    matches_matcher = Equals(1)
 
76
    matches_matches = [1]
 
77
    matches_mismatches = [2]
 
78
 
 
79
    str_examples = [("Equals(1)", Equals(1)), ("Equals('1')", Equals('1'))]
 
80
 
 
81
    describe_examples = [("1 != 2", 2, Equals(1))]
 
82
 
 
83
 
 
84
class TestMatchersAnyInterface(TestCase, TestMatchersInterface):
 
85
 
 
86
    matches_matcher = MatchesAny(DocTestMatches("1"), DocTestMatches("2"))
 
87
    matches_matches = ["1", "2"]
 
88
    matches_mismatches = ["3"]
 
89
 
 
90
    str_examples = [(
 
91
        "MatchesAny(DocTestMatches('1\\n'), DocTestMatches('2\\n'))",
 
92
        MatchesAny(DocTestMatches("1"), DocTestMatches("2"))),
 
93
        ]
 
94
 
 
95
    describe_examples = [("""Differences: [
 
96
Expected:
 
97
    1
 
98
Got:
 
99
    3
 
100
 
 
101
Expected:
 
102
    2
 
103
Got:
 
104
    3
 
105
 
 
106
]
 
107
""",
 
108
        "3", MatchesAny(DocTestMatches("1"), DocTestMatches("2")))]
 
109
 
 
110
 
57
111
def test_suite():
58
112
    from unittest import TestLoader
59
113
    return TestLoader().loadTestsFromName(__name__)