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