##// END OF EJS Templates
mq: use dirstateguard instead of dirstate.invalidate (qpush)...
mq: use dirstateguard instead of dirstate.invalidate (qpush) Before this patch, "mq.queue.apply()" uses "dirstate.invalidate()" as a kind of "restore .hg/dirstate to the original status" during afailure. But it just discards changes in memory, and doesn't actually restore ".hg/dirstate". Then, it can't work as expected, if "dirstate.write()" is executed while processing. This patch uses "dirstateguard" instead of "dirstate.invalidate()" to restore ".hg/dirstate" at failure even if "dirstate.write()" is executed before failure. This is a part of preparations to fix the issue that the recent (in memory) dirstate isn't visible to external processes (e.g. "precommit" hook).

File last commit:

r21315:56610da3 default
r24996:58308dde default
Show More
test-run-tests.py
87 lines | 2.3 KiB | text/x-python | PythonLexer
/ tests / test-run-tests.py
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 """test line matching with some failing examples and some which warn
run-test.t only checks positive matches and can not see warnings
(both by design)
"""
Simon Heimberg
tests: fix test-run-tests.py on OS X...
r20284 import os, re
# this is hack to make sure no escape characters are inserted into the output
if 'TERM' in os.environ:
del os.environ['TERM']
import doctest
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 run_tests = __import__('run-tests')
def lm(expected, output):
r"""check if output matches expected
does it generally work?
>>> lm('H*e (glob)\n', 'Here\n')
True
fail on bad test data
>>> try: lm('a\n','a')
... except AssertionError, ex: print ex
missing newline
>>> try: lm('single backslash\n', 'single \backslash\n')
... except AssertionError, ex: print ex
single backslash or unknown char
"""
assert expected.endswith('\n') and output.endswith('\n'), 'missing newline'
assert not re.search(r'[^ \w\\/\r\n()*?]', expected + output), \
'single backslash or unknown char'
Gregory Szorc
run-tests: make linematch a static method of TTest...
r21315 match = run_tests.TTest.linematch(expected, output)
Simon Heimberg
run-tests: suggest to append glob when only path sep does not match...
r20273 if isinstance(match, str):
return 'special: ' + match
else:
return bool(match) # do not return match object
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
def wintests():
r"""test matching like running on windows
enable windows matching on any os
>>> _osaltsep = os.altsep
>>> os.altsep = True
valid match on windows
>>> lm('g/a*/d (glob)\n', 'g\\abc/d\n')
True
direct matching, glob unnecessary
>>> lm('g/b (glob)\n', 'g/b\n')
Simon Heimberg
run-tests: print more information on unnecessary glob matching...
r20274 'special: -glob'
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
missing glob
>>> lm('/g/c/d/fg\n', '\\g\\c\\d/fg\n')
Simon Heimberg
run-tests: suggest to append glob when only path sep does not match...
r20273 'special: +glob'
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
restore os.altsep
>>> os.altsep = _osaltsep
"""
Simon Heimberg
tests: fix test-run-tests.py on OS X...
r20284 pass
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
def otherostests():
r"""test matching like running on non-windows os
disable windows matching on any os
>>> _osaltsep = os.altsep
>>> os.altsep = False
backslash does not match slash
>>> lm('h/a* (glob)\n', 'h\\ab\n')
False
direct matching glob can not be recognized
>>> lm('h/b (glob)\n', 'h/b\n')
True
missing glob can not not be recognized
>>> lm('/h/c/df/g/\n', '\\h/c\\df/g\\\n')
False
restore os.altsep
>>> os.altsep = _osaltsep
"""
pass
if __name__ == '__main__':
doctest.testmod()