summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Wadsten <mikewadsten@gmail.com>2020-01-13 11:52:36 -0600
committerDamien George <damien@micropython.org>2021-10-21 12:42:48 +1100
commitc3c2c37fbcc59f8ecd58dc294b31ad4d239fd52c (patch)
treea32876de0fa4bb45c77a92c7ee821acf135729ad
parentfe2bc92b4d20c116fbb14b6fe92db459d8ce2126 (diff)
tests/basics: Add tests for type-checking subclassed exc instances.
-rw-r--r--tests/basics/subclass_native_exc_new.py39
-rw-r--r--tests/basics/subclass_native_exc_new.py.exp6
2 files changed, 45 insertions, 0 deletions
diff --git a/tests/basics/subclass_native_exc_new.py b/tests/basics/subclass_native_exc_new.py
new file mode 100644
index 000000000..c1bd89a6f
--- /dev/null
+++ b/tests/basics/subclass_native_exc_new.py
@@ -0,0 +1,39 @@
+# test subclassing exceptions and providing __new__
+
+
+class Dummy(BaseException):
+ pass
+
+
+class GoodException(BaseException):
+ def __new__(cls, *args, **kwargs):
+ print("GoodException __new__")
+ return Dummy(*args, **kwargs)
+
+
+class BadException(BaseException):
+ def __new__(cls, *args, **kwargs):
+ print("BadException __new__")
+ return 1
+
+
+try:
+ raise GoodException("good message")
+except BaseException as good:
+ print(type(good), good.args[0])
+
+try:
+ raise BadException("bad message")
+except Exception as bad:
+ # Should be TypeError 'exceptions must derive from BaseException'
+ print(type(bad), bad.args[0])
+
+try:
+
+ def gen():
+ yield
+
+ gen().throw(BadException)
+except Exception as genbad:
+ # Should be TypeError 'exceptions must derive from BaseException'
+ print(type(genbad), genbad.args[0])
diff --git a/tests/basics/subclass_native_exc_new.py.exp b/tests/basics/subclass_native_exc_new.py.exp
new file mode 100644
index 000000000..65709b2cc
--- /dev/null
+++ b/tests/basics/subclass_native_exc_new.py.exp
@@ -0,0 +1,6 @@
+GoodException __new__
+<class 'Dummy'> good message
+BadException __new__
+<class 'TypeError'> exceptions must derive from BaseException
+BadException __new__
+<class 'TypeError'> exceptions must derive from BaseException