tests/test-demandimport.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Thu, 31 Aug 2023 23:56:15 +0200
changeset 50928 d718eddf01d9
parent 49972 1bd33932713d
child 51744 be227c60a3e0
child 52010 37f693975cbc
permissions -rw-r--r--
safehasattr: drop usage in favor of hasattr The two functions should now be equivalent at least in their usage in core.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
23643
2205d00b6d2b demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents: 21025
diff changeset
    34
if os.name != 'nt':
2205d00b6d2b demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents: 21025
diff changeset
    35
    try:
2205d00b6d2b demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents: 21025
diff changeset
    36
        import distutils.msvc9compiler
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
        print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41507
diff changeset
    39
            'distutils.msvc9compiler needs to be an immediate '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41507
diff changeset
    40
            'importerror on non-windows platforms'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41507
diff changeset
    41
        )
23643
2205d00b6d2b demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents: 21025
diff changeset
    42
        distutils.msvc9compiler
2205d00b6d2b demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents: 21025
diff changeset
    43
    except ImportError:
2205d00b6d2b demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents: 21025
diff changeset
    44
        pass
2205d00b6d2b demandimport: blacklist distutils.msvc9compiler (issue4475)
Augie Fackler <raf@durin42.com>
parents: 21025
diff changeset
    45
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    46
import re
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    47
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    48
rsub = re.sub
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41507
diff changeset
    49
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41507
diff changeset
    50
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    51
def f(obj):
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    52
    l = repr(obj)
4802
3a4310e8fe72 test-demandimport: match upper-case hexadecimal
Patrick Mezard <pmezard@gmail.com>
parents: 4631
diff changeset
    53
    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
    54
    l = rsub("from '.*'", "from '?'", l)
13083
c0290fc6b486 test-demandimport.py: PyPy support
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12865
diff changeset
    55
    l = rsub("'<[a-z]*>'", "'<whatever>'", l)
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    56
    return l
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    57
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41507
diff changeset
    58
36237
b39f0fdb0338 tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents: 33918
diff changeset
    59
demandimport.disable()
b39f0fdb0338 tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents: 33918
diff changeset
    60
os.environ['HGDEMANDIMPORT'] = 'disable'
b39f0fdb0338 tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents: 33918
diff changeset
    61
# 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
    62
demandimport.enable()
b39f0fdb0338 tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents: 33918
diff changeset
    63
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
    64
dffd6a301570 py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37964
diff changeset
    65
# 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
    66
# 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
    67
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
    68
36237
b39f0fdb0338 tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents: 33918
diff changeset
    69
# now enable it for real
b39f0fdb0338 tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents: 33918
diff changeset
    70
del os.environ['HGDEMANDIMPORT']
b39f0fdb0338 tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents: 33918
diff changeset
    71
demandimport.enable()
b39f0fdb0338 tests: actually check that HGDEMANDIMPORT=disable disables demandimport
Martin von Zweigbergk <martinvonz@google.com>
parents: 33918
diff changeset
    72
36251
c2c5f9f6fa21 tests: avoid referring to pvec in demandimport test
Martin von Zweigbergk <martinvonz@google.com>
parents: 36237
diff changeset
    73
# 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
    74
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
    75
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
    76
49972
1bd33932713d branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49871 49942
diff changeset
    77
assert isinstance(errorproxy, _LazyModule)
49871
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)
41506
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
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
    89
assert not isinstance(errorproxy, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
    90
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
    91
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    92
import os
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    93
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
    94
assert not isinstance(os, _LazyModule)
49972
1bd33932713d branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49871 49942
diff changeset
    95
if ispy311:
1bd33932713d branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49871 49942
diff changeset
    96
    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
    97
else:
49972
1bd33932713d branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49871 49942
diff changeset
    98
    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
    99
41505
dffd6a301570 py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37964
diff changeset
   100
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
   101
if ispy311:
643312047e44 tests: os module is frozen in Python 3.11 (issue6786)
Anton Shestakov <av6@dwimlabs.net>
parents: 48875
diff changeset
   102
    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
   103
else:
643312047e44 tests: os module is frozen in Python 3.11 (issue6786)
Anton Shestakov <av6@dwimlabs.net>
parents: 48875
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
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   109
assert isinstance(procutil, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   110
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
   111
    procutil
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   112
)
41506
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   113
41505
dffd6a301570 py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37964
diff changeset
   114
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
   115
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
   116
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
   117
    procutil
dffd6a301570 py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37964
diff changeset
   118
)
dffd6a301570 py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37964
diff changeset
   119
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
   120
