blob: 7c5f626a92605a6ead4032b94677a5d8a9b5d7f0 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:args/args.dart';
import 'package:async/async.dart';
import 'package:fxtest/fxtest.dart';
import 'package:fxutils/fxutils.dart';
import 'package:mockito/mockito.dart';
import 'package:test/test.dart';
import 'fake_fx_env.dart';
import 'helpers.dart';
class MockEnvReader extends Mock implements EnvReader {}
void main() {
group('test name arguments are parsed correctly', () {
test('when a dot is passed to stand in as the current directory', () {
final fxEnv = FakeFxEnv(
cwd: '/root/fuchsia/out/default/host_x64/gen',
);
var collector = TestNamesCollector(
rawTestNames: ['.'],
rawArgs: ['.'],
relativeCwd: fxEnv.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.unrestricted('host_x64/gen')]
]);
});
test('when a duplicate is passed in', () {
var collector = TestNamesCollector(
rawTestNames: ['asdf', 'asdf', 'xyz'],
rawArgs: ['asdf', 'asdf', 'xyz'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.unrestricted('asdf')],
[MatchableArgument.unrestricted('xyz')]
]);
});
test('when a dot and duplicate are passed in', () {
final fakeFxEnv = FakeFxEnv(cwd: '/root/fuchsia/out/default/host_x64');
var collector = TestNamesCollector(
rawTestNames: ['asdf', '.', 'asdf'],
rawArgs: ['asdf', '.', 'asdf', '--some-flag'],
relativeCwd: fakeFxEnv.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.unrestricted('asdf')],
[MatchableArgument.unrestricted('host_x64')]
]);
});
test('when a dot is passed from the build directory', () {
final fakeFxEnv = FakeFxEnv(cwd: '/root/fuchsia/out/default');
var collector = TestNamesCollector(
rawTestNames: ['.'],
rawArgs: ['.'],
relativeCwd: fakeFxEnv.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.unrestricted('.')]
]);
});
});
group('default test arguments are merged correctly', () {
test('when the option already exists', () {
var args = TestArguments(
parser: ArgParser()..addOption('some-option'),
rawArgs: ['--some-option', 'RIGHT ANSWER'],
defaultRawArgs: {'--some-option': 'WRONG ANSWER'},
);
expect(args.parsedArgs['some-option'], 'RIGHT ANSWER');
});
test('when the option does not already exist', () {
var args = TestArguments(
parser: ArgParser()..addOption('some-option'),
rawArgs: [],
defaultRawArgs: {'--some-option': 'RIGHT ANSWER'},
);
expect(args.parsedArgs['some-option'], 'RIGHT ANSWER');
});
test('when the flag already exists', () {
var args = TestArguments(
parser: ArgParser()
..addFlag('some-flag', defaultsTo: false, negatable: true),
rawArgs: ['--no-some-flag'],
defaultRawArgs: {'--some-flag': null},
);
expect(args.parsedArgs['some-flag'], false);
});
test('when the flag does not already exist', () {
var args = TestArguments(
parser: ArgParser()
..addFlag('some-flag', defaultsTo: false, negatable: true),
rawArgs: [],
defaultRawArgs: {'--some-flag': null},
);
expect(args.parsedArgs['some-flag'], true);
});
test('with abbreviations', () {
// Bit of a null-case, this one
var args = TestArguments(
parser: ArgParser()
..addFlag('some-flag', defaultsTo: false, negatable: true, abbr: 's'),
rawArgs: ['-s'],
defaultRawArgs: {'--some-flag': null},
);
expect(args.parsedArgs['some-flag'], true);
});
test('with abbreviations and opposite default', () {
// Bit of a null-case, this one
var args = TestArguments(
parser: ArgParser()
..addFlag('some-flag', defaultsTo: false, negatable: true, abbr: 's'),
rawArgs: ['-s'],
defaultRawArgs: {'--no-some-flag': null},
);
expect(args.parsedArgs['some-flag'], true);
});
test('with abbreviations and options', () {
// Bit of a null-case, this one
var args = TestArguments(
parser: ArgParser()..addOption('some-flag', abbr: 's'),
rawArgs: ['-s', 'RIGHT-ANSWER'],
defaultRawArgs: {'--some-flag': 'WRONG-ANSWER'},
);
expect(args.parsedArgs['some-flag'], 'RIGHT-ANSWER');
});
test('when an abbreviation appears as a value', () {
// Bit of a null-case, this one
var args = TestArguments(
parser: ArgParser()
..addOption('some-flag', abbr: 's')
..addOption('other-flag'),
rawArgs: ['--other-flag', 's', '--some-flag', 'RIGHT-ANSWER'],
defaultRawArgs: {'--some-flag': 'WRONG-ANSWER'},
);
expect(args.parsedArgs['some-flag'], 'RIGHT-ANSWER');
});
});
group('arguments are passed through correctly', () {
void _ignoreEvents(TestEvent _) {}
TestsManifestReader tr = TestsManifestReader();
List<TestDefinition> testDefinitions = [
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
name: 'device test v1',
os: 'fuchsia',
packageUrl:
PackageUrl.fromString('fuchsia-pkg://fuchsia.com/fancy#test.cmx'),
),
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
name: 'device test v2',
os: 'fuchsia',
packageUrl:
PackageUrl.fromString('fuchsia-pkg://fuchsia.com/fancy#test.cm'),
),
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
name: 'example-test',
os: 'linux',
path: '/asdf',
),
];
test('when there are pass-thru commands for binary tests', () async {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['example-test', '--', '--xyz'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: (TestsConfig testsConfig) =>
FakeTestRunner.passing(),
);
ParsedManifest manifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: testDefinitions,
testsConfig: testsConfig,
);
expect(manifest.testBundles, hasLength(1));
var stream = StreamQueue(manifest.testBundles[0].run());
TestEvent event = await stream.next;
expect(event, isA<TestStarted>());
event = await stream.next;
expect(event, isA<TestResult>());
TestResult resultEvent = event as TestResult;
// [FakeTestRunner] passes args through to its stdout, so we can check
// that the args were in fact passed through by evaluating that
expect(resultEvent.message, '--xyz');
});
test('when there are pass-thru commands for suite tests', () async {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['example-test', '--', '--xyz'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: (TestsConfig testsConfig) =>
FakeTestRunner.passing(),
);
var bundle = cmd.testBundleBuilder(testDefinitions[1]);
var stream = StreamQueue(bundle.run());
TestEvent event = await stream.next;
expect(event, isA<TestStarted>());
event = await stream.next;
expect(event, isA<TestResult>());
TestResult resultEvent = event as TestResult;
// [FakeTestRunner] passes args through to its stdout, so we can check
// that the args were in fact passed through by evaluating that
expect(resultEvent.message,
'ffx test run --disable-output-directory fuchsia-pkg://fuchsia.com/fancy#meta/test.cm -- --xyz');
});
test('when there are pass-thru commands for component tests', () async {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['example-test', '--', '--xyz'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: (TestsConfig testsConfig) =>
FakeTestRunner.passing(),
);
var bundle = cmd.testBundleBuilder(testDefinitions[0]);
var stream = StreamQueue(bundle.run());
TestEvent event = await stream.next;
expect(event, isA<TestStarted>());
event = await stream.next;
expect(event, isA<TestResult>());
TestResult resultEvent = event as TestResult;
// [FakeTestRunner] passes args through to its stdout, so we can check
// that the args were in fact passed through by evaluating that
expect(resultEvent.message,
'shell run-test-component fuchsia-pkg://fuchsia.com/fancy#meta/test.cmx -- --xyz');
});
test('when there are no pass-thru commands', () async {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['example-test'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: (TestsConfig testsConfig) =>
FakeTestRunner.passing(),
);
ParsedManifest manifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: testDefinitions,
testsConfig: testsConfig,
);
expect(manifest.testBundles, hasLength(1));
var stream = StreamQueue(manifest.testBundles[0].run());
TestEvent event = await stream.next;
expect(event, isA<TestStarted>());
event = await stream.next;
expect(event, isA<TestResult>());
TestResult resultEvent = event as TestResult;
// [FakeTestRunner] passes args through to its stdout, so we can check
// that the args were in fact passed through by evaluating that
expect(resultEvent.message, '');
});
test('after parsing with "--" in middle', () {
List<List<String>> splitArgs = TestArguments.splitArgs(
['asdf', 'ASDF', '--', 'some', 'flag'],
);
expect(splitArgs, hasLength(2));
expect(splitArgs[0], ['asdf', 'ASDF']);
expect(splitArgs[1], ['some', 'flag']);
});
test('after parsing with "--" at end', () {
List<List<String>> splitArgs = TestArguments.splitArgs(
['asdf', 'ASDF', '--'],
);
expect(splitArgs, hasLength(2));
expect(splitArgs[0], ['asdf', 'ASDF']);
expect(splitArgs[1], hasLength(0));
});
test('after parsing with "--" at beginning', () {
List<List<String>> splitArgs = TestArguments.splitArgs(
['--', 'asdf', 'ASDF'],
);
expect(splitArgs, hasLength(2));
expect(splitArgs[0], hasLength(0));
expect(splitArgs[1], ['asdf', 'ASDF']);
});
test('after parsing with no "--"', () {
List<List<String>> splitArgs = TestArguments.splitArgs(
['asdf', 'ASDF'],
);
expect(splitArgs, hasLength(2));
expect(splitArgs[0], ['asdf', 'ASDF']);
expect(splitArgs[1], hasLength(0));
});
});
group('flags are parsed correctly', () {
test('regarding --log', () {
// The default workflow (not using CLI wrappers) doesn't write logs
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: [],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.shouldLog, false);
});
test('regarding --log from real code path', () {
var cliCmdWrapper = FuchsiaTestCommandCli(
[],
usage: (argParser) => {},
fxEnv: FakeFxEnv.shared,
);
var cmd = cliCmdWrapper.createCommand();
expect(cmd.testsConfig.flags.shouldLog, true);
});
test('with --info', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--info'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.infoOnly, true);
expect(testsConfig.flags.dryRun, true);
expect(testsConfig.flags.shouldRebuild, false);
});
test('with --dry', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--dry'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.infoOnly, false);
expect(testsConfig.flags.dryRun, true);
expect(testsConfig.flags.shouldRebuild, false);
});
test('with --no-build', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--no-build'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.shouldRebuild, false);
});
test('with no --no-build', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: [''],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.shouldRebuild, true);
});
test('with --realm', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--realm=foo'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.realm, 'foo');
expect(testsConfig.flags.shouldRestrictLogs, true);
expect(
testsConfig.runnerTokens[TestType.component], ['--realm-label=foo']);
});
test('with no --restrict-logs', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: [],
fxEnv: FakeFxEnv.shared,
);
// Still true because that is the default
expect(testsConfig.flags.shouldRestrictLogs, true);
expect(testsConfig.runnerTokens[TestType.component], []);
});
test('with --no-restrict-logs', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--no-restrict-logs'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.shouldRestrictLogs, false);
expect(testsConfig.runnerTokens[TestType.component], []);
});
test('with --restrict-logs', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--restrict-logs'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.shouldRestrictLogs, true);
expect(testsConfig.runnerTokens[TestType.component], []);
});
test('with --restrict-logs and --realm', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: [
'--restrict-logs',
'--realm=bar',
],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.realm, 'bar');
expect(testsConfig.flags.shouldRestrictLogs, true);
expect(testsConfig.runnerTokens[TestType.component], [
'--realm-label=bar',
]);
});
test('with --min-severity-logs', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--min-severity-logs=WARN'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.minSeverityLogs, 'WARN');
expect(testsConfig.runnerTokens[TestType.component],
contains('--min-severity-logs=WARN'));
});
test('with --test-filter', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--test-filter=mytest'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.testFilter, ['mytest']);
expect(testsConfig.flags.count, null);
expect(testsConfig.flags.runDisabledTests, false);
expect(
testsConfig.runnerTokens[TestType.suite], contains('--test-filter'));
expect(testsConfig.runnerTokens[TestType.suite], contains('mytest'));
expect(
testsConfig.runnerTokens[TestType.suite], isNot(contains('--count')));
expect(testsConfig.runnerTokens[TestType.suite],
isNot(contains('--also-run-disabled-tests')));
});
test('with multiple --test-filter', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--test-filter=mypattern1', '--test-filter=mypattern2'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.testFilter, ['mypattern1', 'mypattern2']);
expect(testsConfig.flags.count, null);
expect(testsConfig.flags.runDisabledTests, false);
expect(
testsConfig.runnerTokens[TestType.suite]
?.where((e) => e == '--test-filter'),
['--test-filter', '--test-filter']);
expect(testsConfig.runnerTokens[TestType.suite], contains('mypattern1'));
expect(testsConfig.runnerTokens[TestType.suite], contains('mypattern2'));
expect(
testsConfig.runnerTokens[TestType.suite], isNot(contains('--count')));
expect(testsConfig.runnerTokens[TestType.suite],
isNot(contains('--also-run-disabled-tests')));
});
test('with --timeout', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--timeout=5'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.timeout, 5);
expect(testsConfig.runnerTokens[TestType.suite], contains('--timeout'));
expect(testsConfig.runnerTokens[TestType.suite], contains('5'));
expect(testsConfig.runnerTokens[TestType.component],
contains('--timeout=5'));
});
test('with --count', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--count=22'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.count, '22');
expect(testsConfig.runnerTokens[TestType.suite],
isNot(contains('--test-filter')));
expect(testsConfig.runnerTokens[TestType.suite], contains('--count'));
expect(testsConfig.runnerTokens[TestType.suite], contains('22'));
});
test('with --fail', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--fail'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.shouldFailFast, true);
expect(testsConfig.runnerTokens[TestType.suite],
contains('--stop-after-failures'));
expect(testsConfig.runnerTokens[TestType.suite], contains('1'));
});
test('with --fail and --count', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--fail', '--count=22'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.shouldFailFast, true);
expect(testsConfig.flags.count, '22');
expect(testsConfig.runnerTokens[TestType.suite],
contains('--stop-after-failures'));
expect(testsConfig.runnerTokens[TestType.suite], contains('1'));
expect(testsConfig.runnerTokens[TestType.suite], contains('--count'));
expect(testsConfig.runnerTokens[TestType.suite], contains('22'));
});
test('with --parallel', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--parallel=10'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.parallel, '10');
expect(testsConfig.runnerTokens[TestType.suite],
isNot(contains('--test-filter')));
// shouldn't be added yet. TODO - figure out a nicer refactor here so that the flags are
// generated just once
expect(testsConfig.runnerTokens[TestType.suite],
isNot(contains('--parallel')));
});
test('with --also-run-disabled-tests', () {
var testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['--also-run-disabled-tests'],
fxEnv: FakeFxEnv.shared,
);
expect(testsConfig.flags.runDisabledTests, true);
expect(testsConfig.runnerTokens[TestType.suite],
isNot(contains('--test-filter')));
expect(
testsConfig.runnerTokens[TestType.suite], contains('--run-disabled'));
});
});
group('test names are collected correctly', () {
test('with zero test names', () {
var collector = TestNamesCollector(
rawArgs: [],
rawTestNames: [],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.empty()],
]);
});
test('with zero test names but some flags', () {
var collector = TestNamesCollector(
rawArgs: ['--some-flags', '--more-flags', 'asdf'],
rawTestNames: [],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.empty()],
]);
});
test('with one test name', () {
var collector = TestNamesCollector(
rawArgs: ['test_one'],
rawTestNames: ['test_one'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.unrestricted('test_one')],
]);
});
test('with one test name and flags', () {
var collector = TestNamesCollector(
rawArgs: ['test_one', '--exact'],
rawTestNames: ['test_one'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.unrestricted('test_one')],
]);
});
test('with two test names', () {
var collector = TestNamesCollector(
rawArgs: ['test_one', 'test_two'],
rawTestNames: ['test_one', 'test_two'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.unrestricted('test_one')],
[MatchableArgument.unrestricted('test_two')]
]);
});
test('with two test names and flags', () {
var collector = TestNamesCollector(
rawArgs: ['test_one', 'test_two', '--exact'],
rawTestNames: ['test_one', 'test_two'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.unrestricted('test_one')],
[MatchableArgument.unrestricted('test_two')]
]);
});
test('with one test names and AND flags', () {
var collector = TestNamesCollector(
rawArgs: ['test_one', '-a', 'filter-two'],
rawTestNames: ['test_one'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[
MatchableArgument.unrestricted('test_one'),
MatchableArgument.unrestricted('filter-two')
],
]);
});
test('with two test names and AND flags', () {
var collector = TestNamesCollector(
rawArgs: ['test_one', '-a', 'filter-two', 'test_two'],
rawTestNames: ['test_one', 'test_two'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[
MatchableArgument.unrestricted('test_one'),
MatchableArgument.unrestricted('filter-two')
],
[MatchableArgument.unrestricted('test_two')],
]);
});
test('with two test names and multiple AND flags', () {
var collector = TestNamesCollector(
rawArgs: [
'test_one',
'-a',
'filter-two',
'-a',
'filter-three',
'test_two'
],
rawTestNames: ['test_one', 'test_two'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[
MatchableArgument.unrestricted('test_one'),
MatchableArgument.unrestricted('filter-two'),
MatchableArgument.unrestricted('filter-three')
],
[MatchableArgument.unrestricted('test_two')],
]);
});
test('with two test names and AND flags for multiple tests', () {
var collector = TestNamesCollector(
rawArgs: [
'test_one',
'-a',
'filter-two',
'-a',
'filter-three',
'test_two',
'-a',
'filter-four'
],
rawTestNames: ['test_one', 'test_two'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[
MatchableArgument.unrestricted('test_one'),
MatchableArgument.unrestricted('filter-two'),
MatchableArgument.unrestricted('filter-three')
],
[
MatchableArgument.unrestricted('test_two'),
MatchableArgument.unrestricted('filter-four')
],
]);
});
test('with -p & -c flags', () {
var collector = TestNamesCollector(
rawArgs: ['-p', 'test_one', '-c', 'filter-two'],
rawTestNames: [],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[
MatchableArgument.packageName('test_one'),
MatchableArgument.componentName('filter-two')
],
]);
});
test('with -c flags and test names', () {
var collector = TestNamesCollector(
rawArgs: ['-c', 'filter-one', 'test-two'],
rawTestNames: ['test-two'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[MatchableArgument.componentName('filter-one')],
[MatchableArgument.unrestricted('test-two')],
]);
});
test('with test names and -p & -c flags', () {
var collector = TestNamesCollector(
rawArgs: ['test-one', 'test-two', '-p', 'pkg-name', '-c', 'filter-two'],
rawTestNames: ['test-one', 'test-two'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[
MatchableArgument.unrestricted('test-one'),
],
[
MatchableArgument.unrestricted('test-two'),
],
[
MatchableArgument.packageName('pkg-name'),
MatchableArgument.componentName('filter-two')
],
]);
});
test('with -p & -c flags and test names', () {
var collector = TestNamesCollector(
rawArgs: ['-p', 'pkg-name', '-c', 'filter-two', 'test-one', 'test-two'],
rawTestNames: ['test-one', 'test-two'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[
MatchableArgument.packageName('pkg-name'),
MatchableArgument.componentName('filter-two')
],
[
MatchableArgument.unrestricted('test-one'),
],
[
MatchableArgument.unrestricted('test-two'),
],
]);
});
test('with test names with AND flags and -p & -c flags and test names', () {
var collector = TestNamesCollector(
rawArgs: [
'test-zero',
'-a',
'filter-zero',
'-p',
'pkg-name',
'-c',
'filter-two',
'test-one',
'test-two'
],
rawTestNames: ['test-zero', 'test-one', 'test-two'],
relativeCwd: FakeFxEnv.shared.relativeCwd,
);
expect(collector.collect(), [
[
MatchableArgument.unrestricted('test-zero'),
MatchableArgument.unrestricted('filter-zero')
],
[
MatchableArgument.packageName('pkg-name'),
MatchableArgument.componentName('filter-two')
],
[
MatchableArgument.unrestricted('test-one'),
],
[
MatchableArgument.unrestricted('test-two'),
],
]);
});
});
}