示例#1
0
def main(args):
    parser = argparse.ArgumentParser()
    parser.add_argument('-a',
                        '--arg',
                        help='additional args to pass to executable',
                        action='append')
    parser.add_argument('--bindir',
                        metavar='PATH',
                        default=find_exe.GetDefaultPath(),
                        help='directory to search for all executables.')
    parser.add_argument('-v',
                        '--verbose',
                        help='print more diagnotic messages.',
                        action='store_true')
    parser.add_argument('-f',
                        '--fail-fast',
                        help='Exit on first failure. '
                        'Extra options with \'--jobs 1\'',
                        action='store_true')
    parser.add_argument('--stop-interactive',
                        help='Enter interactive mode on errors. '
                        'Extra options with \'--jobs 1\'',
                        action='store_true')
    parser.add_argument('-l',
                        '--list',
                        help='list all tests.',
                        action='store_true')
    parser.add_argument('-r',
                        '--rebase',
                        help='rebase a test to its current output.',
                        action='store_true')
    parser.add_argument('-j',
                        '--jobs',
                        help='number of jobs to use to run tests',
                        type=int,
                        default=GetDefaultJobCount())
    parser.add_argument('-t',
                        '--timeout',
                        type=float,
                        default=DEFAULT_TIMEOUT,
                        help='per test timeout in seconds')
    parser.add_argument('--no-roundtrip',
                        help='don\'t run roundtrip.py on all tests',
                        action='store_false',
                        default=True,
                        dest='roundtrip')
    parser.add_argument('-p',
                        '--print-cmd',
                        help='print the commands that are run.',
                        action='store_true')
    parser.add_argument('patterns',
                        metavar='pattern',
                        nargs='*',
                        help='test patterns.')
    options = parser.parse_args(args)

    if options.jobs != 1:
        if options.fail_fast:
            parser.error('--fail-fast only works with -j1')
        if options.stop_interactive:
            parser.error('--stop-interactive only works with -j1')

    if options.patterns:
        exclude_dirs = []
        pattern_re = '|'.join(
            fnmatch.translate('*%s*' % p) for p in options.patterns)
    else:
        pattern_re = '.*'
        # By default, exclude wasi tests because WASI support is not include
        # by int the build by default.
        # TODO(sbc): Find some way to detect the WASI support.
        exclude_dirs = ['wasi']

    test_names = FindTestFiles('.txt', pattern_re, exclude_dirs)

    if options.list:
        for test_name in test_names:
            print(test_name)
        return 0
    if not test_names:
        print('no tests match that filter')
        return 1

    variables = {}
    variables['test_dir'] = os.path.abspath(TEST_DIR)
    variables['bindir'] = options.bindir
    variables['gen_wasm_py'] = os.path.join(TEST_DIR, 'gen-wasm.py')
    variables['gen_spec_js_py'] = os.path.join(TEST_DIR, 'gen-spec-js.py')
    for exe_basename in find_exe.EXECUTABLES:
        exe_override = os.path.join(options.bindir, exe_basename)
        variables[exe_basename] = find_exe.FindExecutable(
            exe_basename, exe_override)

    status = Status(sys.stderr.isatty() and not options.verbose)
    infos = GetAllTestInfo(test_names, status)
    infos_to_run = []
    for info in infos:
        if info.skip:
            status.Skipped(info)
            continue
        infos_to_run.append(info)

        if options.roundtrip:
            for fold_exprs in False, True:
                try:
                    infos_to_run.append(
                        info.CreateRoundtripInfo(fold_exprs=fold_exprs))
                except NoRoundtripError:
                    pass

    if not os.path.exists(OUT_DIR):
        os.makedirs(OUT_DIR)

    status.Start(len(infos_to_run))

    try:
        if options.jobs > 1:
            RunMultiThreaded(infos_to_run, status, options, variables)
        else:
            RunSingleThreaded(infos_to_run, status, options, variables)
    except KeyboardInterrupt:
        print('\nInterrupted testing\n')

    status.Done()

    ret = 0
    if status.failed:
        sys.stderr.write('**** FAILED %s\n' % ('*' * (80 - 14)))
        for info, result in status.failed_tests:
            if isinstance(result, TestResult):
                msg = result.GetLastCommand()
            elif isinstance(result, Error):
                msg = result
            else:
                msg = ''
            sys.stderr.write('- %s\n    %s\n' % (info.GetName(), msg))
        ret = 1

    return ret
