da34b6ef45
"Builtin" tinytest-based testsuite as employed by qemu-arm (and now generalized by me to be reusable for other targets) performs simplified detection of skipped tests, it treats as such tests which raised SystemExit (instead of checking got "SKIP" output). Consequently, each "SKIP" must be accompanied by SystemExit (and conversely, SystemExit should not be used if test is not skipped, which so far seems to be true).
50 lines
905 B
Python
50 lines
905 B
Python
# test compile builtin
|
|
|
|
def have_compile():
|
|
try:
|
|
compile
|
|
return True
|
|
except NameError:
|
|
return False
|
|
|
|
def test():
|
|
global x
|
|
|
|
c = compile("print(x)", "file", "exec")
|
|
|
|
try:
|
|
exec(c)
|
|
except NameError:
|
|
print("NameError")
|
|
|
|
# global variable for compiled code to access
|
|
x = 1
|
|
|
|
exec(c)
|
|
|
|
exec(c, {"x":2})
|
|
exec(c, {}, {"x":3})
|
|
|
|
# single/eval mode
|
|
exec(compile('print(1 + 1)', 'file', 'single'))
|
|
print(eval(compile('1 + 1', 'file', 'eval')))
|
|
|
|
# bad mode
|
|
try:
|
|
compile('1', 'file', '')
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# exception within compiled code
|
|
try:
|
|
exec(compile('noexist', 'file', 'exec'))
|
|
except NameError:
|
|
print("NameError")
|
|
print(x) # check 'x' still exists as a global
|
|
|
|
if have_compile():
|
|
test()
|
|
else:
|
|
print("SKIP")
|
|
raise SystemExit
|