tests/micropython: Add tests for try and with blocks under native/viper.
This commit is contained in:
parent
a3de776486
commit
f774614110
39
tests/micropython/native_try.py
Normal file
39
tests/micropython/native_try.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# test native try handling
|
||||||
|
|
||||||
|
# basic try-finally
|
||||||
|
@micropython.native
|
||||||
|
def f():
|
||||||
|
try:
|
||||||
|
fail
|
||||||
|
finally:
|
||||||
|
print('finally')
|
||||||
|
try:
|
||||||
|
f()
|
||||||
|
except NameError:
|
||||||
|
print('NameError')
|
||||||
|
|
||||||
|
# nested try-except with try-finally
|
||||||
|
@micropython.native
|
||||||
|
def f():
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
fail
|
||||||
|
finally:
|
||||||
|
print('finally')
|
||||||
|
except NameError:
|
||||||
|
print('NameError')
|
||||||
|
f()
|
||||||
|
|
||||||
|
# check that locals written to in try blocks keep their values
|
||||||
|
@micropython.native
|
||||||
|
def f():
|
||||||
|
a = 100
|
||||||
|
try:
|
||||||
|
print(a)
|
||||||
|
a = 200
|
||||||
|
fail
|
||||||
|
except NameError:
|
||||||
|
print(a)
|
||||||
|
a = 300
|
||||||
|
print(a)
|
||||||
|
f()
|
7
tests/micropython/native_try.py.exp
Normal file
7
tests/micropython/native_try.py.exp
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
finally
|
||||||
|
NameError
|
||||||
|
finally
|
||||||
|
NameError
|
||||||
|
100
|
||||||
|
200
|
||||||
|
300
|
34
tests/micropython/native_try_deep.py
Normal file
34
tests/micropython/native_try_deep.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# test native try handling
|
||||||
|
|
||||||
|
# deeply nested try (9 deep)
|
||||||
|
@micropython.native
|
||||||
|
def f():
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
raise ValueError
|
||||||
|
finally:
|
||||||
|
print(8)
|
||||||
|
finally:
|
||||||
|
print(7)
|
||||||
|
finally:
|
||||||
|
print(6)
|
||||||
|
finally:
|
||||||
|
print(5)
|
||||||
|
finally:
|
||||||
|
print(4)
|
||||||
|
finally:
|
||||||
|
print(3)
|
||||||
|
finally:
|
||||||
|
print(2)
|
||||||
|
finally:
|
||||||
|
print(1)
|
||||||
|
except ValueError:
|
||||||
|
print('ValueError')
|
||||||
|
f()
|
9
tests/micropython/native_try_deep.py.exp
Normal file
9
tests/micropython/native_try_deep.py.exp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
8
|
||||||
|
7
|
||||||
|
6
|
||||||
|
5
|
||||||
|
4
|
||||||
|
3
|
||||||
|
2
|
||||||
|
1
|
||||||
|
ValueError
|
28
tests/micropython/native_with.py
Normal file
28
tests/micropython/native_with.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# test with handling within a native function
|
||||||
|
|
||||||
|
class C:
|
||||||
|
def __init__(self):
|
||||||
|
print('__init__')
|
||||||
|
def __enter__(self):
|
||||||
|
print('__enter__')
|
||||||
|
def __exit__(self, a, b, c):
|
||||||
|
print('__exit__', a, b, c)
|
||||||
|
|
||||||
|
# basic with
|
||||||
|
@micropython.native
|
||||||
|
def f():
|
||||||
|
with C():
|
||||||
|
print(1)
|
||||||
|
f()
|
||||||
|
|
||||||
|
# nested with and try-except
|
||||||
|
@micropython.native
|
||||||
|
def f():
|
||||||
|
try:
|
||||||
|
with C():
|
||||||
|
print(1)
|
||||||
|
fail
|
||||||
|
print(2)
|
||||||
|
except NameError:
|
||||||
|
print('NameError')
|
||||||
|
f()
|
9
tests/micropython/native_with.py.exp
Normal file
9
tests/micropython/native_with.py.exp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
__init__
|
||||||
|
__enter__
|
||||||
|
1
|
||||||
|
__exit__ None None None
|
||||||
|
__init__
|
||||||
|
__enter__
|
||||||
|
1
|
||||||
|
__exit__ <class 'NameError'> name 'fail' is not defined None
|
||||||
|
NameError
|
40
tests/micropython/viper_try.py
Normal file
40
tests/micropython/viper_try.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# test try handling within a viper function
|
||||||
|
|
||||||
|
# basic try-finally
|
||||||
|
@micropython.viper
|
||||||
|
def f():
|
||||||
|
try:
|
||||||
|
fail
|
||||||
|
finally:
|
||||||
|
print('finally')
|
||||||
|
try:
|
||||||
|
f()
|
||||||
|
except NameError:
|
||||||
|
print('NameError')
|
||||||
|
|
||||||
|
# nested try-except with try-finally
|
||||||
|
@micropython.viper
|
||||||
|
def f():
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
fail
|
||||||
|
finally:
|
||||||
|
print('finally')
|
||||||
|
except NameError:
|
||||||
|
print('NameError')
|
||||||
|
f()
|
||||||
|
|
||||||
|
# check that locals written to in try blocks keep their values
|
||||||
|
@micropython.viper
|
||||||
|
def f():
|
||||||
|
a = 100
|
||||||
|
try:
|
||||||
|
print(a)
|
||||||
|
a = 200
|
||||||
|
fail
|
||||||
|
except NameError:
|
||||||
|
print(a)
|
||||||
|
a = 300
|
||||||
|
print(a)
|
||||||
|
f()
|
||||||
|
|
7
tests/micropython/viper_try.py.exp
Normal file
7
tests/micropython/viper_try.py.exp
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
finally
|
||||||
|
NameError
|
||||||
|
finally
|
||||||
|
NameError
|
||||||
|
100
|
||||||
|
200
|
||||||
|
300
|
28
tests/micropython/viper_with.py
Normal file
28
tests/micropython/viper_with.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# test with handling within a viper function
|
||||||
|
|
||||||
|
class C:
|
||||||
|
def __init__(self):
|
||||||
|
print('__init__')
|
||||||
|
def __enter__(self):
|
||||||
|
print('__enter__')
|
||||||
|
def __exit__(self, a, b, c):
|
||||||
|
print('__exit__', a, b, c)
|
||||||
|
|
||||||
|
# basic with
|
||||||
|
@micropython.viper
|
||||||
|
def f():
|
||||||
|
with C():
|
||||||
|
print(1)
|
||||||
|
f()
|
||||||
|
|
||||||
|
# nested with and try-except
|
||||||
|
@micropython.viper
|
||||||
|
def f():
|
||||||
|
try:
|
||||||
|
with C():
|
||||||
|
print(1)
|
||||||
|
fail
|
||||||
|
print(2)
|
||||||
|
except NameError:
|
||||||
|
print('NameError')
|
||||||
|
f()
|
9
tests/micropython/viper_with.py.exp
Normal file
9
tests/micropython/viper_with.py.exp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
__init__
|
||||||
|
__enter__
|
||||||
|
1
|
||||||
|
__exit__ None None None
|
||||||
|
__init__
|
||||||
|
__enter__
|
||||||
|
1
|
||||||
|
__exit__ <class 'NameError'> name 'fail' is not defined None
|
||||||
|
NameError
|
Loading…
x
Reference in New Issue
Block a user