Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
40b22d06
Commit
40b22d06
authored
Oct 18, 2013
by
Brett Cannon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #16803: test.test_importlib.test_api now runs under frozen and
source.
parent
87efae2d
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
69 additions
and
37 deletions
+69
-37
Lib/test/test_importlib/test_api.py
Lib/test/test_importlib/test_api.py
+69
-37
No files found.
Lib/test/test_importlib/test_api.py
View file @
40b22d06
from
.
import
util
import
importlib
fro
m
importlib
import
_bootstrap
from
importlib
import
machinery
frozen_init
,
source_init
=
util
.
import_importlib
(
'importlib'
)
fro
zen_machinery
,
source_machinery
=
util
.
import_importlib
(
'importlib.machinery'
)
import
sys
from
test
import
support
import
types
import
unittest
class
ImportModuleTests
(
unittest
.
TestCase
)
:
class
ImportModuleTests
:
"""Test importlib.import_module."""
...
...
@@ -17,7 +17,7 @@ class ImportModuleTests(unittest.TestCase):
# Test importing a top-level module.
with
util
.
mock_modules
(
'top_level'
)
as
mock
:
with
util
.
import_state
(
meta_path
=
[
mock
]):
module
=
importlib
.
import_module
(
'top_level'
)
module
=
self
.
init
.
import_module
(
'top_level'
)
self
.
assertEqual
(
module
.
__name__
,
'top_level'
)
def
test_absolute_package_import
(
self
):
...
...
@@ -27,7 +27,7 @@ class ImportModuleTests(unittest.TestCase):
name
=
'{0}.mod'
.
format
(
pkg_name
)
with
util
.
mock_modules
(
pkg_long_name
,
name
)
as
mock
:
with
util
.
import_state
(
meta_path
=
[
mock
]):
module
=
importlib
.
import_module
(
name
)
module
=
self
.
init
.
import_module
(
name
)
self
.
assertEqual
(
module
.
__name__
,
name
)
def
test_shallow_relative_package_import
(
self
):
...
...
@@ -39,17 +39,17 @@ class ImportModuleTests(unittest.TestCase):
relative_name
=
'.{0}'
.
format
(
module_name
)
with
util
.
mock_modules
(
pkg_long_name
,
absolute_name
)
as
mock
:
with
util
.
import_state
(
meta_path
=
[
mock
]):
importlib
.
import_module
(
pkg_name
)
module
=
importlib
.
import_module
(
relative_name
,
pkg_name
)
self
.
init
.
import_module
(
pkg_name
)
module
=
self
.
init
.
import_module
(
relative_name
,
pkg_name
)
self
.
assertEqual
(
module
.
__name__
,
absolute_name
)
def
test_deep_relative_package_import
(
self
):
modules
=
[
'a.__init__'
,
'a.b.__init__'
,
'a.c'
]
with
util
.
mock_modules
(
*
modules
)
as
mock
:
with
util
.
import_state
(
meta_path
=
[
mock
]):
importlib
.
import_module
(
'a'
)
importlib
.
import_module
(
'a.b'
)
module
=
importlib
.
import_module
(
'..c'
,
'a.b'
)
self
.
init
.
import_module
(
'a'
)
self
.
init
.
import_module
(
'a.b'
)
module
=
self
.
init
.
import_module
(
'..c'
,
'a.b'
)
self
.
assertEqual
(
module
.
__name__
,
'a.c'
)
def
test_absolute_import_with_package
(
self
):
...
...
@@ -60,15 +60,15 @@ class ImportModuleTests(unittest.TestCase):
name
=
'{0}.mod'
.
format
(
pkg_name
)
with
util
.
mock_modules
(
pkg_long_name
,
name
)
as
mock
:
with
util
.
import_state
(
meta_path
=
[
mock
]):
importlib
.
import_module
(
pkg_name
)
module
=
importlib
.
import_module
(
name
,
pkg_name
)
self
.
init
.
import_module
(
pkg_name
)
module
=
self
.
init
.
import_module
(
name
,
pkg_name
)
self
.
assertEqual
(
module
.
__name__
,
name
)
def
test_relative_import_wo_package
(
self
):
# Relative imports cannot happen without the 'package' argument being
# set.
with
self
.
assertRaises
(
TypeError
):
importlib
.
import_module
(
'.support'
)
self
.
init
.
import_module
(
'.support'
)
def
test_loaded_once
(
self
):
...
...
@@ -77,7 +77,7 @@ class ImportModuleTests(unittest.TestCase):
# module currently being imported.
b_load_count
=
0
def
load_a
():
importlib
.
import_module
(
'a.b'
)
self
.
init
.
import_module
(
'a.b'
)
def
load_b
():
nonlocal
b_load_count
b_load_count
+=
1
...
...
@@ -85,11 +85,17 @@ class ImportModuleTests(unittest.TestCase):
modules
=
[
'a.__init__'
,
'a.b'
]
with
util
.
mock_modules
(
*
modules
,
module_code
=
code
)
as
mock
:
with
util
.
import_state
(
meta_path
=
[
mock
]):
importlib
.
import_module
(
'a.b'
)
self
.
init
.
import_module
(
'a.b'
)
self
.
assertEqual
(
b_load_count
,
1
)
class
Frozen_ImportModuleTests
(
ImportModuleTests
,
unittest
.
TestCase
):
init
=
frozen_init
class
Source_ImportModuleTests
(
ImportModuleTests
,
unittest
.
TestCase
):
init
=
source_init
class
FindLoaderTests
(
unittest
.
TestCase
)
:
class
FindLoaderTests
:
class
FakeMetaFinder
:
@
staticmethod
...
...
@@ -103,7 +109,7 @@ class FindLoaderTests(unittest.TestCase):
loader
=
'a loader!'
module
.
__loader__
=
loader
sys
.
modules
[
name
]
=
module
found
=
importlib
.
find_loader
(
name
)
found
=
self
.
init
.
find_loader
(
name
)
self
.
assertEqual
(
loader
,
found
)
def
test_sys_modules_loader_is_None
(
self
):
...
...
@@ -114,7 +120,7 @@ class FindLoaderTests(unittest.TestCase):
module
.
__loader__
=
None
sys
.
modules
[
name
]
=
module
with
self
.
assertRaises
(
ValueError
):
importlib
.
find_loader
(
name
)
self
.
init
.
find_loader
(
name
)
def
test_sys_modules_loader_is_not_set
(
self
):
# Should raise ValueError
...
...
@@ -128,14 +134,14 @@ class FindLoaderTests(unittest.TestCase):
pass
sys
.
modules
[
name
]
=
module
with
self
.
assertRaises
(
ValueError
):
importlib
.
find_loader
(
name
)
self
.
init
.
find_loader
(
name
)
def
test_success
(
self
):
# Return the loader found on sys.meta_path.
name
=
'some_mod'
with
util
.
uncache
(
name
):
with
util
.
import_state
(
meta_path
=
[
self
.
FakeMetaFinder
]):
self
.
assertEqual
((
name
,
None
),
importlib
.
find_loader
(
name
))
self
.
assertEqual
((
name
,
None
),
self
.
init
.
find_loader
(
name
))
def
test_success_path
(
self
):
# Searching on a path should work.
...
...
@@ -144,14 +150,20 @@ class FindLoaderTests(unittest.TestCase):
with
util
.
uncache
(
name
):
with
util
.
import_state
(
meta_path
=
[
self
.
FakeMetaFinder
]):
self
.
assertEqual
((
name
,
path
),
importlib
.
find_loader
(
name
,
path
))
self
.
init
.
find_loader
(
name
,
path
))
def
test_nothing
(
self
):
# None is returned upon failure to find a loader.
self
.
assertIsNone
(
importlib
.
find_loader
(
'nevergoingtofindthismodule'
))
self
.
assertIsNone
(
self
.
init
.
find_loader
(
'nevergoingtofindthismodule'
))
class
Frozen_FindLoaderTests
(
FindLoaderTests
,
unittest
.
TestCase
):
init
=
frozen_init
class
ReloadTests
(
unittest
.
TestCase
):
class
Source_FindLoaderTests
(
FindLoaderTests
,
unittest
.
TestCase
):
init
=
source_init
class
ReloadTests
:
"""Test module reloading for builtin and extension modules."""
...
...
@@ -159,8 +171,8 @@ class ReloadTests(unittest.TestCase):
for
mod
in
(
'tokenize'
,
'time'
,
'marshal'
):
with
self
.
subTest
(
module
=
mod
):
with
support
.
CleanImport
(
mod
):
module
=
importlib
.
import_module
(
mod
)
importlib
.
reload
(
module
)
module
=
self
.
init
.
import_module
(
mod
)
self
.
init
.
reload
(
module
)
def
test_module_replaced
(
self
):
def
code
():
...
...
@@ -172,14 +184,20 @@ class ReloadTests(unittest.TestCase):
module_code
=
{
'top_level'
:
code
})
with
mock
:
with
util
.
import_state
(
meta_path
=
[
mock
]):
module
=
importlib
.
import_module
(
'top_level'
)
reloaded
=
importlib
.
reload
(
module
)
module
=
self
.
init
.
import_module
(
'top_level'
)
reloaded
=
self
.
init
.
reload
(
module
)
actual
=
sys
.
modules
[
'top_level'
]
self
.
assertEqual
(
actual
.
spam
,
3
)
self
.
assertEqual
(
reloaded
.
spam
,
3
)
class
Frozen_ReloadTests
(
ReloadTests
,
unittest
.
TestCase
):
init
=
frozen_init
class
Source_ReloadTests
(
ReloadTests
,
unittest
.
TestCase
):
init
=
source_init
class
InvalidateCacheTests
(
unittest
.
TestCase
):
class
InvalidateCacheTests
:
def
test_method_called
(
self
):
# If defined the method should be called.
...
...
@@ -198,7 +216,7 @@ class InvalidateCacheTests(unittest.TestCase):
self
.
addCleanup
(
lambda
:
sys
.
path_importer_cache
.
__delitem__
(
key
))
sys
.
path_importer_cache
[
key
]
=
path_ins
self
.
addCleanup
(
lambda
:
sys
.
meta_path
.
remove
(
meta_ins
))
importlib
.
invalidate_caches
()
self
.
init
.
invalidate_caches
()
self
.
assertTrue
(
meta_ins
.
called
)
self
.
assertTrue
(
path_ins
.
called
)
...
...
@@ -207,19 +225,27 @@ class InvalidateCacheTests(unittest.TestCase):
key
=
'gobbledeegook'
sys
.
path_importer_cache
[
key
]
=
None
self
.
addCleanup
(
lambda
:
sys
.
path_importer_cache
.
__delitem__
(
key
))
importlib
.
invalidate_caches
()
# Shouldn't trigger an exception.
self
.
init
.
invalidate_caches
()
# Shouldn't trigger an exception.
class
Frozen_InvalidateCacheTests
(
InvalidateCacheTests
,
unittest
.
TestCase
):
init
=
frozen_init
class
Source_InvalidateCacheTests
(
InvalidateCacheTests
,
unittest
.
TestCase
):
init
=
source_init
class
FrozenImportlibTests
(
unittest
.
TestCase
):
def
test_no_frozen_importlib
(
self
):
# Should be able to import w/o _frozen_importlib being defined.
module
=
support
.
import_fresh_module
(
'importlib'
,
blocked
=
[
'_frozen_importlib'
])
self
.
assertFalse
(
isinstance
(
module
.
__loader__
,
machinery
.
FrozenImporter
))
# Can't do an isinstance() check since separate copies of importlib
# may have been used for import, so just check the name is not for the
# frozen loader.
self
.
assertNotEqual
(
source_init
.
__loader__
.
__class__
.
__name__
,
'FrozenImporter'
)
class
StartupTests
(
unittest
.
TestCase
)
:
class
StartupTests
:
def
test_everyone_has___loader__
(
self
):
# Issue #17098: all modules should have __loader__ defined.
...
...
@@ -227,11 +253,17 @@ class StartupTests(unittest.TestCase):
if
isinstance
(
module
,
types
.
ModuleType
):
self
.
assertTrue
(
hasattr
(
module
,
'__loader__'
),
'{!r} lacks a __loader__ attribute'
.
format
(
name
))
if
importlib
.
machinery
.
BuiltinImporter
.
find_module
(
name
):
if
self
.
machinery
.
BuiltinImporter
.
find_module
(
name
):
self
.
assertIsNot
(
module
.
__loader__
,
None
)
elif
importlib
.
machinery
.
FrozenImporter
.
find_module
(
name
):
elif
self
.
machinery
.
FrozenImporter
.
find_module
(
name
):
self
.
assertIsNot
(
module
.
__loader__
,
None
)
class
Frozen_StartupTests
(
StartupTests
,
unittest
.
TestCase
):
machinery
=
frozen_machinery
class
Source_StartupTests
(
StartupTests
,
unittest
.
TestCase
):
machinery
=
source_machinery
if
__name__
==
'__main__'
:
unittest
.
main
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment