Changeset 391 for python/trunk/Lib/test/test_contextlib.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/test/test_contextlib.py
r2 r391 1 1 """Unit tests for contextlib.py, and other context managers.""" 2 2 3 4 3 import sys 5 import os6 import decimal7 4 import tempfile 8 5 import unittest 9 import threading10 6 from contextlib import * # Tests __all__ 11 7 from test import test_support 8 try: 9 import threading 10 except ImportError: 11 threading = None 12 12 13 13 14 class ContextManagerTestCase(unittest.TestCase): … … 35 36 finally: 36 37 state.append(999) 37 try:38 with self.assertRaises(ZeroDivisionError): 38 39 with woohoo() as x: 39 40 self.assertEqual(state, [1]) … … 41 42 state.append(x) 42 43 raise ZeroDivisionError() 43 except ZeroDivisionError:44 pass45 else:46 self.fail("Expected ZeroDivisionError")47 44 self.assertEqual(state, [1, 42, 999]) 48 45 … … 54 51 ctx.__enter__() 55 52 # Calling __exit__ should not result in an exception 56 self. failIf(ctx.__exit__(TypeError, TypeError("foo"), None))53 self.assertFalse(ctx.__exit__(TypeError, TypeError("foo"), None)) 57 54 58 55 def test_contextmanager_trap_yield_after_throw(self): … … 86 83 self.assertEqual(state, [1, 42, 999]) 87 84 88 def test_contextmanager_attribs(self):85 def _create_contextmanager_attribs(self): 89 86 def attribs(**kw): 90 87 def decorate(func): … … 97 94 def baz(spam): 98 95 """Whee!""" 96 return baz 97 98 def test_contextmanager_attribs(self): 99 baz = self._create_contextmanager_attribs() 99 100 self.assertEqual(baz.__name__,'baz') 100 101 self.assertEqual(baz.foo, 'bar') 102 103 @unittest.skipIf(sys.flags.optimize >= 2, 104 "Docstrings are omitted with -O2 and above") 105 def test_contextmanager_doc_attrib(self): 106 baz = self._create_contextmanager_attribs() 101 107 self.assertEqual(baz.__doc__, "Whee!") 102 108 … … 136 142 finally: 137 143 state.append(6) 138 try:144 with self.assertRaises(ZeroDivisionError): 139 145 with nested(a(), b()) as (x, y): 140 146 state.append(x) 141 147 state.append(y) 142 1/0 143 except ZeroDivisionError: 144 self.assertEqual(state, [1, 4, 2, 5, 6, 3]) 145 else: 146 self.fail("Didn't raise ZeroDivisionError") 148 1 // 0 149 self.assertEqual(state, [1, 4, 2, 5, 6, 3]) 147 150 148 151 def test_nested_right_exception(self): 149 state = []150 152 @contextmanager 151 153 def a(): … … 159 161 except: 160 162 pass 161 try:163 with self.assertRaises(ZeroDivisionError): 162 164 with nested(a(), b()) as (x, y): 163 1/0 164 except ZeroDivisionError: 165 self.assertEqual((x, y), (1, 2)) 166 except Exception: 167 self.fail("Reraised wrong exception") 168 else: 169 self.fail("Didn't raise ZeroDivisionError") 165 1 // 0 166 self.assertEqual((x, y), (1, 2)) 170 167 171 168 def test_nested_b_swallows(self): … … 182 179 try: 183 180 with nested(a(), b()): 184 1 /0181 1 // 0 185 182 except ZeroDivisionError: 186 183 self.fail("Didn't swallow ZeroDivisionError") … … 245 242 x = C() 246 243 self.assertEqual(state, []) 247 try:244 with self.assertRaises(ZeroDivisionError): 248 245 with closing(x) as y: 249 246 self.assertEqual(x, y) 250 1/0 251 except ZeroDivisionError: 252 self.assertEqual(state, [1]) 253 else: 254 self.fail("Didn't raise ZeroDivisionError") 247 1 // 0 248 self.assertEqual(state, [1]) 255 249 256 250 class FileContextTestCase(unittest.TestCase): … … 261 255 f = None 262 256 with open(tfn, "w") as f: 263 self. failIf(f.closed)257 self.assertFalse(f.closed) 264 258 f.write("Booh\n") 265 self. failUnless(f.closed)259 self.assertTrue(f.closed) 266 260 f = None 267 try:261 with self.assertRaises(ZeroDivisionError): 268 262 with open(tfn, "r") as f: 269 self. failIf(f.closed)263 self.assertFalse(f.closed) 270 264 self.assertEqual(f.read(), "Booh\n") 271 1/0 272 except ZeroDivisionError: 273 self.failUnless(f.closed) 274 else: 275 self.fail("Didn't raise ZeroDivisionError") 265 1 // 0 266 self.assertTrue(f.closed) 276 267 finally: 277 try: 278 os.remove(tfn) 279 except os.error: 280 pass 281 268 test_support.unlink(tfn) 269 270 @unittest.skipUnless(threading, 'Threading required for this test.') 282 271 class LockContextTestCase(unittest.TestCase): 283 272 284 273 def boilerPlate(self, lock, locked): 285 self. failIf(locked())274 self.assertFalse(locked()) 286 275 with lock: 287 self. failUnless(locked())288 self. failIf(locked())289 try:276 self.assertTrue(locked()) 277 self.assertFalse(locked()) 278 with self.assertRaises(ZeroDivisionError): 290 279 with lock: 291 self.failUnless(locked()) 292 1/0 293 except ZeroDivisionError: 294 self.failIf(locked()) 295 else: 296 self.fail("Didn't raise ZeroDivisionError") 280 self.assertTrue(locked()) 281 1 // 0 282 self.assertFalse(locked()) 297 283 298 284 def testWithLock(self): … … 332 318 # This is needed to make the test actually run under regrtest.py! 333 319 def test_main(): 334 test_support.run_unittest(__name__) 320 with test_support.check_warnings(("With-statements now directly support " 321 "multiple context managers", 322 DeprecationWarning)): 323 test_support.run_unittest(__name__) 335 324 336 325 if __name__ == "__main__":
Note:
See TracChangeset
for help on using the changeset viewer.