Changeset a06356b in rtems


Ignore:
Timestamp:
Mar 6, 2019, 9:31:10 AM (6 weeks ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
96e4b22
Parents:
85d5f6c
git-author:
Chris Johns <chrisj@…> (03/06/19 09:31:10)
git-committer:
Chris Johns <chrisj@…> (03/06/19 19:33:47)
Message:

testsuite: Add rexclude, rinclude and cflags to test config files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • testsuites/rtems-test-check.py

    r85d5f6c ra06356b  
    3838import os
    3939import os.path
     40import re
     41import sre_constants
    4042import sys
    4143
     
    8385if mode == 'exclude':
    8486    pass
    85 elif mode == 'flags':
     87elif mode == 'cflags':
    8688    if len(tests) != 1:
    8789        eprint('error: test count not 1 for mode: %s' % (mode))
     
    104106          'user-input',
    105107          'indeterminate',
    106           'benchmark']
     108          'benchmark',
     109          'rexclude',
     110          'rinclude']
     111flags = ['cflags']
    107112defines = { 'expected-fail' : '-DTEST_STATE_EXPECTED_FAIL=1',
    108113            'user-input'    : '-DTEST_STATE_USER_INPUT=1',
     
    110115            'benchmark'     : '-DTEST_STATE_BENCHMARK=1' }
    111116output = []
    112 testdata = {}
     117testdata = { 'flags': {} }
     118
     119for f in flags:
     120    testdata['flags'][f] = {}
    113121
    114122if verbose:
     
    146154    for line in tdata:
    147155        lc += 1
    148         ls = [s.strip() for s in line.split(':')]
    149156        if len(line) == 0:
    150157            continue
     158        ls = [s.strip() for s in line.split(':', 1)]
    151159        if verbose:
    152160            eprint('%4d: %s' % (lc, line))
     
    162170                eprint('error: include not found: %s:%d' % (tc, lc))
    163171                print('INVALID-TEST-DATA')
     172                sys.exit(1)
    164173            testconfig.insert(0, td)
    165174            if verbose:
    166175                eprint('include: %s' % (', '.join(testconfig)))
     176        elif state in flags:
     177            fs = test.split(':', 1)
     178            if len(fs) != 2:
     179                eprint('error: syntax error: %s:%d' % (tc, lc))
     180                print('INVALID-TEST-DATA')
     181                sys.exit(1)
     182            ftests = [t.strip() for t in fs[0].split(',')]
     183            if verbose:
     184                eprint('%4d: %r : %s' % (lc, ftests, fs[1]))
     185            for test in ftests:
     186                if test not in testdata['flags'][state]:
     187                    testdata['flags'][state][test] = [fs[1]]
     188                else:
     189                    testdata['flags'][state][test] += [fs[1]]
    167190        elif state in states:
     191            stests = [t.strip() for t in test.split(',')]
    168192            if state not in testdata:
    169                 testdata[state] = [test]
     193                testdata[state] = stests
    170194            else:
    171                 testdata[state] += [test]
     195                testdata[state] += stests
    172196        else:
    173197            eprint('error: invalid test state: %s in %s:%d' % (state, tc, lc))
     
    175199            sys.exit(1)
    176200
     201if mode in flags:
     202    for state in ['exclude', 'rexclude', 'rinclude']:
     203        states.remove(state)
     204
    177205for test in tests:
    178206    if mode == 'exclude':
    179         if 'exclude' not in testdata or test not in testdata['exclude']:
     207        #
     208        # Exclude is the highest priority, do this first
     209        #
     210        if 'exclude' in testdata and test in testdata['exclude']:
     211            exclude = True
     212        else:
     213            #
     214            # Regx exclude then regx include so you can filter a whole
     215            # group and add back some.
     216            #
     217            exclude = False
     218            if 'rexclude' in testdata:
     219                for e in testdata['rexclude']:
     220                    try:
     221                        m = re.compile(e).match(test)
     222                    except sre_constants.error as ree:
     223                        eprint('error: invalid rexclude regx: %s: %s' % (e, ree))
     224                        print('INVALID-TEST-DATA')
     225                        sys.exit(1)
     226                    if m:
     227                        exclude = True
     228                        if 'rinclude' in testdata:
     229                            for i in testdata['rinclude']:
     230                                try:
     231                                    m = re.compile(i).match(test)
     232                                except sre_constants.error as ree:
     233                                    eprint('error: invalid rinclude regx: %s: %s' % (i, ree))
     234                                    print('INVALID-TEST-DATA')
     235                                    sys.exit(1)
     236                                if m:
     237                                    exclude = False
     238        #
     239        # If not excluded add the test to the output
     240        #
     241        if not exclude:
    180242            output += [test]
    181     elif mode == 'flags':
    182         for state in states:
    183             if state != 'exclude' and state in testdata and test in testdata[state]:
    184                 output += [defines[state]]
     243    elif mode in flags:
     244        if mode == 'cflags':
     245            for state in states:
     246                if state in testdata and test in testdata[state]:
     247                    output += [defines[state]]
     248        for ftest in testdata['flags'][mode]:
     249            try:
     250                m = re.compile(ftest).match(test)
     251            except sre_constants.error as ref:
     252                eprint('error: invalid flags test regx: %s: %s' % (ftest, ref))
     253                print('INVALID-TEST-DATA')
     254                sys.exit(1)
     255            if m:
     256                output += testdata['flags'][mode][ftest]
    185257
    186258print(' '.join(sorted(set(output))))
Note: See TracChangeset for help on using the changeset viewer.