tests/test-ctxmanager.py
changeset 28801 441491aba8c3
parent 27786 4a7dc29bfad8
child 32279 68c43a416585
equal deleted inserted replaced
28800:544908ae36ce 28801:441491aba8c3
     1 from __future__ import absolute_import
     1 from __future__ import absolute_import
     2 
     2 
     3 import silenttestrunner
     3 import silenttestrunner
     4 import unittest
     4 import unittest
     5 
     5 
     6 from mercurial.util import ctxmanager
     6 from mercurial import util
     7 
     7 
     8 class contextmanager(object):
     8 class contextmanager(object):
     9     def __init__(self, name, trace):
     9     def __init__(self, name, trace):
    10         self.name = name
    10         self.name = name
    11         self.entered = False
    11         self.entered = False
    42 
    42 
    43 class test_ctxmanager(unittest.TestCase):
    43 class test_ctxmanager(unittest.TestCase):
    44     def test_basics(self):
    44     def test_basics(self):
    45         trace = []
    45         trace = []
    46         addtrace = trace.append
    46         addtrace = trace.append
    47         with ctxmanager(ctxmgr('a', addtrace), ctxmgr('b', addtrace)) as c:
    47         with util.ctxmanager(ctxmgr('a', addtrace), ctxmgr('b', addtrace)) as c:
    48             a, b = c.enter()
    48             a, b = c.enter()
    49             c.atexit(addtrace, ('atexit', 'x'))
    49             c.atexit(addtrace, ('atexit', 'x'))
    50             c.atexit(addtrace, ('atexit', 'y'))
    50             c.atexit(addtrace, ('atexit', 'y'))
    51         self.assertEqual(trace, [('enter', 'a'), ('enter', 'b'),
    51         self.assertEqual(trace, [('enter', 'a'), ('enter', 'b'),
    52                                  ('atexit', 'y'), ('atexit', 'x'),
    52                                  ('atexit', 'y'), ('atexit', 'x'),
    54 
    54 
    55     def test_raise_on_enter(self):
    55     def test_raise_on_enter(self):
    56         trace = []
    56         trace = []
    57         addtrace = trace.append
    57         addtrace = trace.append
    58         def go():
    58         def go():
    59             with ctxmanager(ctxmgr('a', addtrace),
    59             with util.ctxmanager(ctxmgr('a', addtrace),
    60                            lambda: raise_on_enter('b', addtrace)) as c:
    60                                  lambda: raise_on_enter('b', addtrace)) as c:
    61                 c.enter()
    61                 c.enter()
    62                 addtrace('unreachable')
    62                 addtrace('unreachable')
    63         self.assertRaises(ctxerror, go)
    63         self.assertRaises(ctxerror, go)
    64         self.assertEqual(trace, [('enter', 'a'), ('raise', 'b'), ('exit', 'a')])
    64         self.assertEqual(trace, [('enter', 'a'), ('raise', 'b'), ('exit', 'a')])
    65 
    65 
    66     def test_raise_on_exit(self):
    66     def test_raise_on_exit(self):
    67         trace = []
    67         trace = []
    68         addtrace = trace.append
    68         addtrace = trace.append
    69         def go():
    69         def go():
    70             with ctxmanager(ctxmgr('a', addtrace),
    70             with util.ctxmanager(ctxmgr('a', addtrace),
    71                            lambda: raise_on_exit('b', addtrace)) as c:
    71                                  lambda: raise_on_exit('b', addtrace)) as c:
    72                 c.enter()
    72                 c.enter()
    73                 addtrace('running')
    73                 addtrace('running')
    74         self.assertRaises(ctxerror, go)
    74         self.assertRaises(ctxerror, go)
    75         self.assertEqual(trace, [('enter', 'a'), ('enter', 'b'), 'running',
    75         self.assertEqual(trace, [('enter', 'a'), ('enter', 'b'), 'running',
    76                                  ('raise', 'b'), ('exit', 'a')])
    76                                  ('raise', 'b'), ('exit', 'a')])