tests: Rewrite some tests so they can run without needing eval/exec.

For builds without the compiler enabled (and hence without eval/exec) it is
useful to still be able to run as many tests as possible.
This commit is contained in:
Damien George 2018-02-14 16:50:20 +11:00
parent 6031957473
commit 04c55f5828
5 changed files with 114 additions and 64 deletions

View File

@ -1,31 +1,44 @@
# test errors from bad function calls # test errors from bad function calls
def test_exc(code, exc):
try:
exec(code)
print("no exception")
except exc:
print("right exception")
except:
print("wrong exception")
# function doesn't take keyword args # function doesn't take keyword args
test_exc("[].append(x=1)", TypeError) try:
[].append(x=1)
except TypeError:
print('TypeError')
# function with variable number of positional args given too few # function with variable number of positional args given too few
test_exc("round()", TypeError) try:
round()
except TypeError:
print('TypeError')
# function with variable number of positional args given too many # function with variable number of positional args given too many
test_exc("round(1, 2, 3)", TypeError) try:
round(1, 2, 3)
except TypeError:
print('TypeError')
# function with fixed number of positional args given wrong number # function with fixed number of positional args given wrong number
test_exc("[].append(1, 2)", TypeError) try:
[].append(1, 2)
except TypeError:
print('TypeError')
# function with keyword args given extra positional args # function with keyword args given extra positional args
test_exc("[].sort(1)", TypeError) try:
[].sort(1)
except TypeError:
print('TypeError')
# function with keyword args given extra keyword args # function with keyword args given extra keyword args
test_exc("[].sort(noexist=1)", TypeError) try:
[].sort(noexist=1)
except TypeError:
print('TypeError')
# kw given for positional, but a different positional is missing # kw given for positional, but a different positional is missing
test_exc("def f(x, y): pass\nf(x=1)", TypeError) try:
def f(x, y): pass
f(x=1)
except TypeError:
print('TypeError')

View File

@ -5,14 +5,8 @@ except:
print("SKIP") print("SKIP")
raise SystemExit raise SystemExit
def test_exc(code, exc):
try:
exec(code)
print("no exception")
except exc:
print("right exception")
except:
print("wrong exception")
# function with keyword args not given a specific keyword arg # function with keyword args not given a specific keyword arg
test_exc("enumerate()", TypeError) try:
enumerate()
except TypeError:
print('TypeError')

View File

@ -1,44 +1,89 @@
# test errors from bad operations (unary, binary, etc) # test errors from bad operations (unary, binary, etc)
def test_exc(code, exc):
try:
exec(code)
print("no exception")
except exc:
print("right exception")
except:
print("wrong exception")
# unsupported unary operators # unsupported unary operators
test_exc("~None", TypeError) try:
test_exc("~''", TypeError) ~None
test_exc("~[]", TypeError) except TypeError:
test_exc("~bytearray()", TypeError) print('TypeError')
try:
~''
except TypeError:
print('TypeError')
try:
~[]
except TypeError:
print('TypeError')
try:
~bytearray()
except TypeError:
print('TypeError')
# unsupported binary operators # unsupported binary operators
test_exc("False in True", TypeError) try:
test_exc("1 * {}", TypeError) False in True
test_exc("1 in 1", TypeError) except TypeError:
test_exc("bytearray() // 2", TypeError) print('TypeError')
try:
1 * {}
except TypeError:
print('TypeError')
try:
1 in 1
except TypeError:
print('TypeError')
try:
bytearray() // 2
except TypeError:
print('TypeError')
# object with buffer protocol needed on rhs # object with buffer protocol needed on rhs
test_exc("bytearray(1) + 1", TypeError) try:
bytearray(1) + 1
except TypeError:
print('TypeError')
# unsupported subscription # unsupported subscription
test_exc("1[0]", TypeError) try:
test_exc("1[0] = 1", TypeError) 1[0]
test_exc("''['']", TypeError) except TypeError:
test_exc("'a'[0] = 1", TypeError) print('TypeError')
test_exc("del 1[0]", TypeError) try:
1[0] = 1
except TypeError:
print('TypeError')
try:
''['']
except TypeError:
print('TypeError')
try:
'a'[0] = 1
except TypeError:
print('TypeError')
try:
del 1[0]
except TypeError:
print('TypeError')
# not callable # not callable
test_exc("1()", TypeError) try:
1()
except TypeError:
print('TypeError')
# not an iterator # not an iterator
test_exc("next(1)", TypeError) try:
next(1)
except TypeError:
print('TypeError')
# must be an exception type # must be an exception type
test_exc("raise 1", TypeError) try:
raise 1
except TypeError:
print('TypeError')
# no such name in import # no such name in import
test_exc("from sys import youcannotimportmebecauseidontexist", ImportError) try:
from sys import youcannotimportmebecauseidontexist
except ImportError:
print('ImportError')

View File

@ -10,4 +10,7 @@ def test_exc(code, exc):
print("wrong exception") print("wrong exception")
# object with buffer protocol needed on rhs # object with buffer protocol needed on rhs
test_exc("(1 << 70) in 1", TypeError) try:
(1 << 70) in 1
except TypeError:
print('TypeError')

View File

@ -5,14 +5,9 @@ except:
print("SKIP") print("SKIP")
raise SystemExit raise SystemExit
def test_exc(code, exc):
try:
exec(code)
print("no exception")
except exc:
print("right exception")
except:
print("wrong exception")
# unsupported binary operators # unsupported binary operators
test_exc("m = memoryview(bytearray())\nm += bytearray()", TypeError) try:
m = memoryview(bytearray())
m += bytearray()
except TypeError:
print('TypeError')