[PATCH 1 of 4 V2] tests: new test for line matching functions in run-tests
Simon Heimberg
simohe at besonet.ch
Thu Jan 16 18:22:01 UTC 2014
# HG changeset patch
# User Simon Heimberg <simohe at besonet.ch>
# Date 1389895638 -3600
# Thu Jan 16 19:07:18 2014 +0100
# Node ID 9135400b83c549f7a8138be82ab39dca4ebdcb49
# Parent 1b4a0d3c88cd45289835dd215be10fa3e4bd0dfb
tests: new test for line matching functions in run-tests
Test for failing matches and warnings. (The existing test-run-tests.t can not
do both by design.) And simulate matching on other os.
diff -r 1b4a0d3c88cd -r 9135400b83c5 tests/test-run-tests.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-run-tests.py Thu Jan 16 19:07:18 2014 +0100
@@ -0,0 +1,83 @@
+"""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)
+"""
+
+
+import doctest, os, re
+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'
+ match = run_tests.linematch(expected, output)
+ return bool(match)
+
+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')
+ <BLANKLINE>
+ Info, unnecessary glob: g/b (glob)
+ True
+
+ missing glob
+ >>> lm('/g/c/d/fg\n', '\\g\\c\\d/fg\n')
+ False
+
+ restore os.altsep
+ >>> os.altsep = _osaltsep
+ """
+ os.altsep # for pyflakes, because it does not see os in the doctest
+
+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()
More information about the Mercurial-devel
mailing list