41506
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   121
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
   122
from mercurial import hgweb
41506
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   123
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   124
assert isinstance(hgweb, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   125
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
   126
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
   127
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
   128
    hgweb.hgweb_mod
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   129
)
41506
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   130
41505
dffd6a301570 py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37964
diff changeset
   131
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
   132
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   133
import re as fred
41506
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   134
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   135
assert not isinstance(fred, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   136
assert f(fred) == "<module 're' from '?'>"
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   137
32447
252d2260c74e demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org>
parents: 30647
diff changeset
   138
import re as remod
41506
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   139
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   140
assert not isinstance(remod, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   141
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
   142
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   143
import sys as re
41506
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   144
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   145
assert not isinstance(re, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   146
assert f(re) == "<module 'sys' (built-in)>"
4631
e3afa670e484 demandimport: fix issue579 and add a test
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
   147
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   148
assert not isinstance(fred, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   149
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
   150
41505
dffd6a301570 py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37964
diff changeset
   151
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
   152
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   153
assert not isinstance(fred, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   154
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
   155
32447
252d2260c74e demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org>
parents: 30647
diff changeset
   156
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
   157
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
   158
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   159
assert not isinstance(re, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   160
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
   161
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
   162
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
   163
41507
30248d6bc057 tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41506
diff changeset
   164
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
   165
import telnetlib
41506
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   166
49871
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   167
assert isinstance(telnetlib, _LazyModule)
ecde742a5a9d tests: drop py2 support from test-demandimport.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49588
diff changeset
   168
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
   169
30022
26a4e46af2bc demandimport: error out early on missing attribute of non package (issue5373)
Yuya Nishihara <yuya@tcha.org>
parents: 29981
diff changeset
   170
try:
41507
30248d6bc057 tests: use unimported modules in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41506
diff changeset
   171
    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
   172
dffd6a301570 py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37964
diff changeset
   173
    assert False, (
dffd6a301570 py3: replace print() with assert in test-demandimport.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37964
diff changeset
   174
        '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
   175
        '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
   176
    )
30022
26a4e46af2bc demandimport: error out early on missing attribute of non package (issue5373)
Yuya Nishihara <yuya@tcha.org>
parents: 29981
diff changeset
   177
except ImportError as inst:
41506
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   178
    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
   179
        'cannot import name unknownattr'
3e89736b98ce py3: conditionalize test-demandimport.py for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41505
diff changeset
   180
    )
30647
1914db1b7d9e demandimport: do not raise ImportError for unknown item in fromlist
Yuya Nishihara <yuya@tcha.org>
parents: 30022
diff changeset
   181
1914db1b7d9e demandimport: do not raise ImportError for unknown item in fromlist
Yuya Nishihara <yuya@tcha.org>
parents: 30022
diff changeset
   182
# 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
   183
# 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
   184
# (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
   185
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
   186
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
   187
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
   188
assert not hasattr(zipfileimp, 'unknownattr')
49588
7236f11db0c3 demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents: 48875
diff changeset
   189
7236f11db0c3 demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents: 48875
diff changeset
   190
7236f11db0c3 demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents: 48875
diff changeset
   191
# test deactivation for issue6725
7236f11db0c3 demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents: 48875
diff changeset
   192
del sys.modules['telnetlib']
7236f11db0c3 demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents: 48875
diff changeset
   193
with demandimport.deactivated():
7236f11db0c3 demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents: 48875
diff changeset
   194
    import telnetlib
7236f11db0c3 demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents: 48875
diff changeset
   195
assert telnetlib.__loader__ == telnetlib.__spec__.loader
7236f11db0c3 demandimport: ensure lazyloaderex sets loader attributes (issue6725)
Jason R. Coombs <jaraco@jaraco.com>
parents: 48875
diff changeset
   196
assert telnetlib.__loader__.get_resource_reader