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