blob: d968b2a5107dee87d0373a05353534f3d9951125 [file] [log] [blame]
import 'package:fxtest/fxtest.dart';
import 'package:test/test.dart';
import 'fake_fx_env.dart';
void main() {
group('tests.json entries are correctly parsed', () {
test('for host tests', () {
TestsManifestReader tr = TestsManifestReader();
List<dynamic> testJson = [
{
'environments': [],
'test': {
'cpu': 'x64',
'runtime_deps':
'host_x64/gen/topaz/tools/doc_checker/doc_checker_tests.deps.json',
'path': 'host_x64/doc_checker_tests',
'name': '//topaz/tools/doc_checker:doc_checker_tests',
'os': 'linux',
}
},
];
List<TestDefinition> tds = tr.parseManifest(
testJson: testJson,
buildDir: FakeFxEnv.shared.outputDir,
fxLocation: FakeFxEnv.shared.fx,
);
expect(tds, hasLength(1));
expect(tds[0].packageUrl, null);
expect(tds[0].runtimeDeps, testJson[0]['test']['runtime_deps']);
expect(tds[0].path, testJson[0]['test']['path']);
expect(tds[0].name, testJson[0]['test']['name']);
expect(tds[0].cpu, testJson[0]['test']['cpu']);
expect(tds[0].os, testJson[0]['test']['os']);
expect(tds[0].testType, TestType.host);
});
test('for device tests', () {
TestsManifestReader tr = TestsManifestReader();
List<dynamic> testJson = [
{
'environments': [],
'test': {
'cpu': 'arm64',
'path':
'/pkgfs/packages/run_test_component_test/0/test/run_test_component_test',
'name': '//src/sys/run_test_component/test:run_test_component_test',
'os': 'fuchsia',
'package_url':
'fuchsia-pkg://fuchsia.com/run_test_component_test#meta/run_test_component_test.cmx',
'log_settings': {'max_severity': 'ERROR'},
}
},
];
List<TestDefinition> tds = tr.parseManifest(
testJson: testJson,
buildDir: FakeFxEnv.shared.outputDir,
fxLocation: FakeFxEnv.shared.fx,
);
expect(tds, hasLength(1));
expect(tds[0].packageUrl.toString(), testJson[0]['test']['package_url']);
expect(tds[0].runtimeDeps, '');
expect(tds[0].path, testJson[0]['test']['path']);
expect(tds[0].name, testJson[0]['test']['name']);
expect(tds[0].cpu, testJson[0]['test']['cpu']);
expect(tds[0].os, testJson[0]['test']['os']);
expect(tds[0].maxLogSeverity,
testJson[0]['test']['log_settings']['max_severity']);
expect(tds[0].testType, TestType.component);
});
test('for device tests with no max_severity', () {
TestsManifestReader tr = TestsManifestReader();
List<dynamic> testJson = [
{
'environments': [],
'test': {
'cpu': 'arm64',
'path':
'/pkgfs/packages/run_test_component_test/0/test/run_test_component_test',
'name': '//src/sys/run_test_component/test:run_test_component_test',
'os': 'fuchsia',
'package_url':
'fuchsia-pkg://fuchsia.com/run_test_component_test#meta/run_test_component_test.cmx',
'log_settings': {},
}
},
];
List<TestDefinition> tds = tr.parseManifest(
testJson: testJson,
buildDir: FakeFxEnv.shared.outputDir,
fxLocation: FakeFxEnv.shared.fx,
);
expect(tds, hasLength(1));
expect(tds[0].packageUrl.toString(), testJson[0]['test']['package_url']);
expect(tds[0].runtimeDeps, '');
expect(tds[0].path, testJson[0]['test']['path']);
expect(tds[0].name, testJson[0]['test']['name']);
expect(tds[0].cpu, testJson[0]['test']['cpu']);
expect(tds[0].os, testJson[0]['test']['os']);
expect(tds[0].maxLogSeverity, null);
expect(tds[0].testType, TestType.component);
});
test('for device tests with no log_settings', () {
TestsManifestReader tr = TestsManifestReader();
List<dynamic> testJson = [
{
'environments': [],
'test': {
'cpu': 'arm64',
'path':
'/pkgfs/packages/run_test_component_test/0/test/run_test_component_test',
'name': '//src/sys/run_test_component/test:run_test_component_test',
'os': 'fuchsia',
'package_url':
'fuchsia-pkg://fuchsia.com/run_test_component_test#meta/run_test_component_test.cmx',
}
},
];
List<TestDefinition> tds = tr.parseManifest(
testJson: testJson,
buildDir: FakeFxEnv.shared.outputDir,
fxLocation: FakeFxEnv.shared.fx,
);
expect(tds, hasLength(1));
expect(tds[0].packageUrl.toString(), testJson[0]['test']['package_url']);
expect(tds[0].runtimeDeps, '');
expect(tds[0].path, testJson[0]['test']['path']);
expect(tds[0].name, testJson[0]['test']['name']);
expect(tds[0].cpu, testJson[0]['test']['cpu']);
expect(tds[0].os, testJson[0]['test']['os']);
expect(tds[0].maxLogSeverity, null);
expect(tds[0].testType, TestType.component);
});
test('for unsupported tests', () {
TestsManifestReader tr = TestsManifestReader();
List<dynamic> testJson = [
{
'environments': [],
'test': {
'cpu': 'arm64',
'name': '//src/sys/run_test_component/test:run_test_component_test',
'os': 'fuchsia',
}
},
];
List<TestDefinition> tds = tr.parseManifest(
testJson: testJson,
buildDir: FakeFxEnv.shared.outputDir,
fxLocation: FakeFxEnv.shared.fx,
);
expect(tds, hasLength(1));
expect(tds[0].path, '');
expect(tds[0].testType, TestType.unsupported);
});
test('for unsupported device tests', () {
TestsManifestReader tr = TestsManifestReader();
List<dynamic> testJson = [
{
'environments': [],
'test': {
'cpu': 'arm64',
'name': 'some_name',
'path': '//asdf',
'os': 'fuchsia',
}
},
];
List<TestDefinition> tds = tr.parseManifest(
testJson: testJson,
buildDir: FakeFxEnv.shared.outputDir,
fxLocation: FakeFxEnv.shared.fx,
);
expect(tds, hasLength(1));
expect(tds[0].testType, TestType.unsupportedDeviceTest);
});
});
group('tests are aggregated correctly', () {
TestRunner buildTestRunner(TestsConfig testsConfig) => TestRunner();
void _ignoreEvents(TestEvent _) {}
TestsManifestReader tr = TestsManifestReader();
List<TestDefinition> testDefinitions = [
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
os: 'fuchsia',
packageUrl: PackageUrl.fromString(
'fuchsia-pkg://fuchsia.com/a_fancy_package#meta/test_component_1.cmx'),
name: 'device_test_v1',
),
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
os: 'fuchsia',
packageUrl: PackageUrl.fromString(
'fuchsia-pkg://fuchsia.com/another_package#meta/test_component_2.cm'),
name: 'device_test_v2',
),
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
os: 'linux',
path: 'host_x64/path',
// In practice, host tests have identical paths and names, but we
// differentiate them here to verify both are matchable.
name: 'host_x64/name',
),
];
// Helper function to parse lots of data for tests
ParsedManifest parseFromArgs({
List<String> args = const [],
List<TestDefinition>? testDefs,
}) {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: args,
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
return tr.aggregateTests(
eventEmitter: _ignoreEvents,
matchLength: testsConfig.flags.matchLength,
testBundleBuilder: cmd.testBundleBuilder,
testsConfig: testsConfig,
testDefinitions: testDefs ?? testDefinitions,
);
}
test('when --exact is not specified for a test name', () {
ParsedManifest parsedManifest = parseFromArgs(args: ['test_v2']);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.name, 'device_test_v2');
});
test('when the --exact flag is passed for a test name', () {
// --exact correctly catches exact name matches
ParsedManifest parsedManifest =
parseFromArgs(args: ['host_x64/name', '--exact']);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.name, 'host_x64/name');
// --exact kills partial name matches
parsedManifest = parseFromArgs(args: ['host_x64', '--exact']);
expect(parsedManifest.testBundles, hasLength(0));
});
test('when the --exact flag is passed for a test path', () {
// --exact correctly catches exact path matches
ParsedManifest parsedManifest =
parseFromArgs(args: ['host_x64/path', '--exact']);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.path, 'host_x64/path');
// --exact kills partial path matches
parsedManifest = parseFromArgs(args: ['host_x64', '--exact']);
expect(parsedManifest.testBundles, hasLength(0));
});
test('when the --exact flag is passed for a test packageUrl', () {
// --exact correctly catches exact packageUrl matches
ParsedManifest parsedManifest = parseFromArgs(args: [
'fuchsia-pkg://fuchsia.com/a_fancy_package#meta/test_component_1.cmx',
'--exact'
]);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.name, 'device_test_v1');
// --exact kills partial packageUrl matches
parsedManifest = parseFromArgs(
args: ['fuchsia-pkg://fuchsia.com/a_fancy_package', '--exact']);
expect(parsedManifest.testBundles, hasLength(0));
});
test('when the -h flag is passed', () {
ParsedManifest parsedManifest = parseFromArgs(args: ['host_x64/name']);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.name, 'host_x64/name');
});
test('when the -d flag is passed', () {
ParsedManifest parsedManifest = parseFromArgs(
args: [
'fuchsia-pkg://fuchsia.com/a_fancy_package#meta/test_component_1.cmx',
'--device'
],
);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.name, 'device_test_v1');
});
test('when no flags are passed', () {
ParsedManifest parsedManifest = parseFromArgs();
expect(parsedManifest.testBundles, hasLength(3));
});
test('when packageUrl.resourcePath is matched', () {
ParsedManifest parsedManifest =
parseFromArgs(args: ['test_component_1.cmx']);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.name, 'device_test_v1');
});
test('when packageUrl.rawResource is matched', () {
ParsedManifest parsedManifest = parseFromArgs(args: ['test_component_1']);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.name, 'device_test_v1');
});
test('when packageUrl.resourcePath are not components', () {
expect(
() => TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
os: 'fuchsia',
packageUrl: PackageUrl.fromString(
'fuchsia-pkg://fuchsia.com/fancy#meta/not-component'),
name: 'asdf-one',
).createExecutionHandle(),
throwsA(TypeMatcher<MalformedFuchsiaUrlException>()),
);
expect(
() => TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
os: 'fuchsia',
packageUrl: PackageUrl.fromString(
'fuchsia-pkg://fuchsia.com/fancy#bin/def-not-comp.so'),
name: 'asdf-two',
).createExecutionHandle(),
throwsA(TypeMatcher<MalformedFuchsiaUrlException>()),
);
});
test('when packageUrl.packageName is matched', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['a_fancy_package'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: testDefinitions,
testsConfig: testsConfig,
);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.name, 'device_test_v1');
});
test(
'when packageUrl.packageName is matched but discriminating '
'flag prevents', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['a_fancy_package', '--host'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: testDefinitions,
testsConfig: testsConfig,
);
expect(parsedManifest.testBundles, hasLength(0));
});
test('when . is passed from the build dir', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['.', '--host'],
fxEnv: FakeFxEnv(cwd: '/root/fuchsia/out/default'),
);
// Copy the list
var tds = testDefinitions.sublist(0)
..addAll([
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
name: 'awesome host test',
os: 'linux',
path: 'host_x64/test',
),
]);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: tds,
testsConfig: testsConfig,
);
expect(parsedManifest.testBundles, hasLength(2));
expect(
parsedManifest.testBundles[0].testDefinition.name,
'host_x64/name',
);
expect(
parsedManifest.testBundles[1].testDefinition.name,
'awesome host test',
);
});
test('when . is passed from the build dir and there\'s device tests', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['.'],
fxEnv: FakeFxEnv(cwd: '/root/fuchsia/out/default'),
);
// Copy the list
var tds = testDefinitions.sublist(0)
..addAll([
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
name: 'awesome device test',
os: 'fuchsia',
path: '/pkgfs/stuff',
),
]);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: tds,
testsConfig: testsConfig,
);
expect(parsedManifest.testBundles, hasLength(1));
});
test('when the ends of paths are supplied', () {
ParsedManifest parsedManifest = parseFromArgs(args: ['path']);
expect(parsedManifest.testBundles, hasLength(1));
expect(
parsedManifest.testBundles[0].testDefinition.path, 'host_x64/path');
});
test('when no supplied arguments match', () {
ParsedManifest parsedManifest = parseFromArgs(args: ['no-match']);
expect(parsedManifest.testBundles, hasLength(0));
expect(parsedManifest.unusedConfigs, hasLength(1));
});
test('when some supplied arguments match', () {
ParsedManifest parsedManifest =
parseFromArgs(args: ['a_fancy_package', 'no-match']);
expect(parsedManifest.testBundles, hasLength(1));
expect(parsedManifest.unusedConfigs, hasLength(1));
expect(parsedManifest.unusedConfigs?[0].testNameGroup,
equals([MatchableArgument.unrestricted('no-match')]));
});
test('when multiple arguments match the same test', () {
ParsedManifest parsedManifest =
parseFromArgs(args: ['a_fancy_package', 'test_component_1']);
expect(parsedManifest.testBundles, hasLength(1));
expect(parsedManifest.unusedConfigs, hasLength(0));
});
});
group('test hints are generated correctly', () {
var fxtestDef = TestDefinition.fromJson(
{
'environments': [],
'test': {
'cpu': 'x64',
'label': '//scripts/fxtest:fxtest_tests(//build/toolchain:host_x64)',
'name': 'fxtest_tests',
'os': 'linux',
'path': 'host_x64/fxtest_tests',
'runtime_deps': 'host_x64/gen/scripts/fxtest/fxtest_tests.deps.json'
}
},
buildDir: '/whatever',
);
var randomDef = TestDefinition.fromJson(
{
'environments': [],
'test': {
'cpu': 'x64',
'label': '//path/whatever:whatever_tests(//build/toolchain:host_x64)',
'name': 'whatever_tests',
'os': 'linux',
'path': 'host_x64/whatever_tests',
'runtime_deps':
'host_x64/gen/scripts/whatever/whatever_tests.deps.json'
}
},
buildDir: '/whatever',
);
test('with a typo inside a path', () {
var reader = TestsManifestReader();
var config = TestsConfig.fromRawArgs(
rawArgs: ['scripts/fxtets'],
fxEnv: FakeFxEnv.shared,
);
var parsedManifest = reader.aggregateTests(
comparer: FuzzyComparer(threshold: 3),
eventEmitter: (TestEvent event) => null,
matchLength: MatchLength.partial,
testBundleBuilder: (TestDefinition _testDef, [double? confidence]) =>
TestBundle.build(
directoryBuilder: (String path, {required bool recursive}) => null,
testDefinition: _testDef,
testRunnerBuilder: (testsConfig) => TestRunner(),
timeElapsedSink: (duration, cmd, output) => null,
workingDirectory: '/whatever',
testsConfig: config,
),
testDefinitions: [fxtestDef, randomDef],
testsConfig: config,
);
expect(parsedManifest.testBundles.length, 1);
expect(parsedManifest.testBundles[0].testDefinition.name, 'fxtest_tests');
});
test('with an fxtest typo', () {
var reader = TestsManifestReader();
var config = TestsConfig.fromRawArgs(
rawArgs: ['fxtest_tetss'],
fxEnv: FakeFxEnv.shared,
);
var parsedManifest = reader.aggregateTests(
comparer: FuzzyComparer(threshold: 3),
eventEmitter: (TestEvent event) => null,
matchLength: MatchLength.partial,
testBundleBuilder: (TestDefinition _testDef, [double? confidence]) =>
TestBundle.build(
directoryBuilder: (String path, {required bool recursive}) => null,
testDefinition: _testDef,
testRunnerBuilder: (testsConfig) => TestRunner(),
timeElapsedSink: (duration, cmd, output) => null,
workingDirectory: '/whatever',
testsConfig: config,
),
testDefinitions: [fxtestDef, randomDef],
testsConfig: config,
);
expect(parsedManifest.testBundles.length, 1);
});
});
group('tests are aggregated correctly with the -a flag', () {
TestRunner buildTestRunner(TestsConfig testsConfig) => TestRunner();
void _ignoreEvents(TestEvent _) {}
TestsManifestReader tr = TestsManifestReader();
var tds = <TestDefinition>[
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
os: 'fuchsia',
packageUrl: PackageUrl.fromString(
'fuchsia-pkg://fuchsia.com/pkg1#meta/test1.cmx'),
name: 'pkg 1 test 1',
),
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
os: 'fuchsia',
packageUrl:
PackageUrl.fromString('fuchsia-pkg://fuchsia.com/pkg1#test2.cmx'),
name: 'pkg 1 test 2',
),
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
os: 'fuchsia',
packageUrl:
PackageUrl.fromString('fuchsia-pkg://fuchsia.com/pkg2#test1.cmx'),
name: 'pkg 2 test 1',
path: '//gnsubtree',
),
TestDefinition(
buildDir: FakeFxEnv.shared.outputDir,
os: 'linux',
path: '/asdf',
name: '//host/test',
),
];
test('specifies a non-trailing component name with no package name', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['-c', 'test2', '//host/test'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: tds,
testsConfig: testsConfig,
);
var bundles = parsedManifest.testBundles;
expect(bundles, hasLength(2));
expect(bundles[0].testDefinition.name, 'pkg 1 test 2');
expect(bundles[1].testDefinition.name, '//host/test');
});
test('specifies an impossible combination of two valid filters', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['pkg1', '-a', '//host/test'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: tds,
testsConfig: testsConfig,
);
expect(parsedManifest.testBundles, hasLength(0));
});
test('is not present to remove other pkg matches', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['pkg1'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: tds,
testsConfig: testsConfig,
);
var bundles = parsedManifest.testBundles;
expect(bundles, hasLength(2));
expect(bundles[0].testDefinition.name, 'pkg 1 test 1');
expect(bundles[1].testDefinition.name, 'pkg 1 test 2');
});
test('combines filters from different fields', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['//gnsubtree', '-a', 'test1'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: tds,
testsConfig: testsConfig,
);
var bundles = parsedManifest.testBundles;
expect(bundles, hasLength(1));
expect(bundles[0].testDefinition.name, 'pkg 2 test 1');
});
test('is not present to remove other component matches', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
rawArgs: ['test1'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: tds,
testsConfig: testsConfig,
);
var bundles = parsedManifest.testBundles;
expect(bundles, hasLength(2));
expect(bundles[0].testDefinition.name, 'pkg 1 test 1');
expect(bundles[1].testDefinition.name, 'pkg 2 test 1');
});
test('when it removes other matches', () {
TestsConfig testsConfig = TestsConfig.fromRawArgs(
// `-a` flag will filter out `test1`
rawArgs: ['pkg1', '-a', 'test2', '//host/test'],
fxEnv: FakeFxEnv.shared,
);
var cmd = FuchsiaTestCommand.fromConfig(
testsConfig,
testRunnerBuilder: buildTestRunner,
);
ParsedManifest parsedManifest = tr.aggregateTests(
eventEmitter: _ignoreEvents,
testBundleBuilder: cmd.testBundleBuilder,
testDefinitions: tds,
testsConfig: testsConfig,
);
var bundles = parsedManifest.testBundles;
expect(bundles, hasLength(2));
expect(bundles[0].testDefinition.name, 'pkg 1 test 2');
expect(bundles[1].testDefinition.name, '//host/test');
});
});
group('command parameters are used', () {
test('for e2e tests', () {
var testData = <String, dynamic>{
'environments': [
{
'dimensions': {'device_type': 'asdf'},
}
],
'test': {
'command': [
'--special',
'--flags',
],
'cpu': 'x64',
'label': '//src/tests/pkg-name:test-name(//build/toolchain)',
'name': '//src/tests/pkg-name:test-name',
'os': 'linux',
'path': 'host_x64/test-name',
}
};
List<TestDefinition> testDefinitions =
TestsManifestReader().parseManifest(
testJson: [testData],
buildDir: '/whatever',
fxLocation: '/whatever/fx',
);
expect(testDefinitions[0].testType, TestType.e2e);
var commandTokens =
testDefinitions[0].createExecutionHandle().getInvocationTokens([]);
var fullCommand = commandTokens.fullCommandDisplay([]);
expect(fullCommand, contains('--special'));
expect(fullCommand, contains('--flags'));
});
});
group('TestEnvironment objects are parsed correctly', () {
// Pass this into `buildTest` when you want an empty case. This simplifies
// null-checking in the test.
const emptyEnvs = <Map<String, dynamic>>[];
const testJson = <String, dynamic>{
'environments': emptyEnvs,
'test': {
'cpu': 'x64',
'label': '//src/tests/pkg-name:test-name(//build/toolchain)',
'name': '//src/tests/pkg-name:test-name',
'os': 'linux',
'path': 'host_x64/test-name',
}
};
TestDefinition buildTest(List<Map<String, dynamic>> environments) =>
TestDefinition.fromJson(
Map<String, dynamic>.from(testJson)
..update('environments', (current) => environments),
buildDir: 'whatever',
);
test('when the values are empty', () {
final testDef = buildTest(emptyEnvs);
expect(testDef.testEnvironments, hasLength(0));
expect(testDef.isE2E, false);
});
test('when the values re-specify the host', () {
final testDef = buildTest(<Map<String, dynamic>>[
{
'dimensions': {'os': 'linux'}
}
]);
expect(testDef.testEnvironments, hasLength(1));
expect(testDef.testEnvironments.first.isDefined, true);
expect(testDef.testEnvironments.first.os, 'linux');
expect(testDef.testEnvironments.first.deviceDimension, null);
expect(testDef.isE2E, false);
});
test('when the values re-specify the host with capitalization', () {
final testDef = buildTest(<Map<String, dynamic>>[
{
'dimensions': {'os': 'Linux'}
}
]);
expect(testDef.testEnvironments, hasLength(1));
expect(testDef.testEnvironments.first.isDefined, true);
expect(testDef.testEnvironments.first.os, 'Linux');
expect(testDef.testEnvironments.first.deviceDimension, null);
expect(testDef.isE2E, false);
});
test('when the values specify a device', () {
final testDef = buildTest(<Map<String, dynamic>>[
{
'dimensions': {'device_type': 'asdf'}
}
]);
expect(testDef.testEnvironments, hasLength(1));
expect(testDef.testEnvironments.first.isDefined, true);
expect(testDef.testEnvironments.first.os, null);
expect(testDef.testEnvironments.first.deviceDimension, 'asdf');
expect(testDef.isE2E, true);
});
test('when the values specify a non-host os', () {
final testDef = buildTest(<Map<String, dynamic>>[
{
'dimensions': {'os': 'fuchsia'}
}
]);
expect(testDef.testEnvironments, hasLength(1));
expect(testDef.testEnvironments.first.isDefined, true);
expect(testDef.testEnvironments.first.os, 'fuchsia');
expect(testDef.testEnvironments.first.deviceDimension, null);
expect(testDef.isE2E, true);
});
test('when the values specify a non-host os with capitalization', () {
final testDef = buildTest(<Map<String, dynamic>>[
{
'dimensions': {'os': 'Fuchsia'}
}
]);
expect(testDef.testEnvironments, hasLength(1));
expect(testDef.testEnvironments.first.isDefined, true);
expect(testDef.testEnvironments.first.os, 'Fuchsia');
expect(testDef.testEnvironments.first.deviceDimension, null);
expect(testDef.isE2E, true);
});
});
}