示例#2
0
def main(args):
    parser = argparse.ArgumentParser()
    parser.add_argument('-a',
                        '--arg',
                        help='additional args to pass to executable',
                        action='append')
    parser.add_argument('-o',
                        '--out-dir',
                        metavar='PATH',
                        help='output directory for files.')
    parser.add_argument('--exe-dir',
                        metavar='PATH',
                        help='directory to search for all executables. '
                        'This can be overridden by the other executable '
                        'flags.')
    for exe_basename in find_exe.EXECUTABLES:
        parser.add_argument('--%s' % exe_basename,
                            metavar='PATH',
                            help='override %s executable.' % exe_basename)
    parser.add_argument('-v',
                        '--verbose',
                        help='print more diagnotic messages.',
                        action='store_true')
    parser.add_argument('-f',
                        '--fail-fast',
                        help='Exit on first failure. '
                        'Extra options with \'--jobs 1\'',
                        action='store_true')
    parser.add_argument('--stop-interactive',
                        help='Enter interactive mode on errors. '
                        'Extra options with \'--jobs 1\'',
                        action='store_true')
    parser.add_argument('-l',
                        '--list',
                        help='list all tests.',
                        action='store_true')
    parser.add_argument('-r',
                        '--rebase',
                        help='rebase a test to its current output.',
                        action='store_true')
    parser.add_argument('-j',
                        '--jobs',
                        help='number of jobs to use to run tests',
                        type=int,
                        default=GetDefaultJobCount())
    parser.add_argument('-t',
                        '--timeout',
                        type=float,
                        default=DEFAULT_TIMEOUT,
                        help='per test timeout in seconds')
    parser.add_argument('--no-roundtrip',
                        help='don\'t run roundtrip.py on all tests',
                        action='store_false',
                        default=True,
                        dest='roundtrip')
    parser.add_argument('patterns',
                        metavar='pattern',
                        nargs='*',
                        help='test patterns.')
    options = parser.parse_args(args)

    if options.jobs != 1:
        if options.fail_fast:
            parser.error('--fail-fast only works with -j1')
        if options.stop_interactive:
            parser.error('--stop-interactive only works with -j1')

    if options.patterns:
        pattern_re = '|'.join(
            fnmatch.translate('*%s*' % p) for p in options.patterns)
    else:
        pattern_re = '.*'

    test_names = findtests.FindTestFiles(SCRIPT_DIR, '.txt', pattern_re)

    if options.list:
        for test_name in test_names:
            print(test_name)
        return 0
    if not test_names:
        print('no tests match that filter')
        return 1

    variables = {}
    variables['test_dir'] = os.path.abspath(SCRIPT_DIR)

    for exe_basename in find_exe.EXECUTABLES:
        attr_name = exe_basename.replace('-', '_')
        exe_override = getattr(options, attr_name)
        if options.exe_dir:
            if not exe_override:
                exe_override = os.path.join(options.exe_dir, exe_basename)
                setattr(options, attr_name, exe_override)

        variables[exe_basename] = find_exe.FindExecutable(
            exe_basename, exe_override)

    status = Status(options.verbose)
    infos = GetAllTestInfo(test_names, status)
    infos_to_run = []
    for info in infos:
        if info.skip:
            status.Skipped(info)
            continue
        infos_to_run.append(info)

        if options.roundtrip:
            if info.ShouldCreateRoundtrip():
                infos_to_run.append(info.CreateRoundtripInfo())

    test_count = len(infos_to_run)
    status.Start(test_count)

    if options.out_dir:
        out_dir = options.out_dir
        out_dir_is_temp = False
        if not os.path.exists(out_dir):
            os.makedirs(out_dir)
    else:
        out_dir = tempfile.mkdtemp(prefix='wabt-')
        out_dir_is_temp = True
    variables['out_dir'] = os.path.abspath(out_dir)

    try:
        if options.jobs > 1:
            RunMultiThreaded(infos_to_run, test_count, status, options,
                             variables)
        else:
            RunSingleThreaded(infos_to_run, status, options, variables)
    except KeyboardInterrupt:
        print('\nInterrupted testing\n')
    finally:
        if out_dir_is_temp:
            shutil.rmtree(out_dir)

    status.Clear()

    ret = 0

    if status.failed:
        sys.stderr.write('**** FAILED %s\n' % ('*' * (80 - 14)))
        for info in status.failed_tests:
            sys.stderr.write('- %s\n    %s\n' %
                             (info.name, ' '.join(info.last_cmd)))
        ret = 1

    status.Print()
    return ret
