##// END OF EJS Templates
chg: make timeout adjustable...
chg: make timeout adjustable Before this patch, chg will give up when it cannot connect to the new server within 10 seconds. If the host has high load during that time, 10 seconds is not enough. This patch makes it adjustable using the CHGTIMEOUT environment variable.

File last commit:

r28801:441491ab default
r29345:62b89049 default
Show More
test-ctxmanager.py
79 lines | 2.5 KiB | text/x-python | PythonLexer
/ tests / test-ctxmanager.py
Bryan O'Sullivan
util: introduce ctxmanager, to avoid nested try/finally blocks...
r27703 from __future__ import absolute_import
import silenttestrunner
import unittest
Yuya Nishihara
test-ctxmanager: stop direct symbol import of mercurial.util
r28801 from mercurial import util
Bryan O'Sullivan
util: introduce ctxmanager, to avoid nested try/finally blocks...
r27703
class contextmanager(object):
def __init__(self, name, trace):
self.name = name
self.entered = False
self.exited = False
self.trace = trace
def __enter__(self):
self.entered = True
self.trace(('enter', self.name))
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.exited = exc_type, exc_val, exc_tb
self.trace(('exit', self.name))
def __repr__(self):
return '<ctx %r>' % self.name
class ctxerror(Exception):
pass
class raise_on_enter(contextmanager):
def __enter__(self):
self.trace(('raise', self.name))
raise ctxerror(self.name)
class raise_on_exit(contextmanager):
def __exit__(self, exc_type, exc_val, exc_tb):
self.trace(('raise', self.name))
raise ctxerror(self.name)
def ctxmgr(name, trace):
return lambda: contextmanager(name, trace)
class test_ctxmanager(unittest.TestCase):
def test_basics(self):
trace = []
addtrace = trace.append
Yuya Nishihara
test-ctxmanager: stop direct symbol import of mercurial.util
r28801 with util.ctxmanager(ctxmgr('a', addtrace), ctxmgr('b', addtrace)) as c:
Bryan O'Sullivan
util: rename ctxmanager's __call__ method to enter
r27785 a, b = c.enter()
Bryan O'Sullivan
util: introduce ctxmanager, to avoid nested try/finally blocks...
r27703 c.atexit(addtrace, ('atexit', 'x'))
c.atexit(addtrace, ('atexit', 'y'))
self.assertEqual(trace, [('enter', 'a'), ('enter', 'b'),
('atexit', 'y'), ('atexit', 'x'),
('exit', 'b'), ('exit', 'a')])
def test_raise_on_enter(self):
trace = []
addtrace = trace.append
Bryan O'Sullivan
test-ctxmanager: fix Python 2.6 compatibility problem
r27786 def go():
Yuya Nishihara
test-ctxmanager: stop direct symbol import of mercurial.util
r28801 with util.ctxmanager(ctxmgr('a', addtrace),
lambda: raise_on_enter('b', addtrace)) as c:
Bryan O'Sullivan
util: rename ctxmanager's __call__ method to enter
r27785 c.enter()
Bryan O'Sullivan
util: introduce ctxmanager, to avoid nested try/finally blocks...
r27703 addtrace('unreachable')
Bryan O'Sullivan
test-ctxmanager: fix Python 2.6 compatibility problem
r27786 self.assertRaises(ctxerror, go)
Bryan O'Sullivan
util: introduce ctxmanager, to avoid nested try/finally blocks...
r27703 self.assertEqual(trace, [('enter', 'a'), ('raise', 'b'), ('exit', 'a')])
def test_raise_on_exit(self):
trace = []
addtrace = trace.append
Bryan O'Sullivan
test-ctxmanager: fix Python 2.6 compatibility problem
r27786 def go():
Yuya Nishihara
test-ctxmanager: stop direct symbol import of mercurial.util
r28801 with util.ctxmanager(ctxmgr('a', addtrace),
lambda: raise_on_exit('b', addtrace)) as c:
Bryan O'Sullivan
util: rename ctxmanager's __call__ method to enter
r27785 c.enter()
Bryan O'Sullivan
util: introduce ctxmanager, to avoid nested try/finally blocks...
r27703 addtrace('running')
Bryan O'Sullivan
test-ctxmanager: fix Python 2.6 compatibility problem
r27786 self.assertRaises(ctxerror, go)
Bryan O'Sullivan
util: introduce ctxmanager, to avoid nested try/finally blocks...
r27703 self.assertEqual(trace, [('enter', 'a'), ('enter', 'b'), 'running',
('raise', 'b'), ('exit', 'a')])
if __name__ == '__main__':
silenttestrunner.main(__name__)