tests: Add ability to test uPy cmdline executable.
This allows to test options passed to cmdline executable, as well as the behaviour of the REPL.
This commit is contained in:
parent
af43565322
commit
143c34109c
3
tests/cmdline/cmd_verbose.py
Normal file
3
tests/cmdline/cmd_verbose.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# cmdline: -v -v
|
||||||
|
# test verbose output
|
||||||
|
print(1)
|
21
tests/cmdline/cmd_verbose.py.exp
Normal file
21
tests/cmdline/cmd_verbose.py.exp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
1
|
||||||
|
File cmdline/cmd_verbose.py, code block '<module>' (descriptor: ######
|
||||||
|
Raw bytecode (code_info_size=8, bytecode_size=13):
|
||||||
|
08 82 23 83 45 43 00 00 02 00 00 1c 81 13 00 81
|
||||||
|
64 01 32 11 5b
|
||||||
|
arg names:
|
||||||
|
(N_STATE 2)
|
||||||
|
(N_EXC_STACK 0)
|
||||||
|
(NUM_LOCAL 0)
|
||||||
|
bc=-3 line=1
|
||||||
|
bc=0 line=3
|
||||||
|
00 LOAD_NAME print (cache=0)
|
||||||
|
04 LOAD_CONST_SMALL_INT 1
|
||||||
|
05 CALL_FUNCTION n=1 nkw=0
|
||||||
|
07 POP_TOP
|
||||||
|
08 LOAD_CONST_NONE
|
||||||
|
09 RETURN_VALUE
|
||||||
|
mem: total=######
|
||||||
|
stack: ######
|
||||||
|
GC: total: ######
|
||||||
|
No. of 1-blocks: ######
|
3
tests/cmdline/repl_basic.py
Normal file
3
tests/cmdline/repl_basic.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# basic REPL tests
|
||||||
|
print(1)
|
||||||
|
OA
|
7
tests/cmdline/repl_basic.py.exp
Normal file
7
tests/cmdline/repl_basic.py.exp
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Micro Python ######
|
||||||
|
>>> # basic REPL tests
|
||||||
|
>>> print(1)
|
||||||
|
1
|
||||||
|
>>> print(1)
|
||||||
|
1
|
||||||
|
>>>
|
@ -28,10 +28,46 @@ def rm_f(fname):
|
|||||||
def run_micropython(pyb, args, test_file):
|
def run_micropython(pyb, args, test_file):
|
||||||
if pyb is None:
|
if pyb is None:
|
||||||
# run on PC
|
# run on PC
|
||||||
try:
|
if test_file.startswith('cmdline/'):
|
||||||
output_mupy = subprocess.check_output([MICROPYTHON, '-X', 'emit=' + args.emit, test_file])
|
# special handling for tests of the unix cmdline program
|
||||||
except subprocess.CalledProcessError:
|
|
||||||
output_mupy = b'CRASH'
|
# check for any cmdline options needed for this test
|
||||||
|
args = [MICROPYTHON]
|
||||||
|
with open(test_file, 'rb') as f:
|
||||||
|
line = f.readline()
|
||||||
|
if line.startswith(b'# cmdline:'):
|
||||||
|
args += line[10:].strip().split()
|
||||||
|
|
||||||
|
# run the test, possibly with redirected input
|
||||||
|
try:
|
||||||
|
if test_file.startswith('cmdline/repl_'):
|
||||||
|
f = open(test_file, 'rb')
|
||||||
|
output_mupy = subprocess.check_output(args, stdin=f)
|
||||||
|
f.close()
|
||||||
|
else:
|
||||||
|
output_mupy = subprocess.check_output(args + [test_file])
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
output_mupy = b'CRASH'
|
||||||
|
|
||||||
|
# erase parts of the output that are not stable across runs
|
||||||
|
with open(test_file + '.exp', 'rb') as f:
|
||||||
|
lines_exp = f.readlines()
|
||||||
|
lines_mupy = [line + b'\n' for line in output_mupy.split(b'\n')]
|
||||||
|
if output_mupy.endswith(b'\n'):
|
||||||
|
lines_mupy = lines_mupy[:-1] # remove erroneous last empty line
|
||||||
|
if len(lines_mupy) == len(lines_exp):
|
||||||
|
for i in range(len(lines_mupy)):
|
||||||
|
pos = lines_exp[i].find(b'######')
|
||||||
|
if pos != -1 and len(lines_mupy[i]) >= pos:
|
||||||
|
lines_mupy[i] = lines_mupy[i][:pos] + b'######\n'
|
||||||
|
output_mupy = b''.join(lines_mupy)
|
||||||
|
|
||||||
|
else:
|
||||||
|
# a standard test
|
||||||
|
try:
|
||||||
|
output_mupy = subprocess.check_output([MICROPYTHON, '-X', 'emit=' + args.emit, test_file])
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
output_mupy = b'CRASH'
|
||||||
else:
|
else:
|
||||||
# run on pyboard
|
# run on pyboard
|
||||||
import pyboard
|
import pyboard
|
||||||
@ -186,7 +222,7 @@ def main():
|
|||||||
if args.test_dirs is None:
|
if args.test_dirs is None:
|
||||||
if pyb is None:
|
if pyb is None:
|
||||||
# run PC tests
|
# run PC tests
|
||||||
test_dirs = ('basics', 'micropython', 'float', 'import', 'io', 'misc', 'unicode', 'extmod', 'unix')
|
test_dirs = ('basics', 'micropython', 'float', 'import', 'io', 'misc', 'unicode', 'extmod', 'unix', 'cmdline')
|
||||||
else:
|
else:
|
||||||
# run pyboard tests
|
# run pyboard tests
|
||||||
test_dirs = ('basics', 'micropython', 'float', 'misc', 'extmod', 'pyb', 'pybnative', 'inlineasm')
|
test_dirs = ('basics', 'micropython', 'float', 'misc', 'extmod', 'pyb', 'pybnative', 'inlineasm')
|
||||||
|
Loading…
Reference in New Issue
Block a user