##// END OF EJS Templates
tests: enable import checker for tests/**.py files...
Yuya Nishihara -
r28844:99a2bdad default
parent child Browse files
Show More
@@ -1,146 +1,155
1 1 #require test-repo
2 2
3 3 $ import_checker="$TESTDIR"/../contrib/import-checker.py
4 4
5 5 Run the doctests from the import checker, and make sure
6 6 it's working correctly.
7 7 $ TERM=dumb
8 8 $ export TERM
9 9 $ python -m doctest $import_checker
10 10
11 11 Run additional tests for the import checker
12 12
13 13 $ mkdir testpackage
14 14
15 15 $ cat > testpackage/multiple.py << EOF
16 16 > from __future__ import absolute_import
17 17 > import os, sys
18 18 > EOF
19 19
20 20 $ cat > testpackage/unsorted.py << EOF
21 21 > from __future__ import absolute_import
22 22 > import sys
23 23 > import os
24 24 > EOF
25 25
26 26 $ cat > testpackage/stdafterlocal.py << EOF
27 27 > from __future__ import absolute_import
28 28 > from . import unsorted
29 29 > import os
30 30 > EOF
31 31
32 32 $ cat > testpackage/requirerelative.py << EOF
33 33 > from __future__ import absolute_import
34 34 > import testpackage.unsorted
35 35 > EOF
36 36
37 37 $ cat > testpackage/importalias.py << EOF
38 38 > from __future__ import absolute_import
39 39 > import ui
40 40 > EOF
41 41
42 42 $ cat > testpackage/relativestdlib.py << EOF
43 43 > from __future__ import absolute_import
44 44 > from .. import os
45 45 > EOF
46 46
47 47 $ cat > testpackage/symbolimport.py << EOF
48 48 > from __future__ import absolute_import
49 49 > from .unsorted import foo
50 50 > EOF
51 51
52 52 $ cat > testpackage/latesymbolimport.py << EOF
53 53 > from __future__ import absolute_import
54 54 > from . import unsorted
55 55 > from mercurial.node import hex
56 56 > EOF
57 57
58 58 $ cat > testpackage/multiplegroups.py << EOF
59 59 > from __future__ import absolute_import
60 60 > from . import unsorted
61 61 > from . import more
62 62 > EOF
63 63
64 64 $ mkdir testpackage/subpackage
65 65 $ cat > testpackage/subpackage/levelpriority.py << EOF
66 66 > from __future__ import absolute_import
67 67 > from . import foo
68 68 > from .. import parent
69 69 > EOF
70 70
71 71 $ touch testpackage/subpackage/foo.py
72 72 $ cat > testpackage/subpackage/__init__.py << EOF
73 73 > from __future__ import absolute_import
74 74 > from . import levelpriority # should not cause cycle
75 75 > EOF
76 76
77 77 $ cat > testpackage/subpackage/localimport.py << EOF
78 78 > from __future__ import absolute_import
79 79 > from . import foo
80 80 > def bar():
81 81 > # should not cause "higher-level import should come first"
82 82 > from .. import unsorted
83 83 > # but other errors should be detected
84 84 > from .. import more
85 85 > import testpackage.subpackage.levelpriority
86 86 > EOF
87 87
88 88 $ cat > testpackage/importmodulefromsub.py << EOF
89 89 > from __future__ import absolute_import
90 90 > from .subpackage import foo # not a "direct symbol import"
91 91 > EOF
92 92
93 93 $ cat > testpackage/importsymbolfromsub.py << EOF
94 94 > from __future__ import absolute_import
95 95 > from .subpackage import foo, nonmodule
96 96 > EOF
97 97
98 98 $ cat > testpackage/sortedentries.py << EOF
99 99 > from __future__ import absolute_import
100 100 > from . import (
101 101 > foo,
102 102 > bar,
103 103 > )
104 104 > EOF
105 105
106 106 $ cat > testpackage/importfromalias.py << EOF
107 107 > from __future__ import absolute_import
108 108 > from . import ui
109 109 > EOF
110 110
111 111 $ cat > testpackage/importfromrelative.py << EOF
112 112 > from __future__ import absolute_import
113 113 > from testpackage.unsorted import foo
114 114 > EOF
115 115
116 116 $ python "$import_checker" testpackage/*.py testpackage/subpackage/*.py
117 117 testpackage/importalias.py:2: ui module must be "as" aliased to uimod
118 118 testpackage/importfromalias.py:2: ui from testpackage must be "as" aliased to uimod
119 119 testpackage/importfromrelative.py:2: import should be relative: testpackage.unsorted
120 120 testpackage/importfromrelative.py:2: direct symbol import foo from testpackage.unsorted
121 121 testpackage/importsymbolfromsub.py:2: direct symbol import nonmodule from testpackage.subpackage
122 122 testpackage/latesymbolimport.py:3: symbol import follows non-symbol import: mercurial.node
123 123 testpackage/multiple.py:2: multiple imported names: os, sys
124 124 testpackage/multiplegroups.py:3: multiple "from . import" statements
125 125 testpackage/relativestdlib.py:2: relative import of stdlib module
126 126 testpackage/requirerelative.py:2: import should be relative: testpackage.unsorted
127 127 testpackage/sortedentries.py:2: imports from testpackage not lexically sorted: bar < foo
128 128 testpackage/stdafterlocal.py:3: stdlib import "os" follows local import: testpackage
129 129 testpackage/subpackage/levelpriority.py:3: higher-level import should come first: testpackage
130 130 testpackage/subpackage/localimport.py:7: multiple "from .. import" statements
131 131 testpackage/subpackage/localimport.py:8: import should be relative: testpackage.subpackage.levelpriority
132 132 testpackage/symbolimport.py:2: direct symbol import foo from testpackage.unsorted
133 133 testpackage/unsorted.py:3: imports not lexically sorted: os < sys
134 134 [1]
135 135
136 136 $ cd "$TESTDIR"/..
137 137
138 138 There are a handful of cases here that require renaming a module so it
139 139 doesn't overlap with a stdlib module name. There are also some cycles
140 140 here that we should still endeavor to fix, and some cycles will be
141 141 hidden by deduplication algorithm in the cycle detector, so fixing
142 142 these may expose other cycles.
143 143
144 $ hg locate 'mercurial/**.py' 'hgext/**.py' | sed 's-\\-/-g' | python "$import_checker" -
144 Known-bad files are excluded by -X as some of them would produce unstable
145 outputs, which should be fixed later.
146
147 $ hg locate 'mercurial/**.py' 'hgext/**.py' 'tests/**.py' \
148 > -X tests/test-hgweb-auth.py \
149 > -X tests/hypothesishelpers.py \
150 > -X tests/test-ctxmanager.py \
151 > -X tests/test-lock.py \
152 > -X tests/test-verify-repo-operations.py \
153 > | sed 's-\\-/-g' | python "$import_checker" -
145 154 Import cycle: hgext.largefiles.basestore -> hgext.largefiles.localstore -> hgext.largefiles.basestore
146 155 [1]
General Comments 0
You need to be logged in to leave comments. Login now