~jfb-tempo-consulting/unifield-wm/sync-env-py3

« back to all changes in this revision

Viewing changes to unittest27/test/test_assertions.py

  • Committer: Samus CTO
  • Date: 2012-09-05 10:40:27 UTC
  • Revision ID: cto@openerp.com-20120905104027-geoynct7122bnoig
[IMPORT] imported unittest from Python 2.7

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import datetime
 
2
 
 
3
import unittest
 
4
 
 
5
 
 
6
class Test_Assertions(unittest.TestCase):
 
7
    def test_AlmostEqual(self):
 
8
        self.assertAlmostEqual(1.00000001, 1.0)
 
9
        self.assertNotAlmostEqual(1.0000001, 1.0)
 
10
        self.assertRaises(self.failureException,
 
11
                          self.assertAlmostEqual, 1.0000001, 1.0)
 
12
        self.assertRaises(self.failureException,
 
13
                          self.assertNotAlmostEqual, 1.00000001, 1.0)
 
14
 
 
15
        self.assertAlmostEqual(1.1, 1.0, places=0)
 
16
        self.assertRaises(self.failureException,
 
17
                          self.assertAlmostEqual, 1.1, 1.0, places=1)
 
18
 
 
19
        self.assertAlmostEqual(0, .1+.1j, places=0)
 
20
        self.assertNotAlmostEqual(0, .1+.1j, places=1)
 
21
        self.assertRaises(self.failureException,
 
22
                          self.assertAlmostEqual, 0, .1+.1j, places=1)
 
23
        self.assertRaises(self.failureException,
 
24
                          self.assertNotAlmostEqual, 0, .1+.1j, places=0)
 
25
 
 
26
        self.assertAlmostEqual(float('inf'), float('inf'))
 
27
        self.assertRaises(self.failureException, self.assertNotAlmostEqual,
 
28
                          float('inf'), float('inf'))
 
29
 
 
30
    def test_AmostEqualWithDelta(self):
 
31
        self.assertAlmostEqual(1.1, 1.0, delta=0.5)
 
32
        self.assertAlmostEqual(1.0, 1.1, delta=0.5)
 
33
        self.assertNotAlmostEqual(1.1, 1.0, delta=0.05)
 
34
        self.assertNotAlmostEqual(1.0, 1.1, delta=0.05)
 
35
 
 
36
        self.assertRaises(self.failureException, self.assertAlmostEqual,
 
37
                          1.1, 1.0, delta=0.05)
 
38
        self.assertRaises(self.failureException, self.assertNotAlmostEqual,
 
39
                          1.1, 1.0, delta=0.5)
 
40
 
 
41
        self.assertRaises(TypeError, self.assertAlmostEqual,
 
42
                          1.1, 1.0, places=2, delta=2)
 
43
        self.assertRaises(TypeError, self.assertNotAlmostEqual,
 
44
                          1.1, 1.0, places=2, delta=2)
 
45
 
 
46
        first = datetime.datetime.now()
 
47
        second = first + datetime.timedelta(seconds=10)
 
48
        self.assertAlmostEqual(first, second,
 
49
                               delta=datetime.timedelta(seconds=20))
 
50
        self.assertNotAlmostEqual(first, second,
 
51
                                  delta=datetime.timedelta(seconds=5))
 
52
 
 
53
    def test_assertRaises(self):
 
54
        def _raise(e):
 
55
            raise e
 
56
        self.assertRaises(KeyError, _raise, KeyError)
 
57
        self.assertRaises(KeyError, _raise, KeyError("key"))
 
58
        try:
 
59
            self.assertRaises(KeyError, lambda: None)
 
60
        except self.failureException as e:
 
61
            self.assertIn("KeyError not raised", e.args)
 
62
        else:
 
63
            self.fail("assertRaises() didn't fail")
 
64
        try:
 
65
            self.assertRaises(KeyError, _raise, ValueError)
 
66
        except ValueError:
 
67
            pass
 
68
        else:
 
69
            self.fail("assertRaises() didn't let exception pass through")
 
70
        with self.assertRaises(KeyError) as cm:
 
71
            try:
 
72
                raise KeyError
 
73
            except Exception, e:
 
74
                raise
 
75
        self.assertIs(cm.exception, e)
 
76
 
 
77
        with self.assertRaises(KeyError):
 
78
            raise KeyError("key")
 
79
        try:
 
80
            with self.assertRaises(KeyError):
 
81
                pass
 
82
        except self.failureException as e:
 
83
            self.assertIn("KeyError not raised", e.args)
 
84
        else:
 
85
            self.fail("assertRaises() didn't fail")
 
86
        try:
 
87
            with self.assertRaises(KeyError):
 
88
                raise ValueError
 
89
        except ValueError:
 
90
            pass
 
91
        else:
 
92
            self.fail("assertRaises() didn't let exception pass through")
 
93
 
 
94
    def testAssertNotRegexpMatches(self):
 
95
        self.assertNotRegexpMatches('Ala ma kota', r'r+')
 
96
        try:
 
97
            self.assertNotRegexpMatches('Ala ma kota', r'k.t', 'Message')
 
98
        except self.failureException, e:
 
99
            self.assertIn("'kot'", e.args[0])
 
100
            self.assertIn('Message', e.args[0])
 
101
        else:
 
102
            self.fail('assertNotRegexpMatches should have failed.')
 
103
 
 
104
 
 
105
class TestLongMessage(unittest.TestCase):
 
106
    """Test that the individual asserts honour longMessage.
 
107
    This actually tests all the message behaviour for
 
108
    asserts that use longMessage."""
 
109
 
 
110
    def setUp(self):
 
111
        class TestableTestFalse(unittest.TestCase):
 
112
            longMessage = False
 
113
            failureException = self.failureException
 
114
 
 
115
            def testTest(self):
 
116
                pass
 
117
 
 
118
        class TestableTestTrue(unittest.TestCase):
 
119
            longMessage = True
 
120
            failureException = self.failureException
 
121
 
 
122
            def testTest(self):
 
123
                pass
 
124
 
 
125
        self.testableTrue = TestableTestTrue('testTest')
 
126
        self.testableFalse = TestableTestFalse('testTest')
 
127
 
 
128
    def testDefault(self):
 
129
        self.assertFalse(unittest.TestCase.longMessage)
 
130
 
 
131
    def test_formatMsg(self):
 
132
        self.assertEqual(self.testableFalse._formatMessage(None, "foo"), "foo")
 
133
        self.assertEqual(self.testableFalse._formatMessage("foo", "bar"), "foo")
 
134
 
 
135
        self.assertEqual(self.testableTrue._formatMessage(None, "foo"), "foo")
 
136
        self.assertEqual(self.testableTrue._formatMessage("foo", "bar"), "bar : foo")
 
137
 
 
138
        # This blows up if _formatMessage uses string concatenation
 
139
        self.testableTrue._formatMessage(object(), 'foo')
 
140
 
 
141
    def test_formatMessage_unicode_error(self):
 
142
        one = ''.join(chr(i) for i in range(255))
 
143
        # this used to cause a UnicodeDecodeError constructing msg
 
144
        self.testableTrue._formatMessage(one, u'\uFFFD')
 
145
 
 
146
    def assertMessages(self, methodName, args, errors):
 
147
        def getMethod(i):
 
148
            useTestableFalse  = i < 2
 
149
            if useTestableFalse:
 
150
                test = self.testableFalse
 
151
            else:
 
152
                test = self.testableTrue
 
153
            return getattr(test, methodName)
 
154
 
 
155
        for i, expected_regexp in enumerate(errors):
 
156
            testMethod = getMethod(i)
 
157
            kwargs = {}
 
158
            withMsg = i % 2
 
159
            if withMsg:
 
160
                kwargs = {"msg": "oops"}
 
161
 
 
162
            with self.assertRaisesRegexp(self.failureException,
 
163
                                         expected_regexp=expected_regexp):
 
164
                testMethod(*args, **kwargs)
 
165
 
 
166
    def testAssertTrue(self):
 
167
        self.assertMessages('assertTrue', (False,),
 
168
                            ["^False is not true$", "^oops$", "^False is not true$",
 
169
                             "^False is not true : oops$"])
 
170
 
 
171
    def testAssertFalse(self):
 
172
        self.assertMessages('assertFalse', (True,),
 
173
                            ["^True is not false$", "^oops$", "^True is not false$",
 
174
                             "^True is not false : oops$"])
 
175
 
 
176
    def testNotEqual(self):
 
177
        self.assertMessages('assertNotEqual', (1, 1),
 
178
                            ["^1 == 1$", "^oops$", "^1 == 1$",
 
179
                             "^1 == 1 : oops$"])
 
180
 
 
181
    def testAlmostEqual(self):
 
182
        self.assertMessages('assertAlmostEqual', (1, 2),
 
183
                            ["^1 != 2 within 7 places$", "^oops$",
 
184
                             "^1 != 2 within 7 places$", "^1 != 2 within 7 places : oops$"])
 
185
 
 
186
    def testNotAlmostEqual(self):
 
187
        self.assertMessages('assertNotAlmostEqual', (1, 1),
 
188
                            ["^1 == 1 within 7 places$", "^oops$",
 
189
                             "^1 == 1 within 7 places$", "^1 == 1 within 7 places : oops$"])
 
190
 
 
191
    def test_baseAssertEqual(self):
 
192
        self.assertMessages('_baseAssertEqual', (1, 2),
 
193
                            ["^1 != 2$", "^oops$", "^1 != 2$", "^1 != 2 : oops$"])
 
