Mercurial > hg
view tests/test-ctxmanager.py @ 28441:79d8e7926a04
test-parse-date: defines explicit start/end dates for DST
Prior to this patch, DST times where tested by specifying a custom TZ
environment variable that didn't defined DST transition times.
Due to a bug in glibc, the test fail on 32bits platforms that use timezone
files generated by zic from tzcode >= 2014c (glibc >= 2.20).
See https://sourceware.org/bugzilla/show_bug.cgi?id=19738
By defining explicit transition times for DST in the TZ environment variable,
the test is now independant to how the system guess those transition times.
author | Sébastien Brissaud <sebastien@brissaud.name> |
---|---|
date | Sun, 14 Feb 2016 18:18:57 +0100 |
parents | 4a7dc29bfad8 |
children | 441491aba8c3 |
line wrap: on
line source
from __future__ import absolute_import import silenttestrunner import unittest from mercurial.util import ctxmanager 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 with ctxmanager(ctxmgr('a', addtrace), ctxmgr('b', addtrace)) as c: a, b = c.enter() 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 def go(): with ctxmanager(ctxmgr('a', addtrace), lambda: raise_on_enter('b', addtrace)) as c: c.enter() addtrace('unreachable') self.assertRaises(ctxerror, go) self.assertEqual(trace, [('enter', 'a'), ('raise', 'b'), ('exit', 'a')]) def test_raise_on_exit(self): trace = [] addtrace = trace.append def go(): with ctxmanager(ctxmgr('a', addtrace), lambda: raise_on_exit('b', addtrace)) as c: c.enter() addtrace('running') self.assertRaises(ctxerror, go) self.assertEqual(trace, [('enter', 'a'), ('enter', 'b'), 'running', ('raise', 'b'), ('exit', 'a')]) if __name__ == '__main__': silenttestrunner.main(__name__)