forked from Imagelibrary/rtems
117 lines
2.8 KiB
Python
Executable File
117 lines
2.8 KiB
Python
Executable File
#! /usr/bin/env python
|
|
#
|
|
# Copyright 2017 Chris Johns <chrisj@rtems.org>
|
|
# All rights reserved
|
|
#
|
|
|
|
#
|
|
# Python version the rtems-test-check script.
|
|
#
|
|
|
|
from __future__ import print_function
|
|
import os.path
|
|
import sys
|
|
|
|
def eprint(*args, **kwargs):
|
|
print(*args, file=sys.stderr, **kwargs)
|
|
|
|
#
|
|
# Arguments. Keep it simple.
|
|
#
|
|
if len(sys.argv) < 4:
|
|
eprint('error: invalid command line')
|
|
print('INVALID-TEST-DATA')
|
|
sys.exit(2)
|
|
|
|
mode = sys.argv[1]
|
|
testconfig = [sys.argv[2]]
|
|
includepath = sys.argv[3]
|
|
bsp = sys.argv[4]
|
|
tests = sys.argv[5:]
|
|
|
|
#
|
|
# Handle the modes.
|
|
#
|
|
if mode == 'exclude':
|
|
pass
|
|
elif mode == 'flags':
|
|
if len(tests) != 1:
|
|
eprint('error: test count not 1 for mode: %s' % (mode))
|
|
print('INVALID-TEST-DATA')
|
|
sys.exit(1)
|
|
else:
|
|
eprint('error: invalid mode: %s' % (mode))
|
|
print('INVALID-TEST-DATA')
|
|
sys.exit(1)
|
|
|
|
#
|
|
# Common RTEMS testsuite configuration. Load first.
|
|
#
|
|
rtems_testdata = os.path.join(includepath, 'testdata', 'rtems.tcfg')
|
|
if os.path.exists(rtems_testdata):
|
|
testconfig.insert(0, rtems_testdata)
|
|
|
|
states = ['exclude',
|
|
'expected-fail',
|
|
'user-input',
|
|
'indeterminate',
|
|
'benchmark']
|
|
defines = { 'expected-fail' : '-DTEST_STATE_EXPECTED_FAIL=1',
|
|
'user-input' : '-DTEST_STATE_USER_INPUT=1',
|
|
'indeterminate' : '-DTEST_STATE_INDETERMINATE=1',
|
|
'benchmark' : '-DTEST_STATE_BENCHMARK=1' }
|
|
output = []
|
|
testdata = {}
|
|
|
|
def clean(line):
|
|
line = line[0:-1]
|
|
b = line.find('#')
|
|
if b >= 0:
|
|
line = line[1:b]
|
|
return line.strip()
|
|
|
|
#
|
|
# Load the test data.
|
|
#
|
|
for tc in range(0, len(testconfig)):
|
|
if not os.path.exists(testconfig[tc]):
|
|
continue
|
|
with open(testconfig[tc]) as f:
|
|
tdata = [clean(l) for l in f.readlines()]
|
|
lc = 0
|
|
for line in tdata:
|
|
lc += 1
|
|
ls = [s.strip() for s in line.split(':')]
|
|
if len(line) == 0:
|
|
continue
|
|
if len(ls) != 2:
|
|
eprint('error: syntax error: %s:%d' % (tc, lc))
|
|
print('INVALID-TEST-DATA')
|
|
sys.exit(1)
|
|
state = ls[0]
|
|
test = ls[1]
|
|
if state == 'include':
|
|
testconfig.insert(tc, test)
|
|
elif state in states:
|
|
if state not in testdata:
|
|
testdata[state] = [test]
|
|
else:
|
|
testdata[state] += [test]
|
|
else:
|
|
eprint('error: invalid test state: %s in %s:%d' % (state, tc, lc))
|
|
print('INVALID-TEST-DATA')
|
|
sys.exit(1)
|
|
|
|
for test in tests:
|
|
if mode == 'exclude':
|
|
if 'exclude' not in testdata or test not in testdata['exclude']:
|
|
output += [test]
|
|
elif mode == 'flags':
|
|
for state in states:
|
|
if state != 'exclude' and state in testdata and test in testdata[state]:
|
|
output += [defines[state]]
|
|
|
|
print(' '.join(sorted(set(output))))
|
|
|
|
sys.exit(0)
|