194
 
 
195
    def testAssertSequenceEqual(self):
 
196
        # Error messages are multiline so not testing on full message
 
197
        # assertTupleEqual and assertListEqual delegate to this method
 
198
        self.assertMessages('assertSequenceEqual', ([], [None]),
 
199
                            ["\+ \[None\]$", "^oops$", r"\+ \[None\]$",
 
200
                             r"\+ \[None\] : oops$"])
 
201
 
 
202
    def testAssertSetEqual(self):
 
203
        self.assertMessages('assertSetEqual', (set(), set([None])),
 
204
                            ["None$", "^oops$", "None$",
 
205
                             "None : oops$"])
 
206
 
 
207
    def testAssertIn(self):
 
208
        self.assertMessages('assertIn', (None, []),
 
209
                            ['^None not found in \[\]$', "^oops$",
 
210
                             '^None not found in \[\]$',
 
211
                             '^None not found in \[\] : oops$'])
 
212
 
 
213
    def testAssertNotIn(self):
 
214
        self.assertMessages('assertNotIn', (None, [None]),
 
215
                            ['^None unexpectedly found in \[None\]$', "^oops$",
 
216
                             '^None unexpectedly found in \[None\]$',
 
217
                             '^None unexpectedly found in \[None\] : oops$'])
 
218
 
 
219
    def testAssertDictEqual(self):
 
220
        self.assertMessages('assertDictEqual', ({}, {'key': 'value'}),
 
221
                            [r"\+ \{'key': 'value'\}$", "^oops$",
 
222
                             "\+ \{'key': 'value'\}$",
 
223
                             "\+ \{'key': 'value'\} : oops$"])
 
224
 
 
225
    def testAssertDictContainsSubset(self):
 
226
        self.assertMessages('assertDictContainsSubset', ({'key': 'value'}, {}),
 
227
                            ["^Missing: 'key'$", "^oops$",
 
228
                             "^Missing: 'key'$",
 
229
                             "^Missing: 'key' : oops$"])
 
230
 
 
231
    def testAssertMultiLineEqual(self):
 
232
        self.assertMessages('assertMultiLineEqual', ("", "foo"),
 
233
                            [r"\+ foo$", "^oops$",
 
234
                             r"\+ foo$",
 
235
                             r"\+ foo : oops$"])
 
236
 
 
237
    def testAssertLess(self):
 
238
        self.assertMessages('assertLess', (2, 1),
 
239
                            ["^2 not less than 1$", "^oops$",
 
240
                             "^2 not less than 1$", "^2 not less than 1 : oops$"])
 
241
 
 
242
    def testAssertLessEqual(self):
 
243
        self.assertMessages('assertLessEqual', (2, 1),
 
244
                            ["^2 not less than or equal to 1$", "^oops$",
 
245
                             "^2 not less than or equal to 1$",
 
246
                             "^2 not less than or equal to 1 : oops$"])
 
247
 
 
248
    def testAssertGreater(self):
 
249
        self.assertMessages('assertGreater', (1, 2),
 
250
                            ["^1 not greater than 2$", "^oops$",
 
251
                             "^1 not greater than 2$",
 
252
                             "^1 not greater than 2 : oops$"])
 
253
 
 
254
    def testAssertGreaterEqual(self):
 
255
        self.assertMessages('assertGreaterEqual', (1, 2),
 
256
                            ["^1 not greater than or equal to 2$", "^oops$",
 
257
                             "^1 not greater than or equal to 2$",
 
258
                             "^1 not greater than or equal to 2 : oops$"])
 
259
 
 
260
    def testAssertIsNone(self):
 
261
        self.assertMessages('assertIsNone', ('not None',),
 
262
                            ["^'not None' is not None$", "^oops$",
 
263
                             "^'not None' is not None$",
 
264
                             "^'not None' is not None : oops$"])
 
265
 
 
266
    def testAssertIsNotNone(self):
 
267
        self.assertMessages('assertIsNotNone', (None,),
 
268
                            ["^unexpectedly None$", "^oops$",
 
269
                             "^unexpectedly None$",
 
270
                             "^unexpectedly None : oops$"])
 
271
 
 
272
    def testAssertIs(self):
 
273
        self.assertMessages('assertIs', (None, 'foo'),
 
274
                            ["^None is not 'foo'$", "^oops$",
 
275
                             "^None is not 'foo'$",
 
276
                             "^None is not 'foo' : oops$"])
 
277
 
 
278
    def testAssertIsNot(self):
 
279
        self.assertMessages('assertIsNot', (None, None),
 
280
                            ["^unexpectedly identical: None$", "^oops$",
 
281
                             "^unexpectedly identical: None$",
 
282
                             "^unexpectedly identical: None : oops$"])
 
283
 
 
284
 
 
285
if __name__ == '__main__':
 
286
    unittest.main()