Skip to content
Snippets Groups Projects
Commit 143c3410 authored by Damien George's avatar Damien George
Browse files

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.
parent af435653
No related branches found
No related tags found
No related merge requests found
# cmdline: -v -v
# test verbose output
print(1)
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: ######
# basic REPL tests
print(1)
OA
Micro Python ######
>>> # basic REPL tests
>>> print(1)
1
>>> print(1)
1
>>>
......@@ -28,6 +28,42 @@ def rm_f(fname):
def run_micropython(pyb, args, test_file):
if pyb is None:
# run on PC
if test_file.startswith('cmdline/'):
# special handling for tests of the unix cmdline program
# 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:
......@@ -186,7 +222,7 @@ def main():
if args.test_dirs is None:
if pyb is None:
# 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:
# run pyboard tests
test_dirs = ('basics', 'micropython', 'float', 'misc', 'extmod', 'pyb', 'pybnative', 'inlineasm')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment