From 5e22afce41de8c87071d8fc149a6ba3cd8762819 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 11 Oct 2016 12:30:32 +1100 Subject: tests: Improve test coverage of py/compile.c. --- tests/basics/async_def.py | 16 ++++++++++++++++ tests/basics/async_def.py.exp | 3 +++ tests/basics/async_with.py | 4 +++- tests/basics/async_with.py.exp | 1 + tests/basics/del_global.py | 5 +++++ tests/basics/for_range.py | 5 +++++ tests/basics/syntaxerror.py | 4 ++++ tests/basics/unpack1.py | 1 + 8 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tests/basics/async_def.py create mode 100644 tests/basics/async_def.py.exp (limited to 'tests/basics') diff --git a/tests/basics/async_def.py b/tests/basics/async_def.py new file mode 100644 index 000000000..e345703d7 --- /dev/null +++ b/tests/basics/async_def.py @@ -0,0 +1,16 @@ +# test async def + +def dec(f): + print('decorator') + return f + +# test definition with a decorator +@dec +async def foo(): + print('foo') + +coro = foo() +try: + coro.send(None) +except StopIteration: + print('StopIteration') diff --git a/tests/basics/async_def.py.exp b/tests/basics/async_def.py.exp new file mode 100644 index 000000000..f555ace99 --- /dev/null +++ b/tests/basics/async_def.py.exp @@ -0,0 +1,3 @@ +decorator +foo +StopIteration diff --git a/tests/basics/async_with.py b/tests/basics/async_with.py index 9eccfd816..5af0c5d95 100644 --- a/tests/basics/async_with.py +++ b/tests/basics/async_with.py @@ -3,6 +3,7 @@ class AContext: async def __aenter__(self): print('enter') + return 1 async def __aexit__(self, exc_type, exc, tb): print('exit', exc_type, exc) @@ -17,7 +18,8 @@ except StopIteration: print('finished') async def g(): - async with AContext(): + async with AContext() as ac: + print(ac) raise ValueError('error') o = g() diff --git a/tests/basics/async_with.py.exp b/tests/basics/async_with.py.exp index 6072a3e0b..d00b18c96 100644 --- a/tests/basics/async_with.py.exp +++ b/tests/basics/async_with.py.exp @@ -3,5 +3,6 @@ body exit None None finished enter +1 exit error ValueError diff --git a/tests/basics/del_global.py b/tests/basics/del_global.py index 77d11cb3c..d740357b0 100644 --- a/tests/basics/del_global.py +++ b/tests/basics/del_global.py @@ -54,3 +54,8 @@ try: print(c) except NameError: print("NameError") + +a = 1 +b = 2 +c = 3 +del (a, (b, c)) diff --git a/tests/basics/for_range.py b/tests/basics/for_range.py index ddff5ebd4..58a8f7caa 100644 --- a/tests/basics/for_range.py +++ b/tests/basics/for_range.py @@ -34,6 +34,11 @@ try: print(x) except TypeError: print('TypeError') +try: + for x in range(start=0, end=1): + print(x) +except TypeError: + print('TypeError') try: for x in range(0, 1, step=1): print(x) diff --git a/tests/basics/syntaxerror.py b/tests/basics/syntaxerror.py index 2ae0183f8..e5cbbac06 100644 --- a/tests/basics/syntaxerror.py +++ b/tests/basics/syntaxerror.py @@ -49,6 +49,9 @@ test_syntax("f[0]**2 = 1") # can't assign to empty tuple test_syntax("() = 1") +# can't have *x on RHS +test_syntax("x = *x") + # can't have multiple *x on LHS test_syntax("*a, *b = c") @@ -76,6 +79,7 @@ test_syntax("continue") test_syntax("return") test_syntax("yield") test_syntax("nonlocal a") +test_syntax("await 1") # error on uPy, warning on CPy #test_syntax("def f():\n a = 1\n global a") diff --git a/tests/basics/unpack1.py b/tests/basics/unpack1.py index 10e01dea0..0e8ec592c 100644 --- a/tests/basics/unpack1.py +++ b/tests/basics/unpack1.py @@ -12,6 +12,7 @@ a, b, c = range(3); print(a, b, c) (a,) = range(1); print(a) (a, b) = range(2); print(a, b) (a, b, c) = range(3); print(a, b, c) +(a, (b, c)) = [-1, range(2)]; print(a, b, c) # lists -- cgit v1.2.3 From e9404e5f5f058db954ac0a92cb5acfcef6f6724a Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 17 Oct 2016 11:43:47 +1100 Subject: tests: Improve coverage of array, range, dict, slice, exc, unicode. --- tests/basics/array1.py | 4 ++++ tests/basics/builtin_range.py | 6 ++++++ tests/basics/dict1.py | 24 ++++++++++++++++++++++++ tests/basics/dict_views.py | 15 +++++++++++++++ tests/basics/int_constfolding.py | 5 +++++ tests/basics/slice_attrs.py | 9 +++++++++ tests/misc/non_compliant.py | 18 ++++++++++++++++++ tests/misc/non_compliant.py.exp | 3 +++ tests/unicode/unicode.py | 5 +++-- 9 files changed, 87 insertions(+), 2 deletions(-) (limited to 'tests/basics') diff --git a/tests/basics/array1.py b/tests/basics/array1.py index e5ea6683c..c45b883c9 100644 --- a/tests/basics/array1.py +++ b/tests/basics/array1.py @@ -21,6 +21,10 @@ print(array.array('i')) print(bool(array.array('i'))) print(bool(array.array('i', [1]))) +# containment, with incorrect type +print('12' in array.array('B', b'12')) +print([] in array.array('B', b'12')) + # bad typecode try: array.array('X') diff --git a/tests/basics/builtin_range.py b/tests/basics/builtin_range.py index 9110cf12c..59fc0344a 100644 --- a/tests/basics/builtin_range.py +++ b/tests/basics/builtin_range.py @@ -50,3 +50,9 @@ try: range(1)[0] = 1 except TypeError: print("TypeError") + +# bad attr (can't store) +try: + range(4).start = 0 +except AttributeError: + print('AttributeError') diff --git a/tests/basics/dict1.py b/tests/basics/dict1.py index c70ca588a..21d5af272 100644 --- a/tests/basics/dict1.py +++ b/tests/basics/dict1.py @@ -16,3 +16,27 @@ while x < 100: d[x] = x x += 1 print(d[50]) + +# equality operator on dicts of different size +print({} == {1:1}) + +# equality operator on dicts of same size but with different keys +print({1:1} == {2:1}) + +# value not found +try: + {}[0] +except KeyError: + print('KeyError') + +# unsupported unary op +try: + +{} +except TypeError: + print('TypeError') + +# unsupported binary op +try: + {} + {} +except TypeError: + print('TypeError') diff --git a/tests/basics/dict_views.py b/tests/basics/dict_views.py index fbf63fa0a..7ebcc1f56 100644 --- a/tests/basics/dict_views.py +++ b/tests/basics/dict_views.py @@ -3,4 +3,19 @@ for m in d.items, d.values, d.keys: print(m()) print(list(m())) +# print a view with more than one item +print({1:1, 2:1}.values()) + +# unsupported binary op on a dict values view +try: + {1:1}.values() + 1 +except TypeError: + print('TypeError') + +# unsupported binary op on a dict keys view +try: + {1:1}.keys() + 1 +except TypeError: + print('TypeError') + # set operations still to come diff --git a/tests/basics/int_constfolding.py b/tests/basics/int_constfolding.py index c01f964da..aa38fa6b8 100644 --- a/tests/basics/int_constfolding.py +++ b/tests/basics/int_constfolding.py @@ -38,3 +38,8 @@ print(-123 // 7, -123 % 7) print(123 // -7, 123 % -7) print(-123 // -7, -123 % -7) +# zero big-num on rhs +print(1 + ((1 << 65) - (1 << 65))) + +# negative big-num on rhs +print(1 + (-(1 << 65))) diff --git a/tests/basics/slice_attrs.py b/tests/basics/slice_attrs.py index 76368a78c..67456ff8e 100644 --- a/tests/basics/slice_attrs.py +++ b/tests/basics/slice_attrs.py @@ -14,3 +14,12 @@ except: A()[1:2:3] + +# test storing to attr (shouldn't be allowed) +class B: + def __getitem__(self, idx): + try: + idx.start = 0 + except AttributeError: + print('AttributeError') +B()[:] diff --git a/tests/misc/non_compliant.py b/tests/misc/non_compliant.py index e0b07c3ad..677438b83 100644 --- a/tests/misc/non_compliant.py +++ b/tests/misc/non_compliant.py @@ -9,6 +9,12 @@ try: except SyntaxError: print('SyntaxError') +# store to exception attribute is not allowed +try: + ValueError().x = 0 +except AttributeError: + print('AttributeError') + # array deletion not implemented try: a = array.array('b', (1, 2, 3)) @@ -23,6 +29,12 @@ try: except NotImplementedError: print('NotImplementedError') +# containment, looking for integer not implemented +try: + print(1 in array.array('B', b'12')) +except NotImplementedError: + print('NotImplementedError') + # should raise type error try: print(set('12') >= '1') @@ -65,6 +77,12 @@ try: except NotImplementedError: print('NotImplementedError') +# str subscr with step!=1 not implemented +try: + print('abc'[1:2:3]) +except NotImplementedError: + print('NotImplementedError') + # bytes(...) with keywords not implemented try: bytes('abc', encoding='utf8') diff --git a/tests/misc/non_compliant.py.exp b/tests/misc/non_compliant.py.exp index 3095441ad..737650e9e 100644 --- a/tests/misc/non_compliant.py.exp +++ b/tests/misc/non_compliant.py.exp @@ -1,6 +1,8 @@ SyntaxError +AttributeError TypeError NotImplementedError +NotImplementedError True True TypeError, ValueError @@ -13,5 +15,6 @@ NotImplementedError NotImplementedError NotImplementedError NotImplementedError +NotImplementedError b'\x01\x02' b'\x01\x00' diff --git a/tests/unicode/unicode.py b/tests/unicode/unicode.py index b31f064e9..5f29bc1c9 100644 --- a/tests/unicode/unicode.py +++ b/tests/unicode/unicode.py @@ -18,8 +18,9 @@ enc = s.encode() print(enc, enc.decode() == s) # printing of unicode chars using repr -# TODO we don't do this correctly -#print(repr(s)) +# NOTE: for some characters (eg \u10ff) we differ to CPython +print(repr('a\uffff')) +print(repr('a\U0001ffff')) # test invalid escape code try: -- cgit v1.2.3 From 6caca3259f4ec8f298b1d35f15e4492efbcff6b1 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 17 Oct 2016 12:01:18 +1100 Subject: tests: Add test to print full KeyError exc from failed dict lookup. --- tests/basics/dict1.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests/basics') diff --git a/tests/basics/dict1.py b/tests/basics/dict1.py index 21d5af272..20fa9def3 100644 --- a/tests/basics/dict1.py +++ b/tests/basics/dict1.py @@ -26,8 +26,8 @@ print({1:1} == {2:1}) # value not found try: {}[0] -except KeyError: - print('KeyError') +except KeyError as er: + print('KeyError', er, repr(er), er.args) # unsupported unary op try: -- cgit v1.2.3