Mercurial > hg
annotate tests/test-demandimport.py @ 42619:20d0e59be79b
tests: show the files fields of changelogs for many merges
I don't think there's coverage for many of the subtle cases, and I
found it hard to understand what the code is doing by reading it. The
test takes 40s to run on a laptop, or 9s with --chg.
I have yet to find a description of what the files field is supposed
to be for merges. I thought it could be one of:
1. the files added/modified/removed relative to p1 (wouldn't seem
useful, but `hg diff -c -r mergerev` has this behavior)
2. the files with filelog nodes not in either parent (i.e., what is
needed to create a bundle out of a commit)
3. the files added/removed/modified files by merge itself [1]
It's clearly not 1, because file contents merges are symmetric. It's
clearly not 2 because removed files and exec bit changes are
listed. It's also not 3 but I think it's intended to be 3 and the
differences are bugs.
Assuming 3, the test shows that, for merges, the list of files both
overapproximates and underapproximates. All the cases involve file
changes not in the filelog but in the manifest (existence of file
at revision, exec bit and file vs symlink).
I didn't look at all underapproximations, but they looked minor. The
two overapproximations are problematic though because they both cause
potentially long lists of files when merging cleanly.
[1] even what it means for the merge commit itself to change a file is
not completely trivial. A file in the merge being the same as in one
of the parent is too lax as it would consider that merges change
nothing when they revert all the changes done on one side. The
criteria used in the test and in the next commit for "merge didn't
touch a file" is:
- the parents and the merge all have the same file
- or, one parent didn't touch the file and the other parent contains
the same file as the merge
Differential Revision: https://phab.mercurial-scm.org/D6612
author | Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> |
---|---|
date | Tue, 02 Jul 2019 12:55:51 -0400 |
parents | 30248d6bc057 |
children | 2372284d9457 |
rev | line source |
---|---|
33918
eddca62d9e64
tests: ensure demandimport test uses absolute_import
Augie Fackler <raf@durin42.com>
parents:
32448
diff
changeset
|
1 from __future__ import absolute_import, print_function |
28948
16390f4cccf0
py3: make test-demandimport use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27535
diff
changeset
|
2 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
3 from mercurial import demandimport |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 demandimport.enable() |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
5 |
23643
2205d00b6d2b
demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents:
21025
diff
changeset
|
6 import os |
29868
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
7 import subprocess |
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
8 import sys |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
9 import types |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
10 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
11 # Don't import pycompat because it has too many side-effects. |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
12 ispy3 = sys.version_info[0] >= 3 |
29868
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
13 |
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
14 # Only run if demandimport is allowed |
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
15 if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'], |
4b50e1f922a0
tests: skip demandimport if disabled
timeless <timeless@mozdev.org>
parents:
28948
diff
changeset
|
16 'demandimport']): |
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 |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
23 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
24 from importlib.util import _LazyModule |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
25 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
26 try: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
27 from importlib.util import _Module as moduletype |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
28 except ImportError: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
29 moduletype = types.ModuleType |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
30 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
31 moduletype = types.ModuleType |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
32 |
23643
2205d00b6d2b
demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents:
21025
diff
changeset
|
33 if os.name != 'nt': |
2205d00b6d2b
demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents:
21025
diff
changeset
|
34 try: |
2205d00b6d2b
demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents:
21025
diff
changeset
|
35 import distutils.msvc9compiler |
28948
16390f4cccf0
py3: make test-demandimport use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27535
diff
changeset
|
36 print('distutils.msvc9compiler needs to be an immediate ' |
16390f4cccf0
py3: make test-demandimport use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27535
diff
changeset
|
37 'importerror on non-windows platforms') |
23643
2205d00b6d2b
demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents:
21025
diff
changeset
|
38 distutils.msvc9compiler |
2205d00b6d2b
demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents:
21025
diff
changeset
|
39 except ImportError: |
2205d00b6d2b
demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents:
21025
diff
changeset
|
40 pass |
2205d00b6d2b
demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents:
21025
diff
changeset
|
41 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
42 import re |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
43 |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
44 rsub = re.sub |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
45 def f(obj): |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
46 l = repr(obj) |
4802
3a4310e8fe72
test-demandimport: match upper-case hexadecimal
Patrick Mezard <pmezard@gmail.com>
parents:
4631
diff
changeset
|
47 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
|
48 l = rsub("from '.*'", "from '?'", l) |
13083
c0290fc6b486
test-demandimport.py: PyPy support
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12865
diff
changeset
|
49 l = rsub("'<[a-z]*>'", "'<whatever>'", l) |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
50 return l |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
51 |
36237
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
52 demandimport.disable() |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
53 os.environ['HGDEMANDIMPORT'] = 'disable' |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
54 # 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
|
55 demandimport.enable() |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
56 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
|
57 |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
58 # 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
|
59 # functions changes behavior of the demand importer. |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
60 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
61 assert not isinstance(node, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
62 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
63 assert f(node) == "<module 'mercurial.node' from '?'>", f(node) |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
64 |
36237
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
65 # now enable it for real |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
66 del os.environ['HGDEMANDIMPORT'] |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
67 demandimport.enable() |
b39f0fdb0338
tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents:
33918
diff
changeset
|
68 |
36251
c2c5f9f6fa21
tests: avoid referring to pvec in demandimport test
Martin von Zweigbergk <martinvonz@google.com>
parents:
36237
diff
changeset
|
69 # 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
|
70 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
|
71 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
|
72 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
73 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
74 # unsure why this isn't lazy. |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
75 assert not isinstance(f, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
76 assert f(errorproxy) == "<module 'mercurial.error' from '?'>", f(errorproxy) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
77 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
78 assert f(errorproxy) == "<unloaded module 'error'>", f(errorproxy) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
79 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
80 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
|
81 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
|
82 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
|
83 |
36251
c2c5f9f6fa21
tests: avoid referring to pvec in demandimport test
Martin von Zweigbergk <martinvonz@google.com>
parents:
36237
diff
changeset
|
84 # __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
|
85 # resolved |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
86 name = errorproxy.__dict__['__name__'] |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
87 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
|
88 |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
89 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
90 assert not isinstance(errorproxy, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
91 assert f(errorproxy) == "<module 'mercurial.error' from '?'>", f(errorproxy) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
92 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
93 assert f(errorproxy) == "<proxied module 'error'>", f(errorproxy) |
36251
c2c5f9f6fa21
tests: avoid referring to pvec in demandimport test
Martin von Zweigbergk <martinvonz@google.com>
parents:
36237
diff
changeset
|
94 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
95 import os |
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
96 |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
97 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
98 assert not isinstance(os, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
99 assert f(os) == "<module 'os' from '?'>", f(os) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
100 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
101 assert f(os) == "<unloaded module 'os'>", f(os) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
102 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
103 assert f(os.system) == '<built-in function system>', f(os.system) |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
104 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
|
105 |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
106 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
|
107 from mercurial.utils import procutil |
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 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
110 assert isinstance(procutil, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
111 assert f(procutil) == "<module 'mercurial.utils.procutil' from '?'>", f( |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
112 procutil |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
113 ) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
114 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
115 assert f(procutil) == "<unloaded module 'procutil'>", f(procutil) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
116 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
117 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
|
118 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
|
119 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
|
120 procutil |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
121 ) |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
122 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
|
123 |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
124 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
|
125 from mercurial import hgweb |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
126 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
127 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
128 assert not isinstance(hgweb, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
129 assert f(hgweb) == "<module 'mercurial.hgweb' from '?'>", f(hgweb) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
130 assert isinstance(hgweb.hgweb_mod, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
131 assert ( |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
132 f(hgweb.hgweb_mod) == "<module 'mercurial.hgweb.hgweb_mod' from '?'>" |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
133 ), f(hgweb.hgweb_mod) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
134 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
135 assert f(hgweb) == "<unloaded module 'hgweb'>", f(hgweb) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
136 assert f(hgweb.hgweb_mod) == "<unloaded module 'hgweb_mod'>", f( |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
137 hgweb.hgweb_mod |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
138 ) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
139 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
140 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
|
141 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
142 import re as fred |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
143 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
144 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
145 assert not isinstance(fred, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
146 assert f(fred) == "<module 're' from '?'>" |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
147 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
148 assert f(fred) == "<unloaded module 're'>", f(fred) |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
149 |
32447
252d2260c74e
demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org>
parents:
30647
diff
changeset
|
150 import re as remod |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
151 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
152 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
153 assert not isinstance(remod, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
154 assert f(remod) == "<module 're' from '?'>" |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
155 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
156 assert f(remod) == "<unloaded module 're'>", f(remod) |
32447
252d2260c74e
demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org>
parents:
30647
diff
changeset
|
157 |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
158 import sys as re |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
159 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
160 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
161 assert not isinstance(re, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
162 assert f(re) == "<module 'sys' (built-in)>" |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
163 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
164 assert f(re) == "<unloaded module 'sys'>", f(re) |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
165 |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
166 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
167 assert not isinstance(fred, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
168 assert f(fred) == "<module 're' from '?'>", f(fred) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
169 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
170 assert f(fred) == "<unloaded module 're'>", f(fred) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
171 |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
172 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
|
173 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
174 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
175 assert not isinstance(fred, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
176 assert f(fred) == "<module 're' from '?'>", f(fred) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
177 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
178 assert f(fred) == "<proxied module 're'>", f(fred) |
4631
e3afa670e484
demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
179 |
32447
252d2260c74e
demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org>
parents:
30647
diff
changeset
|
180 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
|
181 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
|
182 |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
183 if ispy3: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
184 assert not isinstance(re, _LazyModule) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
185 assert f(re) == "<module 'sys' (built-in)>" |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
186 assert f(type(re.stderr)) == "<class '_io.TextIOWrapper'>", f( |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
187 type(re.stderr) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
188 ) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
189 assert f(re) == "<module 'sys' (built-in)>" |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
190 else: |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
191 assert f(re) == "<unloaded module 'sys'>", f(re) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
192 assert f(re.stderr) == "<open file '<whatever>', mode 'w' at 0x?>", f( |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
193 re.stderr |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
194 ) |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
195 assert f(re) == "<proxied module 'sys'>", f(re) |
21025
54af51c18c4c
demandimport: make it possible to disable by setting HGDEMANDIMPORT=disable
Mads Kiilerich <madski@unity3d.com>
parents:
13083
diff
changeset
|
196 |
41507
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
197 assert 'telnetlib' not in sys.modules |
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
198 import telnetlib |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
199 |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
200 if ispy3: |
41507
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
201 assert not isinstance(telnetlib, _LazyModule) |
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
202 assert f(telnetlib) == "<module 'telnetlib' from '?'>" |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
203 else: |
41507
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
204 assert f(telnetlib) == "<unloaded module 'telnetlib'>", f(telnetlib) |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
205 |
30022
26a4e46af2bc
demandimport: error out early on missing attribute of non package (issue5373)
Yuya Nishihara <yuya@tcha.org>
parents:
29981
diff
changeset
|
206 try: |
41507
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
207 from telnetlib import unknownattr |
41505
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
208 |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
209 assert False, ( |
dffd6a301570
py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37964
diff
changeset
|
210 'no demandmod should be created for attribute of non-package ' |
41507
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
211 'module:\ntelnetlib.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
|
212 ) |
30022
26a4e46af2bc
demandimport: error out early on missing attribute of non package (issue5373)
Yuya Nishihara <yuya@tcha.org>
parents:
29981
diff
changeset
|
213 except ImportError as inst: |
41506
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
214 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
|
215 'cannot import name unknownattr' |
3e89736b98ce
py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41505
diff
changeset
|
216 ) |
30647
1914db1b7d9e
demandimport: do not raise ImportError for unknown item in fromlist
Yuya Nishihara <yuya@tcha.org>
parents:
30022
diff
changeset
|
217 |
37964
1d0610fdd63b
tests: migrate demandimport.py away from deprecated `util` module symbols
Matt Harbison <matt_harbison@yahoo.com>
parents:
36251
diff
changeset
|
218 from mercurial import util |
1d0610fdd63b
tests: migrate demandimport.py away from deprecated `util` module symbols
Matt Harbison <matt_harbison@yahoo.com>
parents:
36251
diff
changeset
|
219 |
30647
1914db1b7d9e
demandimport: do not raise ImportError for unknown item in fromlist
Yuya Nishihara <yuya@tcha.org>
parents:
30022
diff
changeset
|
220 # 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
|
221 # 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
|
222 # (see Python/import.c:import_module_level() and ensure_fromlist()) |
41507
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
223 assert 'zipfile' not in sys.modules |
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
224 zipfileimp = __import__('zipfile', globals(), locals(), ['unknownattr']) |
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
225 assert f(zipfileimp) == "<module 'zipfile' from '?'>", f(zipfileimp) |
30248d6bc057
tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41506
diff
changeset
|
226 assert not util.safehasattr(zipfileimp, 'unknownattr') |