Show More
@@ -1,81 +1,78 b'' | |||||
1 | # this is hack to make sure no escape characters are inserted into the output |
|
1 | # this is hack to make sure no escape characters are inserted into the output | |
2 |
|
2 | |||
3 | from __future__ import absolute_import |
|
3 | from __future__ import absolute_import | |
4 |
|
4 | |||
5 | import doctest |
|
5 | import doctest | |
6 | import os |
|
6 | import os | |
7 | import re |
|
7 | import re | |
8 | import sys |
|
8 | import sys | |
9 |
|
9 | |||
10 | ispy3 = (sys.version_info[0] >= 3) |
|
10 | ispy3 = (sys.version_info[0] >= 3) | |
11 |
|
11 | |||
12 | if 'TERM' in os.environ: |
|
12 | if 'TERM' in os.environ: | |
13 | del os.environ['TERM'] |
|
13 | del os.environ['TERM'] | |
14 |
|
14 | |||
15 | class py3docchecker(doctest.OutputChecker): |
|
15 | class py3docchecker(doctest.OutputChecker): | |
16 | def check_output(self, want, got, optionflags): |
|
16 | def check_output(self, want, got, optionflags): | |
17 | want2 = re.sub(r'''\bu(['"])(.*?)\1''', r'\1\2\1', want) # py2: u'' |
|
17 | want2 = re.sub(r'''\bu(['"])(.*?)\1''', r'\1\2\1', want) # py2: u'' | |
18 | got2 = re.sub(r'''\bb(['"])(.*?)\1''', r'\1\2\1', got) # py3: b'' |
|
18 | got2 = re.sub(r'''\bb(['"])(.*?)\1''', r'\1\2\1', got) # py3: b'' | |
19 | # py3: <exc.name>: b'<msg>' -> <name>: <msg> |
|
19 | # py3: <exc.name>: b'<msg>' -> <name>: <msg> | |
20 | # <exc.name>: <others> -> <name>: <others> |
|
20 | # <exc.name>: <others> -> <name>: <others> | |
21 | got2 = re.sub(r'''^mercurial\.\w+\.(\w+): (['"])(.*?)\2''', r'\1: \3', |
|
21 | got2 = re.sub(r'''^mercurial\.\w+\.(\w+): (['"])(.*?)\2''', r'\1: \3', | |
22 | got2, re.MULTILINE) |
|
22 | got2, re.MULTILINE) | |
23 | got2 = re.sub(r'^mercurial\.\w+\.(\w+): ', r'\1: ', got2, re.MULTILINE) |
|
23 | got2 = re.sub(r'^mercurial\.\w+\.(\w+): ', r'\1: ', got2, re.MULTILINE) | |
24 | return any(doctest.OutputChecker.check_output(self, w, g, optionflags) |
|
24 | return any(doctest.OutputChecker.check_output(self, w, g, optionflags) | |
25 | for w, g in [(want, got), (want2, got2)]) |
|
25 | for w, g in [(want, got), (want2, got2)]) | |
26 |
|
26 | |||
27 | # TODO: migrate doctests to py3 and enable them on both versions |
|
27 | def testmod(name, optionflags=0, testtarget=None): | |
28 | def testmod(name, optionflags=0, testtarget=None, py2=True, py3=True): |
|
|||
29 | if not (not ispy3 and py2 or ispy3 and py3): |
|
|||
30 | return |
|
|||
31 | __import__(name) |
|
28 | __import__(name) | |
32 | mod = sys.modules[name] |
|
29 | mod = sys.modules[name] | |
33 | if testtarget is not None: |
|
30 | if testtarget is not None: | |
34 | mod = getattr(mod, testtarget) |
|
31 | mod = getattr(mod, testtarget) | |
35 |
|
32 | |||
36 | # minimal copy of doctest.testmod() |
|
33 | # minimal copy of doctest.testmod() | |
37 | finder = doctest.DocTestFinder() |
|
34 | finder = doctest.DocTestFinder() | |
38 | checker = None |
|
35 | checker = None | |
39 | if ispy3: |
|
36 | if ispy3: | |
40 | checker = py3docchecker() |
|
37 | checker = py3docchecker() | |
41 | runner = doctest.DocTestRunner(checker=checker, optionflags=optionflags) |
|
38 | runner = doctest.DocTestRunner(checker=checker, optionflags=optionflags) | |
42 | for test in finder.find(mod, name): |
|
39 | for test in finder.find(mod, name): | |
43 | runner.run(test) |
|
40 | runner.run(test) | |
44 | runner.summarize() |
|
41 | runner.summarize() | |
45 |
|
42 | |||
46 | testmod('mercurial.changegroup') |
|
43 | testmod('mercurial.changegroup') | |
47 | testmod('mercurial.changelog') |
|
44 | testmod('mercurial.changelog') | |
48 | testmod('mercurial.color') |
|
45 | testmod('mercurial.color') | |
49 | testmod('mercurial.config') |
|
46 | testmod('mercurial.config') | |
50 | testmod('mercurial.context') |
|
47 | testmod('mercurial.context') | |
51 | testmod('mercurial.dagparser', optionflags=doctest.NORMALIZE_WHITESPACE) |
|
48 | testmod('mercurial.dagparser', optionflags=doctest.NORMALIZE_WHITESPACE) | |
52 | testmod('mercurial.dispatch') |
|
49 | testmod('mercurial.dispatch') | |
53 | testmod('mercurial.encoding') |
|
50 | testmod('mercurial.encoding') | |
54 | testmod('mercurial.formatter') |
|
51 | testmod('mercurial.formatter') | |
55 | testmod('mercurial.hg') |
|
52 | testmod('mercurial.hg') | |
56 | testmod('mercurial.hgweb.hgwebdir_mod') |
|
53 | testmod('mercurial.hgweb.hgwebdir_mod') | |
57 | testmod('mercurial.match') |
|
54 | testmod('mercurial.match') | |
58 | testmod('mercurial.mdiff') |
|
55 | testmod('mercurial.mdiff') | |
59 | testmod('mercurial.minirst') |
|
56 | testmod('mercurial.minirst') | |
60 | testmod('mercurial.patch') |
|
57 | testmod('mercurial.patch') | |
61 | testmod('mercurial.pathutil') |
|
58 | testmod('mercurial.pathutil') | |
62 | testmod('mercurial.parser') |
|
59 | testmod('mercurial.parser') | |
63 | testmod('mercurial.pycompat') |
|
60 | testmod('mercurial.pycompat') | |
64 | testmod('mercurial.revsetlang') |
|
61 | testmod('mercurial.revsetlang') | |
65 | testmod('mercurial.smartset') |
|
62 | testmod('mercurial.smartset') | |
66 | testmod('mercurial.store') |
|
63 | testmod('mercurial.store') | |
67 | testmod('mercurial.subrepo') |
|
64 | testmod('mercurial.subrepo') | |
68 | testmod('mercurial.templatefilters') |
|
65 | testmod('mercurial.templatefilters') | |
69 | testmod('mercurial.templater') |
|
66 | testmod('mercurial.templater') | |
70 | testmod('mercurial.ui') |
|
67 | testmod('mercurial.ui') | |
71 | testmod('mercurial.url') |
|
68 | testmod('mercurial.url') | |
72 | testmod('mercurial.util') |
|
69 | testmod('mercurial.util') | |
73 | testmod('mercurial.util', testtarget='platform') |
|
70 | testmod('mercurial.util', testtarget='platform') | |
74 | testmod('hgext.convert.convcmd') |
|
71 | testmod('hgext.convert.convcmd') | |
75 | testmod('hgext.convert.cvsps') |
|
72 | testmod('hgext.convert.cvsps') | |
76 | testmod('hgext.convert.filemap') |
|
73 | testmod('hgext.convert.filemap') | |
77 | testmod('hgext.convert.p4') |
|
74 | testmod('hgext.convert.p4') | |
78 | testmod('hgext.convert.subversion') |
|
75 | testmod('hgext.convert.subversion') | |
79 | testmod('hgext.mq') |
|
76 | testmod('hgext.mq') | |
80 | # Helper scripts in tests/ that have doctests: |
|
77 | # Helper scripts in tests/ that have doctests: | |
81 | testmod('drawdag') |
|
78 | testmod('drawdag') |
General Comments 0
You need to be logged in to leave comments.
Login now