Mercurial > hg
annotate tests/test-demandimport.py @ 52285:94cf83d9a2c9
sslutil: drop support for Python prior to 3.7
There's also a block of code around line 47 related to `ssl.HAS_TLSv1` to
determine the supported protocols that references "Python 3.7", but I'm not
altering that because the commit referenced there wasn't landed until just prior
to the 3.9 release, and I'm not sure what flavors of py38 might not have a
backport.
Avoid de-indenting for now for a clearer text diff.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 08 Nov 2024 19:48:06 -0500 |
parents | b2e90465daf6 |
children |
rev | line source |
---|---|
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 from mercurial import demandimport |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41507
diff
changeset
|
2 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
3 demandimport.enable() |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 |
23643
2205d00b6d2b
demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents:
21025
diff
changeset
|
5 import os |
29868
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
6 import subprocess |
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
7 import sys |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
8 import types |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
9 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
10 # Don't import pycompat because it has too many side-effects. |
49941
643312047e44
tests: os module is frozen in Python 3.11 (issue6786)
Anton Shestakov <av6@dwimlabs.net>
parents:
48875
diff
changeset
|
11 ispy311 = (sys.version_info.major, sys.version_info.minor) >= (3, 11) |
29868
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
12 |
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
13 # Only run if demandimport is allowed |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41507
diff
changeset
|
14 if subprocess.call( |
46226
0826d684a1b5
test: replace a many occurence of `python` with `$PYTHON`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45396
diff
changeset
|
15 [os.environ['PYTHON'], '%s/hghave' % os.environ['TESTDIR'], 'demandimport'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41507
diff
changeset
|
16 ): |
29868
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
17 sys.exit(80) |
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
18 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
19 # We rely on assert, which gets optimized out. |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
20 if sys.flags.optimize: |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
21 sys.exit(80) |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
22 |
44117
c5e0a9b97b8a
hgdemandimport: disable on Python 3.5
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
23 # The demand importer doesn't work on Python 3.5. |
c5e0a9b97b8a
hgdemandimport: disable on Python 3.5
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
24 if sys.version_info[0:2] == (3, 5): |
c5e0a9b97b8a
hgdemandimport: disable on Python 3.5
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
25 sys.exit(80) |
c5e0a9b97b8a
hgdemandimport: disable on Python 3.5
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
26 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
27 from importlib.util import _LazyModule |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
28 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
29 try: |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
30 from importlib.util import _Module as moduletype |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
31 except ImportError: |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
32 moduletype = types.ModuleType |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
33 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
34 import re |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
35 |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
36 rsub = re.sub |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41507
diff
changeset
|
37 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41507
diff
changeset
|
38 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
39 def f(obj): |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
40 l = repr(obj) |
4802
3a4310e8fe72
test-demandimport: match upper-case hexadecimal
Patrick Mezard <pmezard@gmail.com>
parents:
4631
diff
changeset
|
41 l = rsub("0x[0-9a-fA-F]+", "0x?", l) |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
42 l = rsub("from '.*'", "from '?'", l) |
13083
c0290fc6b486
test-demandimport.py: PyPy support
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12865
diff
changeset
|
43 l = rsub("'<[a-z]*>'", "'<whatever>'", l) |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
44 return l |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
45 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41507
diff
changeset
|
46 |
36237
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
47 demandimport.disable() |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
48 os.environ['HGDEMANDIMPORT'] = 'disable' |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
49 # this enable call should not actually enable demandimport! |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
50 demandimport.enable() |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
51 from mercurial import node |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
52 |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
53 # We use assert instead of a unittest test case because having imports inside |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
54 # functions changes behavior of the demand importer. |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
55 assert not isinstance(node, _LazyModule) |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
56 |
36237
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
57 # now enable it for real |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
58 del os.environ['HGDEMANDIMPORT'] |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
59 demandimport.enable() |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
60 |
36251
c2c5f9f6fa21
tests: avoid referring to pvec in demandimport test
Martin von Zweigbergk <martinvonz@google.com>
parents:
36237
diff
changeset
|
61 # Test access to special attributes through demandmod proxy |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
62 assert 'mercurial.error' not in sys.modules |
36251
c2c5f9f6fa21
tests: avoid referring to pvec in demandimport test
Martin von Zweigbergk <martinvonz@google.com>
parents:
36237
diff
changeset
|
63 from mercurial import error as errorproxy |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
64 |
49972
1bd33932713d
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
65 assert isinstance(errorproxy, _LazyModule) |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
66 assert f(errorproxy) == "<module 'mercurial.error' from '?'>", f(errorproxy) |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
67 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
68 doc = ' '.join(errorproxy.__doc__.split()[:3]) |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
69 assert doc == 'Mercurial exceptions. This', doc |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
70 assert errorproxy.__name__ == 'mercurial.error', errorproxy.__name__ |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
71 |
36251
c2c5f9f6fa21
tests: avoid referring to pvec in demandimport test
Martin von Zweigbergk <martinvonz@google.com>
parents:
36237
diff
changeset
|
72 # __name__ must be accessible via __dict__ so the relative imports can be |
c2c5f9f6fa21
tests: avoid referring to pvec in demandimport test
Martin von Zweigbergk <martinvonz@google.com>
parents:
36237
diff
changeset
|
73 # resolved |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
74 name = errorproxy.__dict__['__name__'] |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
75 assert name == 'mercurial.error', name |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
76 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
77 assert not isinstance(errorproxy, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
78 assert f(errorproxy) == "<module 'mercurial.error' from '?'>", f(errorproxy) |
36251
c2c5f9f6fa21
tests: avoid referring to pvec in demandimport test
Martin von Zweigbergk <martinvonz@google.com>
parents:
36237
diff
changeset
|
79 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
80 import os |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
81 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
82 assert not isinstance(os, _LazyModule) |
49972
1bd33932713d
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
83 if ispy311: |
1bd33932713d
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
84 assert f(os) == "<module 'os' (frozen)>", f(os) |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
85 else: |
49972
1bd33932713d
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
86 assert f(os) == "<module 'os' from '?'>", f(os) |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
87 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
88 assert f(os.system) == '<built-in function system>', f(os.system) |
49941
643312047e44
tests: os module is frozen in Python 3.11 (issue6786)
Anton Shestakov <av6@dwimlabs.net>
parents:
48875
diff
changeset
|
89 if ispy311: |
643312047e44
tests: os module is frozen in Python 3.11 (issue6786)
Anton Shestakov <av6@dwimlabs.net>
parents:
48875
diff
changeset
|
90 assert f(os) == "<module 'os' (frozen)>", f(os) |
643312047e44
tests: os module is frozen in Python 3.11 (issue6786)
Anton Shestakov <av6@dwimlabs.net>
parents:
48875
diff
changeset
|
91 else: |
643312047e44
tests: os module is frozen in Python 3.11 (issue6786)
Anton Shestakov <av6@dwimlabs.net>
parents:
48875
diff
changeset
|
92 assert f(os) == "<module 'os' from '?'>", f(os) |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
93 |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
94 assert 'mercurial.utils.procutil' not in sys.modules |
37964
1d0610fdd63b
tests: migrate demandimport.py away from deprecated `util` module symbols
Matt Harbison <matt_harbison@yahoo.com>
parents:
36251
diff
changeset
|
95 from mercurial.utils import procutil |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
96 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
97 assert isinstance(procutil, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
98 assert f(procutil) == "<module 'mercurial.utils.procutil' from '?'>", f( |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
99 procutil |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
100 ) |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
101 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
102 assert f(procutil.system) == '<function system at 0x?>', f(procutil.system) |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
103 assert procutil.__class__ == moduletype, procutil.__class__ |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
104 assert f(procutil) == "<module 'mercurial.utils.procutil' from '?'>", f( |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
105 procutil |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
106 ) |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
107 assert f(procutil.system) == '<function system at 0x?>', f(procutil.system) |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
108 |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
109 assert 'mercurial.hgweb' not in sys.modules |
27535
0d0f4070f6d7
test-demandimport: ensure that relative imports are deferred
Bryan O'Sullivan <bos@serpentine.com>
parents:
23643
diff
changeset
|
110 from mercurial import hgweb |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
111 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
112 assert isinstance(hgweb, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
113 assert f(hgweb) == "<module 'mercurial.hgweb' from '?'>", f(hgweb) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
114 assert isinstance(hgweb.hgweb_mod, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
115 assert f(hgweb.hgweb_mod) == "<module 'mercurial.hgweb.hgweb_mod' from '?'>", f( |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
116 hgweb.hgweb_mod |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
117 ) |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
118 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
119 assert f(hgweb) == "<module 'mercurial.hgweb' from '?'>", f(hgweb) |
27535
0d0f4070f6d7
test-demandimport: ensure that relative imports are deferred
Bryan O'Sullivan <bos@serpentine.com>
parents:
23643
diff
changeset
|
120 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
121 import re as fred |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
122 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
123 assert not isinstance(fred, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
124 assert f(fred) == "<module 're' from '?'>" |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
125 |
32447
252d2260c74e
demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org>
parents:
30647
diff
changeset
|
126 import re as remod |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
127 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
128 assert not isinstance(remod, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
129 assert f(remod) == "<module 're' from '?'>" |
32447
252d2260c74e
demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org>
parents:
30647
diff
changeset
|
130 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
131 import sys as re |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
132 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
133 assert not isinstance(re, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
134 assert f(re) == "<module 'sys' (built-in)>" |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
135 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
136 assert not isinstance(fred, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
137 assert f(fred) == "<module 're' from '?'>", f(fred) |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
138 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
139 assert f(fred.sub) == '<function sub at 0x?>', f(fred.sub) |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
140 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
141 assert not isinstance(fred, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
142 assert f(fred) == "<module 're' from '?'>", f(fred) |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
143 |
32447
252d2260c74e
demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org>
parents:
30647
diff
changeset
|
144 remod.escape # use remod |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
145 assert f(remod) == "<module 're' from '?'>", f(remod) |
32447
252d2260c74e
demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org>
parents:
30647
diff
changeset
|
146 |
49871
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
147 assert not isinstance(re, _LazyModule) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
148 assert f(re) == "<module 'sys' (built-in)>" |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
149 assert f(type(re.stderr)) == "<class '_io.TextIOWrapper'>", f(type(re.stderr)) |
ecde742a5a9d
tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49588
diff
changeset
|
150 assert f(re) == "<module 'sys' (built-in)>" |
21025
54af51c18c4c
demandimport: make it possible to disable by setting HGDEMANDIMPORT=disable
Mads Kiilerich <madski@unity3d.com>
parents:
13083
diff
changeset
|
151 |
52010
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
152 assert 'wsgiref' not in sys.modules |
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
153 import wsgiref |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
154 |
52010
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
155 assert isinstance(wsgiref, _LazyModule) |
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
156 assert f(wsgiref) == "<module 'wsgiref' from '?'>" |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
157 |
30022
26a4e46af2bc
demandimport: error out early on missing attribute of non package (issue5373)
Yuya Nishihara <yuya@tcha.org>
parents:
29981
diff
changeset
|
158 try: |
52010
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
159 from wsgiref import unknownattr |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
160 |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
161 assert False, ( |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
162 'no demandmod should be created for attribute of non-package ' |
52010
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
163 'module:\nwsgiref.unknownattr = %s' % f(unknownattr) |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
164 ) |
30022
26a4e46af2bc
demandimport: error out early on missing attribute of non package (issue5373)
Yuya Nishihara <yuya@tcha.org>
parents:
29981
diff
changeset
|
165 except ImportError as inst: |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
166 assert rsub(r"'", '', str(inst)).startswith( |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
167 'cannot import name unknownattr' |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
168 ) |
30647
1914db1b7d9e
demandimport: do not raise ImportError for unknown item in fromlist
Yuya Nishihara <yuya@tcha.org>
parents:
30022
diff
changeset
|
169 |
1914db1b7d9e
demandimport: do not raise ImportError for unknown item in fromlist
Yuya Nishihara <yuya@tcha.org>
parents:
30022
diff
changeset
|
170 # Unlike the import statement, __import__() function should not raise |
1914db1b7d9e
demandimport: do not raise ImportError for unknown item in fromlist
Yuya Nishihara <yuya@tcha.org>
parents:
30022
diff
changeset
|
171 # ImportError even if fromlist has an unknown item |
1914db1b7d9e
demandimport: do not raise ImportError for unknown item in fromlist
Yuya Nishihara <yuya@tcha.org>
parents:
30022
diff
changeset
|
172 # (see Python/import.c:import_module_level() and ensure_fromlist()) |
45396
fc8299319ffe
tests: fix test-demandimport.py on Python 3.9
Manuel Jacob <me@manueljacob.de>
parents:
44118
diff
changeset
|
173 assert 'ftplib' not in sys.modules |
fc8299319ffe
tests: fix test-demandimport.py on Python 3.9
Manuel Jacob <me@manueljacob.de>
parents:
44118
diff
changeset
|
174 zipfileimp = __import__('ftplib', globals(), locals(), ['unknownattr']) |
fc8299319ffe
tests: fix test-demandimport.py on Python 3.9
Manuel Jacob <me@manueljacob.de>
parents:
44118
diff
changeset
|
175 assert f(zipfileimp) == "<module 'ftplib' from '?'>", f(zipfileimp) |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49972
diff
changeset
|
176 assert not hasattr(zipfileimp, 'unknownattr') |
49588
7236f11db0c3
demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents:
48875
diff
changeset
|
177 |
7236f11db0c3
demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents:
48875
diff
changeset
|
178 |
7236f11db0c3
demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents:
48875
diff
changeset
|
179 # test deactivation for issue6725 |
52010
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
180 del sys.modules['wsgiref'] |
49588
7236f11db0c3
demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents:
48875
diff
changeset
|
181 with demandimport.deactivated(): |
52010
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
182 import wsgiref |
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
183 assert wsgiref.__loader__ == wsgiref.__spec__.loader |
37f693975cbc
demande-import-test: use `wsgiref` instead of `telnetlib` for testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50928
diff
changeset
|
184 assert wsgiref.__loader__.get_resource_reader |