示例#3
0
def main(args):
    parser = argparse.ArgumentParser()
    parser.add_argument('-a',
                        '--arg',
                        help='additional args to pass to executable',
                        action='append')
    parser.add_argument('--bindir',
                        metavar='PATH',
                        default=find_exe.GetDefaultPath(),
                        help='directory to search for all executables.')
    parser.add_argument('-v',
                        '--verbose',
                        help='print more diagnotic messages.',
                        action='store_true')
    parser.add_argument('-f',
                        '--fail-fast',
                        help='Exit on first failure. '
                        'Extra options with \'--jobs 1\'',
                        action='store_true')
    parser.add_argument('--stop-interactive',
                        help='Enter interactive mode on errors. '
                        'Extra options with \'--jobs 1\'',
                        action='store_true')
    parser.add_argument('-l',
                        '--list',
                        help='list all tests.',
                        action='store_true')
    parser.add_argument('-r',
                        '--rebase',
                        help='rebase a test to its current output.',
                        action='store_true')
    parser.add_argument('-j',
                        '--jobs',
                        help='number of jobs to use to run tests',
                        type=int,
                        default=GetDefaultJobCount())
    parser.add_argument('-t',
                        '--timeout',
                        type=float,
                        default=DEFAULT_TIMEOUT,
                        help='per test timeout in seconds')
    parser.add_argument('--no-roundtrip',
                        help='don\'t run roundtrip.py on all tests',
                        action='store_false',
                        default=True,
                        dest='roundtrip')
    parser.add_argument('-p',
                        '--print-cmd',
                        help='print the commands that are run.',
                        action='store_true')
    parser.add_argument('patterns',
                        metavar='pattern',
                        nargs='*',
                        help='test patterns.')
    options = parser.parse_args(args)

    if options.jobs != 1:
        if options.fail_fast:
            parser.error('--fail-fast only works with -j1')
        if options.stop_interactive:
            parser.error('--stop-interactive only works with -j1')

    if options.patterns:
        pattern_re = '|'.join(
            fnmatch.translate('*%s*' % p) for p in options.patterns)
    else:
        pattern_re = '.*'

    test_names = FindTestFiles('.txt', pattern_re)

    if options.list:
        for test_name in test_names:
            print(test_name)
        return 0
    if not test_names:
        print('no tests match that filter')
        return 1

    variables = {}
    variables['test_dir'] = os.path.abspath(TEST_DIR)
    variables['bindir'] = options.bindir
    for exe_basename in find_exe.EXECUTABLES:
        exe_override = os.path.join(options.bindir, exe_basename)
        variables[exe_basename] = find_exe.FindExecutable(
            exe_basename, exe_override)

    status = Status(options.verbose)
    infos = GetAllTestInfo(test_names, status)
    infos_to_run = []
    for info in infos:
        if info.skip:
            status.Skipped(info)
            continue
        infos_to_run.append(info)

        if options.roundtrip and info.ShouldCreateRoundtrip():
            infos_to_run.append(info.CreateRoundtripInfo())

    if not os.path.exists(OUT_DIR):
        os.makedirs(OUT_DIR)

    status.Start(len(infos_to_run))

    try:
        if options.jobs > 1:
            RunMultiThreaded(infos_to_run, status, options, variables)
        else:
            RunSingleThreaded(infos_to_run, status, options, variables)
    except KeyboardInterrupt:
        print('\nInterrupted testing\n')

    status.Clear()

    ret = 0

    if status.failed:
        sys.stderr.write('**** FAILED %s\n' % ('*' * (80 - 14)))
        for info in status.failed_tests:
            sys.stderr.write('- %s\n    %s\n' %
                             (info.GetName(), ' '.join(info.last_cmd)))
        ret = 1

    status.Print()
    return ret