diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-29 04:11:24 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-29 04:39:31 +0200 |
commit | e7286ef2c7db77879178f45f6055d8af2fc68281 (patch) | |
tree | 15c165290fbf90a598062bd0e9b951be782bc44a /tests/basics/with1.py | |
parent | 44307d5ef8f1c78d0a393e8ab842d18799d56517 (diff) | |
download | micropython-e7286ef2c7db77879178f45f6055d8af2fc68281.tar.gz micropython-e7286ef2c7db77879178f45f6055d8af2fc68281.zip |
tests: Add "with" statement testcases.
Diffstat (limited to 'tests/basics/with1.py')
-rw-r--r-- | tests/basics/with1.py | 71 |
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") |