summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-07-31 22:34:43 +1000
committerDamien George <damien.p.george@gmail.com>2019-07-31 22:37:44 +1000
commit48f43b77aa62b99147d52b794da26621bbd74ee8 (patch)
tree258f949e48202723e39d6db893e25b8e37e0a512
parentf60229e261e61b59d563023b2df7204c4e01c51c (diff)
tests: Add tests for overriding builtins.__import__.
-rw-r--r--tests/basics/builtin_override.py18
-rw-r--r--tests/import/import_override.py17
2 files changed, 35 insertions, 0 deletions
diff --git a/tests/basics/builtin_override.py b/tests/basics/builtin_override.py
index 9f91341ed..e3cf9165f 100644
--- a/tests/basics/builtin_override.py
+++ b/tests/basics/builtin_override.py
@@ -12,7 +12,25 @@ except AttributeError:
print(abs(1))
# __build_class__ is handled in a special way
+orig_build_class = __build_class__
builtins.__build_class__ = lambda x, y: ('class', y)
class A:
pass
print(A)
+builtins.__build_class__ = orig_build_class
+
+# __import__ is handled in a special way
+def custom_import(name, globals, locals, fromlist, level):
+ print('import', name, fromlist, level)
+ class M:
+ a = 1
+ b = 2
+ return M
+builtins.__import__ = custom_import
+__import__('A', None, None, None, 0)
+import a
+import a.b
+from a import a
+from a.b import a, b
+from .a import a
+from ..a import a, b
diff --git a/tests/import/import_override.py b/tests/import/import_override.py
new file mode 100644
index 000000000..6fe99009e
--- /dev/null
+++ b/tests/import/import_override.py
@@ -0,0 +1,17 @@
+# test overriding __import__ combined with importing from the filesystem
+
+def custom_import(name, globals, locals, fromlist, level):
+ print('import', name, fromlist, level)
+ class M:
+ var = 456
+ return M
+
+orig_import = __import__
+try:
+ __import__("builtins").__import__ = custom_import
+except AttributeError:
+ print("SKIP")
+ raise SystemExit
+
+# import1a will be done via normal import which will import1b via our custom import
+orig_import('import1a')