function pytestFilterArguments()

in src/client/testing/testController/pytest/arguments.ts [149:263]


function pytestFilterArguments(args: string[], argumentToRemoveOrFilter: string[] | TestFilter): string[] {
    const optionsWithoutArgsToRemove: string[] = [];
    const optionsWithArgsToRemove: string[] = [];
    // Positional arguments in pytest are test directories and files.
    // So if we want to run a specific test, then remove positional args.
    let removePositionalArgs = false;
    if (Array.isArray(argumentToRemoveOrFilter)) {
        argumentToRemoveOrFilter.forEach((item) => {
            if (OptionsWithArguments.indexOf(item) >= 0) {
                optionsWithArgsToRemove.push(item);
            }
            if (OptionsWithoutArguments.indexOf(item) >= 0) {
                optionsWithoutArgsToRemove.push(item);
            }
        });
    } else {
        switch (argumentToRemoveOrFilter) {
            case TestFilter.removeTests: {
                optionsWithoutArgsToRemove.push(
                    ...['--lf', '--last-failed', '--ff', '--failed-first', '--nf', '--new-first'],
                );
                optionsWithArgsToRemove.push(...['-k', '-m', '--lfnf', '--last-failed-no-failures']);
                removePositionalArgs = true;
                break;
            }
            case TestFilter.discovery: {
                optionsWithoutArgsToRemove.push(
                    ...[
                        '-x',
                        '--exitfirst',
                        '--fixtures',
                        '--funcargs',
                        '--fixtures-per-test',
                        '--pdb',
                        '--lf',
                        '--last-failed',
                        '--ff',
                        '--failed-first',
                        '--nf',
                        '--new-first',
                        '--cache-show',
                        '-v',
                        '--verbose',
                        '-q',
                        '-quiet',
                        '-l',
                        '--showlocals',
                        '--no-print-logs',
                        '--debug',
                        '--setup-only',
                        '--setup-show',
                        '--setup-plan',
                        '--trace',
                    ],
                );
                optionsWithArgsToRemove.push(
                    ...[
                        '-m',
                        '--maxfail',
                        '--pdbcls',
                        '--capture',
                        '--lfnf',
                        '--last-failed-no-failures',
                        '--verbosity',
                        '-r',
                        '--tb',
                        '--show-capture',
                        '--durations',
                        '--junit-xml',
                        '--junit-prefix',
                        '--result-log',
                        '-W',
                        '--pythonwarnings',
                        '--log-*',
                    ],
                );
                removePositionalArgs = true;
                break;
            }
            case TestFilter.debugAll:
            case TestFilter.runAll: {
                optionsWithoutArgsToRemove.push(...['--collect-only', '--trace']);
                break;
            }
            case TestFilter.debugSpecific:
            case TestFilter.runSpecific: {
                optionsWithoutArgsToRemove.push(
                    ...[
                        '--collect-only',
                        '--lf',
                        '--last-failed',
                        '--ff',
                        '--failed-first',
                        '--nf',
                        '--new-first',
                        '--trace',
                    ],
                );
                optionsWithArgsToRemove.push(...['-k', '-m', '--lfnf', '--last-failed-no-failures']);
                removePositionalArgs = true;
                break;
            }
            default: {
                throw new Error(`Unsupported Filter '${argumentToRemoveOrFilter}'`);
            }
        }
    }

    let filteredArgs = args.slice();
    if (removePositionalArgs) {
        const positionalArgs = getPositionalArguments(filteredArgs, OptionsWithArguments, OptionsWithoutArguments);
        filteredArgs = filteredArgs.filter((item) => positionalArgs.indexOf(item) === -1);
    }
    return filterArguments(filteredArgs, optionsWithArgsToRemove, optionsWithoutArgsToRemove);
}