Skip to content

Commit 28ae182

Browse files
committed
Add comprehensive lazy import tests ported from internal test suite
Port missing test coverage from the internal lazy imports test suite to cpython's test_lazy_import, covering behaviors not previously tested: - Dict operations with lazy values (copy, |, update, values/items) - from X import * resolution behavior with lazy imports - Submodule laziness (unused submodules stay lazy, side effects) - Attribute side effects (submodule imports don't overwrite parent attrs) - Module/variable name collisions (submodule vs variable ordering) - Deleted module reimport (sys.modules deletion and reimport) - Circular import resolution (lazy imports breaking circular deadlocks) - Custom __import__ via exec with lazy imports - Dict mutation during module loading - Runtime enable/disable of lazy imports via sys.set_lazy_imports() Adds supporting test data modules: metasyntactic package hierarchy, versioned package, module_same_name_var_order packages, circular_import_pkg, and cycle_with_load_global_pkg.
1 parent 3a62c8f commit 28ae182

25 files changed

Lines changed: 911 additions & 0 deletions

File tree

Lib/test/test_lazy_import/__init__.py

Lines changed: 851 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from .x import X2
2+
X2()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def X1():
2+
return "X"
3+
4+
from .y import Y1
5+
6+
def X2():
7+
return Y1()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def Y1():
2+
return "Y"
3+
4+
from .x import X2
5+
6+
def Y2():
7+
return X2()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from .b import B
2+
3+
def get_B():
4+
return B
5+
6+
B
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
B = "B"
2+
3+
from .a import get_B
4+
5+
get_B()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Foo = "Foo"

0 commit comments

Comments
 (0)