summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics/with1.py
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-03-29 04:11:24 +0200
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-03-29 04:39:31 +0200
commite7286ef2c7db77879178f45f6055d8af2fc68281 (patch)
tree15c165290fbf90a598062bd0e9b951be782bc44a /tests/basics/with1.py
parent44307d5ef8f1c78d0a393e8ab842d18799d56517 (diff)
downloadmicropython-e7286ef2c7db77879178f45f6055d8af2fc68281.tar.gz
micropython-e7286ef2c7db77879178f45f6055d8af2fc68281.zip
tests: Add "with" statement testcases.
Diffstat (limited to 'tests/basics/with1.py')
-rw-r--r--tests/basics/with1.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/basics/with1.py b/tests/basics/with1.py
new file mode 100644
index 0000000000..3db1d380d4
--- /dev/null
+++ b/tests/basics/with1.py
@@ -0,0 +1,71 @@
+class CtxMgr:
+
+ def __enter__(self):
+ print("__enter__")
+ return self
+
+ def __exit__(self, a, b, c):
+ print("__exit__", repr(a), repr(b))
+
+
+with CtxMgr() as a:
+ print(isinstance(a, CtxMgr))
+
+try:
+ with CtxMgr() as a:
+ raise ValueError
+except ValueError:
+ print("ValueError")
+
+
+class CtxMgr2:
+
+ def __enter__(self):
+ print("__enter__")
+ return self
+
+ def __exit__(self, a, b, c):
+ print("__exit__", repr(a), repr(b))
+ return True
+
+try:
+ with CtxMgr2() as a:
+ raise ValueError
+ print("No ValueError2")
+except ValueError:
+ print("ValueError2")
+
+
+# These recursive try-finally tests are attempt to get some interpretation
+# of last phrase in http://docs.python.org/3.4/library/dis.html#opcode-WITH_CLEANUP
+# "If the stack represents an exception, and the function call returns a ‘true’
+# value, this information is “zapped” and replaced with a single WHY_SILENCED
+# to prevent END_FINALLY from re-raising the exception. (But non-local gotos
+# will still be resumed.)"
+print("===")
+with CtxMgr2() as a:
+ try:
+ try:
+ raise ValueError
+ print("No ValueError3")
+ finally:
+ print("finally1")
+ finally:
+ print("finally2")
+
+print("===")
+try:
+ try:
+ with CtxMgr2() as a:
+ try:
+ try:
+ raise ValueError
+ print("No ValueError3")
+ finally:
+ print("finally1")
+ finally:
+ print("finally2")
+ finally:
+ print("finally3")
+finally:
+ print("finally4")