summaryrefslogtreecommitdiffstatshomepage
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/basics/fun_code.py36
-rw-r--r--tests/basics/fun_code_micropython.py19
-rw-r--r--tests/basics/fun_code_micropython.py.exp1
-rw-r--r--tests/basics/subclass_native1.py6
-rw-r--r--tests/micropython/native_fun_attrs_code.py21
-rw-r--r--tests/micropython/native_fun_attrs_code.py.exp1
6 files changed, 80 insertions, 4 deletions
diff --git a/tests/basics/fun_code.py b/tests/basics/fun_code.py
new file mode 100644
index 0000000000..59e1f7ec04
--- /dev/null
+++ b/tests/basics/fun_code.py
@@ -0,0 +1,36 @@
+# Test function.__code__ attribute.
+
+try:
+ (lambda: 0).__code__
+except AttributeError:
+ print("SKIP")
+ raise SystemExit
+
+
+def f():
+ return a
+
+
+ftype = type(f)
+
+# Test __code__ access and function constructor.
+code = f.__code__
+print(type(ftype(code, {})) is ftype)
+
+# Test instantiating multiple code's with different globals dicts.
+code = f.__code__
+f1 = ftype(code, {"a": 1})
+f2 = ftype(code, {"a": 2})
+print(f1(), f2())
+
+# Test bad first argument type.
+try:
+ ftype(None, {})
+except TypeError:
+ print("TypeError")
+
+# Test bad second argument type.
+try:
+ ftype(f.__code__, None)
+except TypeError:
+ print("TypeError")
diff --git a/tests/basics/fun_code_micropython.py b/tests/basics/fun_code_micropython.py
new file mode 100644
index 0000000000..2c319a2db8
--- /dev/null
+++ b/tests/basics/fun_code_micropython.py
@@ -0,0 +1,19 @@
+# Test MicroPython-specific restrictions of function.__code__ attribute.
+
+try:
+ (lambda: 0).__code__
+except AttributeError:
+ print("SKIP")
+ raise SystemExit
+
+
+def f_with_children():
+ def g():
+ pass
+
+
+# Can't access __code__ when function has children.
+try:
+ f_with_children.__code__
+except AttributeError:
+ print("AttributeError")
diff --git a/tests/basics/fun_code_micropython.py.exp b/tests/basics/fun_code_micropython.py.exp
new file mode 100644
index 0000000000..d169edffb4
--- /dev/null
+++ b/tests/basics/fun_code_micropython.py.exp
@@ -0,0 +1 @@
+AttributeError
diff --git a/tests/basics/subclass_native1.py b/tests/basics/subclass_native1.py
index 288a686d1a..74b377eac9 100644
--- a/tests/basics/subclass_native1.py
+++ b/tests/basics/subclass_native1.py
@@ -21,11 +21,9 @@ print(a + [20, 30, 40])
# TODO: Faults
#print(a + a)
-def foo():
- print("hello from foo")
-
+# subclassing a type that doesn't have make_new at the C level (not allowed)
try:
- class myfunc(type(foo)):
+ class myfunc(type([].append)):
pass
except TypeError:
print("TypeError")
diff --git a/tests/micropython/native_fun_attrs_code.py b/tests/micropython/native_fun_attrs_code.py
new file mode 100644
index 0000000000..d277a7b9b2
--- /dev/null
+++ b/tests/micropython/native_fun_attrs_code.py
@@ -0,0 +1,21 @@
+# Test MicroPython-specific restrictions of function.__code__ attribute.
+
+try:
+ (lambda: 0).__code__
+except AttributeError:
+ print("SKIP")
+ raise SystemExit
+
+import micropython
+
+
+@micropython.native
+def f_native():
+ pass
+
+
+# Can't access __code__ when function is native code.
+try:
+ f_native.__code__
+except AttributeError:
+ print("AttributeError")
diff --git a/tests/micropython/native_fun_attrs_code.py.exp b/tests/micropython/native_fun_attrs_code.py.exp
new file mode 100644
index 0000000000..d169edffb4
--- /dev/null
+++ b/tests/micropython/native_fun_attrs_code.py.exp
@@ -0,0 +1 @@
+AttributeError