| Left: | ||
| Right: |
| OLD | NEW |
|---|---|
| 1 """Test script for unittest. | 1 """Test script for unittest. |
| 2 | 2 |
| 3 By Collin Winter <collinw at gmail.com> | 3 By Collin Winter <collinw at gmail.com> |
| 4 | 4 |
| 5 Still need testing: | 5 Still need testing: |
| 6 TestCase.{assert,fail}* methods (some are tested implicitly) | 6 TestCase.{assert,fail}* methods (some are tested implicitly) |
| 7 """ | 7 """ |
| 8 | 8 |
| 9 import re | |
| 9 from test import test_support | 10 from test import test_support |
| 10 import unittest | 11 import unittest |
| 11 from unittest import TestCase | 12 from unittest import TestCase |
| 12 import types | 13 import types |
| 13 | 14 |
| 14 ### Support code | 15 ### Support code |
| 15 ################################################################ | 16 ################################################################ |
| 16 | 17 |
| 17 class LoggingResult(unittest.TestResult): | 18 class LoggingResult(unittest.TestResult): |
| 18 def __init__(self, log): | 19 def __init__(self, log): |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 63 def test_ne(self): | 64 def test_ne(self): |
| 64 for obj_1, obj_2 in self.ne_pairs: | 65 for obj_1, obj_2 in self.ne_pairs: |
| 65 self.failIfEqual(obj_1, obj_2) | 66 self.failIfEqual(obj_1, obj_2) |
| 66 self.failIfEqual(obj_2, obj_1) | 67 self.failIfEqual(obj_2, obj_1) |
| 67 | 68 |
| 68 class TestHashing(object): | 69 class TestHashing(object): |
| 69 # Check for a valid __hash__ implementation | 70 # Check for a valid __hash__ implementation |
| 70 def test_hash(self): | 71 def test_hash(self): |
| 71 for obj_1, obj_2 in self.eq_pairs: | 72 for obj_1, obj_2 in self.eq_pairs: |
| 72 try: | 73 try: |
| 73 assert hash(obj_1) == hash(obj_2) | 74 if not hash(obj_1) == hash(obj_2): |
| 75 self.fail("%s and %s do not hash equal" % (obj_1, obj_2)) | |
|
GvR
2009/03/31 15:01:06
maybe better %r and %r ?
gregory.p.smith
2009/03/31 16:37:02
Done.
| |
| 74 except KeyboardInterrupt: | 76 except KeyboardInterrupt: |
| 75 raise | 77 raise |
| 76 except AssertionError: | |
| 77 self.fail("%s and %s do not hash equal" % (obj_1, obj_2)) | |
| 78 except Exception, e: | 78 except Exception, e: |
| 79 self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e)) | 79 self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e)) |
| 80 | 80 |
| 81 for obj_1, obj_2 in self.ne_pairs: | 81 for obj_1, obj_2 in self.ne_pairs: |
| 82 try: | 82 try: |
| 83 assert hash(obj_1) != hash(obj_2) | 83 if hash(obj_1) == hash(obj_2): |
| 84 self.fail("%s and %s hash equal, but shouldn't" % | |
|
GvR
2009/03/31 15:01:06
ditto?
gregory.p.smith
2009/03/31 16:37:02
Done.
| |
| 85 (obj_1, obj_2)) | |
| 84 except KeyboardInterrupt: | 86 except KeyboardInterrupt: |
| 85 raise | 87 raise |
| 86 except AssertionError: | |
| 87 self.fail("%s and %s hash equal, but shouldn't" % (obj_1, obj_2) ) | |
| 88 except Exception, e: | 88 except Exception, e: |
| 89 self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e)) | 89 self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e)) |
| 90 | 90 |
| 91 | 91 |
| 92 # List subclass we can add attributes to. | 92 # List subclass we can add attributes to. |
| 93 class MyClassSuite(list): | 93 class MyClassSuite(list): |
| 94 | 94 |
| 95 def __init__(self, tests, klass): | 95 def __init__(self, tests, klass): |
| 96 super(MyClassSuite, self).__init__(tests) | 96 super(MyClassSuite, self).__init__(tests) |
| 97 | 97 |
| (...skipping 2131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2229 # Because of the vague nature of the docs, I'm not going to lock this | 2229 # Because of the vague nature of the docs, I'm not going to lock this |
| 2230 # test down too much. Really all that can be asserted is that the id() | 2230 # test down too much. Really all that can be asserted is that the id() |
| 2231 # will be a string (either 8-byte or unicode -- again, because the docs | 2231 # will be a string (either 8-byte or unicode -- again, because the docs |
| 2232 # just say "string") | 2232 # just say "string") |
| 2233 def test_id(self): | 2233 def test_id(self): |
| 2234 class Foo(unittest.TestCase): | 2234 class Foo(unittest.TestCase): |
| 2235 def runTest(self): | 2235 def runTest(self): |
| 2236 pass | 2236 pass |
| 2237 | 2237 |
| 2238 self.failUnless(isinstance(Foo().id(), basestring)) | 2238 self.failUnless(isinstance(Foo().id(), basestring)) |
| 2239 | |
| 2240 # "Returns a one-line description of the test, or None if no description | |
| 2241 # has been provided. The default implementation of this method returns | |
| 2242 # the first line of the test method's docstring, if available, or None." | |
| 2243 def test_shortDescription__no_docstring(self): | |
| 2244 class Foo(unittest.TestCase): | |
| 2245 def runTest(self): | |
| 2246 pass | |
| 2247 | |
| 2248 self.assertEqual(Foo().shortDescription(), None) | |
| 2249 | |
| 2250 # "Returns a one-line description of the test, or None if no description | |
| 2251 # has been provided. The default implementation of this method returns | |
| 2252 # the first line of the test method's docstring, if available, or None." | |
| 2253 def test_shortDescription__singleline_docstring(self): | |
| 2254 class Foo(unittest.TestCase): | |
| 2255 def runTest(self): | |
| 2256 "this tests foo" | |
| 2257 pass | |
| 2258 | |
| 2259 self.assertEqual(Foo().shortDescription(), "this tests foo") | |
| 2260 | |
| 2261 # "Returns a one-line description of the test, or None if no description | |
| 2262 # has been provided. The default implementation of this method returns | |
| 2263 # the first line of the test method's docstring, if available, or None." | |
| 2264 def test_shortDescription__multiline_docstring(self): | |
| 2265 class Foo(unittest.TestCase): | |
| 2266 def runTest(self): | |
| 2267 """this tests foo | |
| 2268 blah, bar and baz are also tested""" | |
| 2269 pass | |
| 2270 | |
| 2271 self.assertEqual(Foo().shortDescription(), "this tests foo") | |
| 2272 | 2239 |
| 2273 # "If result is omitted or None, a temporary result object is created | 2240 # "If result is omitted or None, a temporary result object is created |
| 2274 # and used, but is not made available to the caller" | 2241 # and used, but is not made available to the caller" |
| 2275 def test_run__uses_defaultTestResult(self): | 2242 def test_run__uses_defaultTestResult(self): |
| 2276 events = [] | 2243 events = [] |
| 2277 | 2244 |
| 2278 class Foo(unittest.TestCase): | 2245 class Foo(unittest.TestCase): |
| 2279 def test(self): | 2246 def test(self): |
| 2280 events.append('test') | 2247 events.append('test') |
| 2281 | 2248 |
| 2282 def defaultTestResult(self): | 2249 def defaultTestResult(self): |
| 2283 return LoggingResult(events) | 2250 return LoggingResult(events) |
| 2284 | 2251 |
| 2285 # Make run() find a result object on its own | 2252 # Make run() find a result object on its own |
| 2286 Foo('test').run() | 2253 Foo('test').run() |
| 2287 | 2254 |
| 2288 expected = ['startTest', 'test', 'addSuccess', 'stopTest'] | 2255 expected = ['startTest', 'test', 'addSuccess', 'stopTest'] |
| 2289 self.assertEqual(events, expected) | 2256 self.assertEqual(events, expected) |
| 2290 | 2257 |
| 2258 def testShortDescriptionWithoutDocstring(self): | |
| 2259 self.assertEqual( | |
| 2260 self.shortDescription(), | |
| 2261 'testShortDescriptionWithoutDocstring (' + __name__ + | |
| 2262 '.Test_TestCase)') | |
| 2263 | |
| 2264 def testShortDescriptionWithOneLineDocstring(self): | |
| 2265 """Tests shortDescription() for a method with a docstring.""" | |
| 2266 self.assertEqual( | |
| 2267 self.shortDescription(), | |
| 2268 ('testShortDescriptionWithOneLineDocstring ' | |
| 2269 '(' + __name__ + '.Test_TestCase)\n' | |
| 2270 'Tests shortDescription() for a method with a docstring.')) | |
| 2271 | |
| 2272 def testShortDescriptionWithMultiLineDocstring(self): | |
| 2273 """Tests shortDescription() for a method with a longer docstring. | |
| 2274 | |
| 2275 This method ensures that only the first line of a docstring is | |
| 2276 returned used in the short description, no matter how long the | |
| 2277 whole thing is. | |
| 2278 """ | |
| 2279 self.assertEqual( | |
| 2280 self.shortDescription(), | |
| 2281 ('testShortDescriptionWithMultiLineDocstring ' | |
| 2282 '(' + __name__ + '.Test_TestCase)\n' | |
| 2283 'Tests shortDescription() for a method with a longer ' | |
| 2284 'docstring.')) | |
| 2285 | |
| 2286 | |
| 2287 def testAddTypeEqualityFunc(self): | |
| 2288 class SadSnake(object): | |
| 2289 """Dummy class for test_addTypeEqualityFunc.""" | |
| 2290 s1, s2 = SadSnake(), SadSnake() | |
| 2291 self.assertFalse(s1 == s2) | |
| 2292 def AllSnakesCreatedEqual(a, b, msg=None): | |
| 2293 return type(a) == type(b) == SadSnake | |
| 2294 self.addTypeEqualityFunc(SadSnake, AllSnakesCreatedEqual) | |
| 2295 self.assertEqual(s1, s2) | |
| 2296 # No this doesn't clean up and remove the SadSnake equality func | |
| 2297 # from this TestCase instance but since its a local nothing else | |
| 2298 # will ever notice that. | |
| 2299 | |
| 2300 def testAssertIn(self): | |
| 2301 animals = {'monkey': 'banana', 'cow': 'grass', 'seal': 'fish'} | |
| 2302 | |
| 2303 self.assertIn('a', 'abc') | |
| 2304 self.assertIn(2, [1, 2, 3]) | |
| 2305 self.assertIn('monkey', animals) | |
| 2306 | |
| 2307 self.assertNotIn('d', 'abc') | |
| 2308 self.assertNotIn(0, [1, 2, 3]) | |
| 2309 self.assertNotIn('otter', animals) | |
| 2310 | |
| 2311 self.assertRaises(self.failureException, self.assertIn, 'x', 'abc') | |
| 2312 self.assertRaises(self.failureException, self.assertIn, 4, [1, 2, 3]) | |
| 2313 self.assertRaises(self.failureException, self.assertIn, 'elephant', anim als) | |
|
GvR
2009/03/31 15:01:06
lin too long
gregory.p.smith
2009/03/31 16:37:02
Done.
| |
| 2314 | |
| 2315 self.assertRaises(self.failureException, self.assertNotIn, 'c', 'abc') | |
| 2316 self.assertRaises(self.failureException, self.assertNotIn, 1, [1, 2, 3]) | |
| 2317 self.assertRaises(self.failureException, self.assertNotIn, 'cow', animal s) | |
|
GvR
2009/03/31 15:01:06
linr too long
gregory.p.smith
2009/03/31 16:37:02
Done.
| |
| 2318 | |
| 2319 def testAssertDictContainsSubset(self): | |
| 2320 self.assertDictContainsSubset({}, {}) | |
| 2321 self.assertDictContainsSubset({}, {'a': 1}) | |
| 2322 self.assertDictContainsSubset({'a': 1}, {'a': 1}) | |
| 2323 self.assertDictContainsSubset({'a': 1}, {'a': 1, 'b': 2}) | |
| 2324 self.assertDictContainsSubset({'a': 1, 'b': 2}, {'a': 1, 'b': 2}) | |
| 2325 | |
| 2326 self.assertRaises(unittest.TestCase.failureException, | |
| 2327 self.assertDictContainsSubset, {'a': 2}, {'a': 1}, | |
| 2328 '.*Mismatched values:.*') | |
| 2329 | |
| 2330 self.assertRaises(unittest.TestCase.failureException, | |
| 2331 self.assertDictContainsSubset, {'c': 1}, {'a': 1}, | |
| 2332 '.*Missing:.*') | |
| 2333 | |
| 2334 self.assertRaises(unittest.TestCase.failureException, | |
| 2335 self.assertDictContainsSubset, {'a': 1, 'c': 1}, | |
| 2336 {'a': 1}, '.*Missing:.*') | |
| 2337 | |
| 2338 self.assertRaises(unittest.TestCase.failureException, | |
| 2339 self.assertDictContainsSubset, {'a': 1, 'c': 1}, | |
| 2340 {'a': 1}, '.*Missing:.*Mismatched values:.*') | |
| 2341 | |
| 2342 def testAssertEqual(self): | |
| 2343 equal_pairs = [ | |
| 2344 ((), ()), | |
| 2345 ({}, {}), | |
| 2346 ([], []), | |
| 2347 (set(), set()), | |
| 2348 (frozenset(), frozenset())] | |
| 2349 for a, b in equal_pairs: | |
| 2350 # This mess of try excepts is to test the assertEqual behavior | |
| 2351 # itself. | |
| 2352 try: | |
| 2353 self.assertEqual(a, b) | |
| 2354 except self.failureException: | |
| 2355 self.fail('assertEqual(%r, %r) failed' % (a, b)) | |
| 2356 try: | |
| 2357 self.assertEqual(a, b, msg='foo') | |
| 2358 except self.failureException: | |
| 2359 self.fail('assertEqual(%r, %r) with msg= failed' % (a, b)) | |
| 2360 try: | |
| 2361 self.assertEqual(a, b, 'foo') | |
| 2362 except self.failureException: | |
| 2363 self.fail('assertEqual(%r, %r) with third parameter failed' % | |
| 2364 (a, b)) | |
| 2365 | |
| 2366 unequal_pairs = [ | |
| 2367 ((), []), | |
| 2368 ({}, set()), | |
| 2369 (set([4,1]), frozenset([4,2])), | |
| 2370 (frozenset([4,5]), set([2,3])), | |
| 2371 (set([3,4]), set([5,4]))] | |
| 2372 for a, b in unequal_pairs: | |
| 2373 self.assertRaises(self.failureException, self.assertEqual, a, b) | |
| 2374 self.assertRaises(self.failureException, self.assertEqual, a, b, | |
| 2375 'foo') | |
| 2376 self.assertRaises(self.failureException, self.assertEqual, a, b, | |
| 2377 msg='foo') | |
| 2378 | |
| 2379 def testEquality(self): | |
| 2380 self.assertListEquals([], []) | |
| 2381 self.assertTupleEquals((), ()) | |
| 2382 self.assertSequenceEquals([], ()) | |
| 2383 | |
| 2384 a = [0, 'a', []] | |
| 2385 b = [] | |
| 2386 self.assertRaises(unittest.TestCase.failureException, | |
| 2387 self.assertListEquals, a, b) | |
| 2388 self.assertRaises(unittest.TestCase.failureException, | |
| 2389 self.assertListEquals, tuple(a), tuple(b)) | |
| 2390 self.assertRaises(unittest.TestCase.failureException, | |
| 2391 self.assertSequenceEquals, a, tuple(b)) | |
| 2392 | |
| 2393 b.extend(a) | |
| 2394 self.assertListEquals(a, b) | |
| 2395 self.assertTupleEquals(tuple(a), tuple(b)) | |
| 2396 self.assertSequenceEquals(a, tuple(b)) | |
| 2397 self.assertSequenceEquals(tuple(a), b) | |
| 2398 | |
| 2399 self.assertRaises(self.failureException, self.assertListEquals, | |
| 2400 a, tuple(b)) | |
| 2401 self.assertRaises(self.failureException, self.assertTupleEquals, | |
| 2402 tuple(a), b) | |
| 2403 self.assertRaises(self.failureException, self.assertListEquals, None, b) | |
| 2404 self.assertRaises(self.failureException, self.assertTupleEquals, None, | |
| 2405 tuple(b)) | |
| 2406 self.assertRaises(self.failureException, self.assertSequenceEquals, | |
| 2407 None, tuple(b)) | |
| 2408 self.assertRaises(self.failureException, self.assertListEquals, 1, 1) | |
| 2409 self.assertRaises(self.failureException, self.assertTupleEquals, 1, 1) | |
| 2410 self.assertRaises(self.failureException, self.assertSequenceEquals, | |
| 2411 1, 1) | |
| 2412 | |
| 2413 self.assertDictEquals({}, {}) | |
| 2414 | |
| 2415 c = { 'x': 1 } | |
| 2416 d = {} | |
| 2417 self.assertRaises(unittest.TestCase.failureException, | |
| 2418 self.assertDictEquals, c, d) | |
| 2419 | |
| 2420 d.update(c) | |
| 2421 self.assertDictEquals(c, d) | |
| 2422 | |
| 2423 d['x'] = 0 | |
| 2424 self.assertRaises(unittest.TestCase.failureException, | |
| 2425 self.assertDictEquals, c, d, 'These are unequal') | |
| 2426 | |
| 2427 self.assertRaises(self.failureException, self.assertDictEquals, None, d) | |
| 2428 self.assertRaises(self.failureException, self.assertDictEquals, [], d) | |
| 2429 self.assertRaises(self.failureException, self.assertDictEquals, 1, 1) | |
| 2430 | |
| 2431 self.assertSameElements([1, 2, 3], [3, 2, 1]) | |
| 2432 self.assertSameElements([1, 2] + [3] * 100, [1] * 100 + [2, 3]) | |
| 2433 self.assertSameElements(['foo', 'bar', 'baz'], ['bar', 'baz', 'foo']) | |
| 2434 self.assertRaises(self.failureException, self.assertSameElements, | |
| 2435 [10], [10, 11]) | |
| 2436 self.assertRaises(self.failureException, self.assertSameElements, | |
| 2437 [10, 11], [10]) | |
| 2438 | |
| 2439 # Test that sequences of unhashable objects can be tested for sameness: | |
| 2440 self.assertSameElements([[1, 2], [3, 4]], [[3, 4], [1, 2]]) | |
| 2441 self.assertSameElements([{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 1}]) | |
| 2442 self.assertRaises(self.failureException, self.assertSameElements, | |
| 2443 [[1]], [[2]]) | |
| 2444 | |
| 2445 def testAssertSetEquals(self): | |
| 2446 set1 = set() | |
| 2447 set2 = set() | |
| 2448 self.assertSetEquals(set1, set2) | |
| 2449 | |
| 2450 self.assertRaises(self.failureException, self.assertSetEquals, None, set 2) | |
| 2451 self.assertRaises(self.failureException, self.assertSetEquals, [], set2) | |
| 2452 self.assertRaises(self.failureException, self.assertSetEquals, set1, Non e) | |
| 2453 self.assertRaises(self.failureException, self.assertSetEquals, set1, []) | |
| 2454 | |
| 2455 set1 = set(['a']) | |
| 2456 set2 = set() | |
| 2457 self.assertRaises(self.failureException, self.assertSetEquals, set1, set 2) | |
| 2458 | |
| 2459 set1 = set(['a']) | |
| 2460 set2 = set(['a']) | |
| 2461 self.assertSetEquals(set1, set2) | |
| 2462 | |
| 2463 set1 = set(['a']) | |
| 2464 set2 = set(['a', 'b']) | |
| 2465 self.assertRaises(self.failureException, self.assertSetEquals, set1, set 2) | |
| 2466 | |
| 2467 set1 = set(['a']) | |
| 2468 set2 = frozenset(['a', 'b']) | |
| 2469 self.assertRaises(self.failureException, self.assertSetEquals, set1, set 2) | |
| 2470 | |
| 2471 set1 = set(['a', 'b']) | |
| 2472 set2 = frozenset(['a', 'b']) | |
| 2473 self.assertSetEquals(set1, set2) | |
| 2474 | |
| 2475 set1 = set() | |
| 2476 set2 = "foo" | |
| 2477 self.assertRaises(self.failureException, self.assertSetEquals, set1, set 2) | |
| 2478 self.assertRaises(self.failureException, self.assertSetEquals, set2, set 1) | |
| 2479 | |
| 2480 # make sure any string formatting is tuple-safe | |
| 2481 set1 = set([(0, 1), (2, 3)]) | |
| 2482 set2 = set([(4, 5)]) | |
| 2483 self.assertRaises(self.failureException, self.assertSetEquals, set1, set 2) | |
| 2484 | |
| 2485 def testInequality(self): | |
| 2486 # Try ints | |
| 2487 self.assertGreater(2, 1) | |
| 2488 self.assertGreaterEqual(2, 1) | |
| 2489 self.assertGreaterEqual(1, 1) | |
| 2490 self.assertLess(1, 2) | |
| 2491 self.assertLessEqual(1, 2) | |
| 2492 self.assertLessEqual(1, 1) | |
| 2493 self.assertRaises(self.failureException, self.assertGreater, 1, 2) | |
| 2494 self.assertRaises(self.failureException, self.assertGreater, 1, 1) | |
| 2495 self.assertRaises(self.failureException, self.assertGreaterEqual, 1, 2) | |
| 2496 self.assertRaises(self.failureException, self.assertLess, 2, 1) | |
| 2497 self.assertRaises(self.failureException, self.assertLess, 1, 1) | |
| 2498 self.assertRaises(self.failureException, self.assertLessEqual, 2, 1) | |
| 2499 | |
| 2500 # Try Floats | |
| 2501 self.assertGreater(1.1, 1.0) | |
| 2502 self.assertGreaterEqual(1.1, 1.0) | |
| 2503 self.assertGreaterEqual(1.0, 1.0) | |
| 2504 self.assertLess(1.0, 1.1) | |
| 2505 self.assertLessEqual(1.0, 1.1) | |
| 2506 self.assertLessEqual(1.0, 1.0) | |
| 2507 self.assertRaises(self.failureException, self.assertGreater, 1.0, 1.1) | |
| 2508 self.assertRaises(self.failureException, self.assertGreater, 1.0, 1.0) | |
| 2509 self.assertRaises(self.failureException, self.assertGreaterEqual, 1.0, 1 .1) | |
| 2510 self.assertRaises(self.failureException, self.assertLess, 1.1, 1.0) | |
| 2511 self.assertRaises(self.failureException, self.assertLess, 1.0, 1.0) | |
| 2512 self.assertRaises(self.failureException, self.assertLessEqual, 1.1, 1.0) | |
| 2513 | |
| 2514 # Try Strings | |
| 2515 self.assertGreater('bug', 'ant') | |
| 2516 self.assertGreaterEqual('bug', 'ant') | |
| 2517 self.assertGreaterEqual('ant', 'ant') | |
| 2518 self.assertLess('ant', 'bug') | |
| 2519 self.assertLessEqual('ant', 'bug') | |
| 2520 self.assertLessEqual('ant', 'ant') | |
| 2521 self.assertRaises(self.failureException, self.assertGreater, 'ant', 'bug ') | |
| 2522 self.assertRaises(self.failureException, self.assertGreater, 'ant', 'ant ') | |
| 2523 self.assertRaises(self.failureException, self.assertGreaterEqual, 'ant', 'bug') | |
| 2524 self.assertRaises(self.failureException, self.assertLess, 'bug', 'ant') | |
| 2525 self.assertRaises(self.failureException, self.assertLess, 'ant', 'ant') | |
| 2526 self.assertRaises(self.failureException, self.assertLessEqual, 'bug', 'a nt') | |
| 2527 | |
| 2528 # Try Unicode | |
| 2529 self.assertGreater(u'bug', u'ant') | |
| 2530 self.assertGreaterEqual(u'bug', u'ant') | |
| 2531 self.assertGreaterEqual(u'ant', u'ant') | |
| 2532 self.assertLess(u'ant', u'bug') | |
| 2533 self.assertLessEqual(u'ant', u'bug') | |
| 2534 self.assertLessEqual(u'ant', u'ant') | |
| 2535 self.assertRaises(self.failureException, self.assertGreater, u'ant', u'b ug') | |
| 2536 self.assertRaises(self.failureException, self.assertGreater, u'ant', u'a nt') | |
| 2537 self.assertRaises(self.failureException, self.assertGreaterEqual, u'ant' , | |
| 2538 u'bug') | |
| 2539 self.assertRaises(self.failureException, self.assertLess, u'bug', u'ant' ) | |
| 2540 self.assertRaises(self.failureException, self.assertLess, u'ant', u'ant' ) | |
| 2541 self.assertRaises(self.failureException, self.assertLessEqual, u'bug', u 'ant') | |
| 2542 | |
| 2543 # Try Mixed String/Unicode | |
| 2544 self.assertGreater('bug', u'ant') | |
| 2545 self.assertGreater(u'bug', 'ant') | |
| 2546 self.assertGreaterEqual('bug', u'ant') | |
| 2547 self.assertGreaterEqual(u'bug', 'ant') | |
| 2548 self.assertGreaterEqual('ant', u'ant') | |
| 2549 self.assertGreaterEqual(u'ant', 'ant') | |
| 2550 self.assertLess('ant', u'bug') | |
| 2551 self.assertLess(u'ant', 'bug') | |
| 2552 self.assertLessEqual('ant', u'bug') | |
| 2553 self.assertLessEqual(u'ant', 'bug') | |
| 2554 self.assertLessEqual('ant', u'ant') | |
| 2555 self.assertLessEqual(u'ant', 'ant') | |
| 2556 self.assertRaises(self.failureException, self.assertGreater, 'ant', u'bu g') | |
| 2557 self.assertRaises(self.failureException, self.assertGreater, u'ant', 'bu g') | |
| 2558 self.assertRaises(self.failureException, self.assertGreater, 'ant', u'an t') | |
| 2559 self.assertRaises(self.failureException, self.assertGreater, u'ant', 'an t') | |
| 2560 self.assertRaises(self.failureException, self.assertGreaterEqual, 'ant', | |
| 2561 u'bug') | |
| 2562 self.assertRaises(self.failureException, self.assertGreaterEqual, u'ant' , | |
| 2563 'bug') | |
| 2564 self.assertRaises(self.failureException, self.assertLess, 'bug', u'ant') | |
| 2565 self.assertRaises(self.failureException, self.assertLess, u'bug', 'ant') | |
| 2566 self.assertRaises(self.failureException, self.assertLess, 'ant', u'ant') | |
| 2567 self.assertRaises(self.failureException, self.assertLess, u'ant', 'ant') | |
| 2568 self.assertRaises(self.failureException, self.assertLessEqual, 'bug', u' ant') | |
| 2569 self.assertRaises(self.failureException, self.assertLessEqual, u'bug', ' ant') | |
| 2570 | |
| 2571 def testAssertMultiLineEquals(self): | |
| 2572 sample_text = b"""\ | |
| 2573 http://www.python.org/doc/2.3/lib/module-unittest.html | |
| 2574 test case | |
| 2575 A test case is the smallest unit of testing. [...] | |
| 2576 """ | |
| 2577 revised_sample_text = b"""\ | |
| 2578 http://www.python.org/doc/2.4.1/lib/module-unittest.html | |
| 2579 test case | |
| 2580 A test case is the smallest unit of testing. [...] You may provide your | |
| 2581 own implementation that does not subclass from TestCase, of course. | |
| 2582 """ | |
| 2583 sample_text_error = b""" | |
| 2584 - http://www.python.org/doc/2.3/lib/module-unittest.html | |
| 2585 ? ^ | |
| 2586 + http://www.python.org/doc/2.4.1/lib/module-unittest.html | |
| 2587 ? ^^^ | |
| 2588 test case | |
| 2589 - A test case is the smallest unit of testing. [...] | |
| 2590 + A test case is the smallest unit of testing. [...] You may provide your | |
| 2591 ? +++++++++++++++++++++ | |
| 2592 + own implementation that does not subclass from TestCase, of course. | |
| 2593 """ | |
| 2594 | |
| 2595 for modifier in (lambda x: x, lambda x: x.decode('utf8')): | |
| 2596 try: | |
| 2597 self.assertMultiLineEquals(modifier(sample_text), | |
| 2598 modifier(revised_sample_text)) | |
| 2599 except self.failureException, e: | |
| 2600 # no fair testing ourself with ourself, use assertEqual.. | |
| 2601 self.assertEqual(sample_text_error, str(e).encode('utf8')) | |
| 2602 | |
| 2603 def testAssertIsNone(self): | |
| 2604 self.assertIsNone(None) | |
| 2605 self.assertRaises(self.failureException, self.assertIsNone, False) | |
| 2606 self.assertIsNotNone('DjZoPloGears on Rails') | |
| 2607 self.assertRaises(self.failureException, self.assertIsNotNone, None) | |
| 2608 | |
| 2609 def testAssertRegexpMatches(self): | |
| 2610 self.assertRegexpMatches('asdfabasdf', r'ab+') | |
| 2611 self.assertRaises(self.failureException, self.assertRegexpMatches, | |
| 2612 'saaas', r'aaaa') | |
| 2613 | |
| 2614 def testAssertRaisesRegexp(self): | |
| 2615 class ExceptionMock(Exception): | |
| 2616 pass | |
| 2617 | |
| 2618 def Stub(): | |
| 2619 raise ExceptionMock('We expect') | |
| 2620 | |
| 2621 self.assertRaisesRegexp(ExceptionMock, re.compile('expect$'), Stub) | |
| 2622 self.assertRaisesRegexp(ExceptionMock, 'expect$', Stub) | |
| 2623 self.assertRaisesRegexp(ExceptionMock, u'expect$', Stub) | |
| 2624 | |
| 2625 def testAssertNotRaisesRegexp(self): | |
| 2626 self.assertRaisesRegexp( | |
| 2627 self.failureException, '^Exception not raised$', | |
| 2628 self.assertRaisesRegexp, Exception, re.compile('x'), | |
| 2629 lambda: None) | |
| 2630 self.assertRaisesRegexp( | |
| 2631 self.failureException, '^Exception not raised$', | |
| 2632 self.assertRaisesRegexp, Exception, 'x', | |
| 2633 lambda: None) | |
| 2634 self.assertRaisesRegexp( | |
| 2635 self.failureException, '^Exception not raised$', | |
| 2636 self.assertRaisesRegexp, Exception, u'x', | |
| 2637 lambda: None) | |
| 2638 | |
| 2639 def testAssertRaisesRegexpMismatch(self): | |
| 2640 def Stub(): | |
| 2641 raise Exception('Unexpected') | |
| 2642 | |
| 2643 self.assertRaisesRegexp( | |
| 2644 self.failureException, | |
| 2645 r'"\^Expected\$" does not match "Unexpected"', | |
| 2646 self.assertRaisesRegexp, Exception, '^Expected$', | |
| 2647 Stub) | |
| 2648 self.assertRaisesRegexp( | |
| 2649 self.failureException, | |
| 2650 r'"\^Expected\$" does not match "Unexpected"', | |
| 2651 self.assertRaisesRegexp, Exception, u'^Expected$', | |
| 2652 Stub) | |
| 2653 self.assertRaisesRegexp( | |
| 2654 self.failureException, | |
| 2655 r'"\^Expected\$" does not match "Unexpected"', | |
| 2656 self.assertRaisesRegexp, Exception, | |
| 2657 re.compile('^Expected$'), Stub) | |
| 2658 | |
| 2291 | 2659 |
| 2292 class Test_TestSkipping(TestCase): | 2660 class Test_TestSkipping(TestCase): |
| 2293 | 2661 |
| 2294 def test_skipping(self): | 2662 def test_skipping(self): |
| 2295 class Foo(unittest.TestCase): | 2663 class Foo(unittest.TestCase): |
| 2296 def test_skip_me(self): | 2664 def test_skip_me(self): |
| 2297 self.skipTest("skip") | 2665 self.skipTest("skip") |
| 2298 events = [] | 2666 events = [] |
| 2299 result = LoggingResult(events) | 2667 result = LoggingResult(events) |
| 2300 test = Foo("test_skip_me") | 2668 test = Foo("test_skip_me") |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2379 self.assertFalse(result.failures) | 2747 self.assertFalse(result.failures) |
| 2380 self.assertEqual(result.unexpectedSuccesses, [test]) | 2748 self.assertEqual(result.unexpectedSuccesses, [test]) |
| 2381 self.assertTrue(result.wasSuccessful()) | 2749 self.assertTrue(result.wasSuccessful()) |
| 2382 | 2750 |
| 2383 | 2751 |
| 2384 | 2752 |
| 2385 class Test_Assertions(TestCase): | 2753 class Test_Assertions(TestCase): |
| 2386 def test_AlmostEqual(self): | 2754 def test_AlmostEqual(self): |
| 2387 self.failUnlessAlmostEqual(1.00000001, 1.0) | 2755 self.failUnlessAlmostEqual(1.00000001, 1.0) |
| 2388 self.failIfAlmostEqual(1.0000001, 1.0) | 2756 self.failIfAlmostEqual(1.0000001, 1.0) |
| 2389 self.assertRaises(AssertionError, | 2757 self.assertRaises(self.failureException, |
| 2390 self.failUnlessAlmostEqual, 1.0000001, 1.0) | 2758 self.failUnlessAlmostEqual, 1.0000001, 1.0) |
| 2391 self.assertRaises(AssertionError, | 2759 self.assertRaises(self.failureException, |
| 2392 self.failIfAlmostEqual, 1.00000001, 1.0) | 2760 self.failIfAlmostEqual, 1.00000001, 1.0) |
| 2393 | 2761 |
| 2394 self.failUnlessAlmostEqual(1.1, 1.0, places=0) | 2762 self.failUnlessAlmostEqual(1.1, 1.0, places=0) |
| 2395 self.assertRaises(AssertionError, | 2763 self.assertRaises(self.failureException, |
| 2396 self.failUnlessAlmostEqual, 1.1, 1.0, places=1) | 2764 self.failUnlessAlmostEqual, 1.1, 1.0, places=1) |
| 2397 | 2765 |
| 2398 self.failUnlessAlmostEqual(0, .1+.1j, places=0) | 2766 self.failUnlessAlmostEqual(0, .1+.1j, places=0) |
| 2399 self.failIfAlmostEqual(0, .1+.1j, places=1) | 2767 self.failIfAlmostEqual(0, .1+.1j, places=1) |
| 2400 self.assertRaises(AssertionError, | 2768 self.assertRaises(self.failureException, |
| 2401 self.failUnlessAlmostEqual, 0, .1+.1j, places=1) | 2769 self.failUnlessAlmostEqual, 0, .1+.1j, places=1) |
| 2402 self.assertRaises(AssertionError, | 2770 self.assertRaises(self.failureException, |
| 2403 self.failIfAlmostEqual, 0, .1+.1j, places=0) | 2771 self.failIfAlmostEqual, 0, .1+.1j, places=0) |
| 2404 | 2772 |
| 2405 def test_assertRaises(self): | 2773 def test_assertRaises(self): |
| 2406 def _raise(e): | 2774 def _raise(e): |
| 2407 raise e | 2775 raise e |
| 2408 self.assertRaises(KeyError, _raise, KeyError) | 2776 self.assertRaises(KeyError, _raise, KeyError) |
| 2409 self.assertRaises(KeyError, _raise, KeyError("key")) | 2777 self.assertRaises(KeyError, _raise, KeyError("key")) |
| 2410 try: | 2778 try: |
| 2411 self.assertRaises(KeyError, lambda: None) | 2779 self.assertRaises(KeyError, lambda: None) |
| 2412 except AssertionError as e: | 2780 except self.failureException as e: |
| 2413 self.assert_("KeyError not raised" in e, str(e)) | 2781 self.assert_("KeyError not raised" in e, str(e)) |
| 2414 else: | 2782 else: |
| 2415 self.fail("assertRaises() didn't fail") | 2783 self.fail("assertRaises() didn't fail") |
| 2416 try: | 2784 try: |
| 2417 self.assertRaises(KeyError, _raise, ValueError) | 2785 self.assertRaises(KeyError, _raise, ValueError) |
| 2418 except ValueError: | 2786 except ValueError: |
| 2419 pass | 2787 pass |
| 2420 else: | 2788 else: |
| 2421 self.fail("assertRaises() didn't let exception pass through") | 2789 self.fail("assertRaises() didn't let exception pass through") |
| 2422 with self.assertRaises(KeyError): | 2790 with self.assertRaises(KeyError): |
| 2423 raise KeyError | 2791 raise KeyError |
| 2424 with self.assertRaises(KeyError): | 2792 with self.assertRaises(KeyError): |
| 2425 raise KeyError("key") | 2793 raise KeyError("key") |
| 2426 try: | 2794 try: |
| 2427 with self.assertRaises(KeyError): | 2795 with self.assertRaises(KeyError): |
| 2428 pass | 2796 pass |
| 2429 except AssertionError as e: | 2797 except self.failureException as e: |
| 2430 self.assert_("KeyError not raised" in e, str(e)) | 2798 self.assert_("KeyError not raised" in e, str(e)) |
| 2431 else: | 2799 else: |
| 2432 self.fail("assertRaises() didn't fail") | 2800 self.fail("assertRaises() didn't fail") |
| 2433 try: | 2801 try: |
| 2434 with self.assertRaises(KeyError): | 2802 with self.assertRaises(KeyError): |
| 2435 raise ValueError | 2803 raise ValueError |
| 2436 except ValueError: | 2804 except ValueError: |
| 2437 pass | 2805 pass |
| 2438 else: | 2806 else: |
| 2439 self.fail("assertRaises() didn't let exception pass through") | 2807 self.fail("assertRaises() didn't let exception pass through") |
| 2440 | 2808 |
| 2441 | 2809 |
| 2442 ###################################################################### | 2810 ###################################################################### |
| 2443 ## Main | 2811 ## Main |
| 2444 ###################################################################### | 2812 ###################################################################### |
| 2445 | 2813 |
| 2446 def test_main(): | 2814 def test_main(): |
| 2447 test_support.run_unittest(Test_TestCase, Test_TestLoader, | 2815 test_support.run_unittest(Test_TestCase, Test_TestLoader, |
| 2448 Test_TestSuite, Test_TestResult, Test_FunctionTestCase, | 2816 Test_TestSuite, Test_TestResult, Test_FunctionTestCase, |
| 2449 Test_TestSkipping, Test_Assertions) | 2817 Test_TestSkipping, Test_Assertions) |
| 2450 | 2818 |
| 2451 if __name__ == "__main__": | 2819 if __name__ == "__main__": |
| 2452 test_main() | 2820 test_main() |
| OLD | NEW |