Refactor ArgParser.usage tests for BuildPlan to reduce duplication. (flutter/engine#56254)

Part of https://github.com/flutter/flutter/issues/157870.

I figured I'd tackle a theme of tests at a time - easier for me to do in little spurts between other tasks.
This commit is contained in:
Matan Lurey 2024-10-31 09:44:06 -07:00 committed by GitHub
parent 38f7a81e37
commit f89c4fd346

View File

@ -891,382 +891,221 @@ void main() {
); );
}); });
test('show builds in help message as long as not a [ci/...] build', () { // These tests should strictly check the usage (--help) output.
final testEnv = TestEnvironment.withTestEngine(); group('shows instructions based on verbosity', () {
addTearDown(testEnv.cleanup); /// Creates a configured [ArgParser] based on then environemnt and builds.
///
/// By default a non-verbose, non-RBE, Linux x64 configured [BuildPlan]
/// is created and used to configure the available options and instructions
/// for the returned [ArgParser].
///
/// - To use a different [TestEnvironment], provide [environment].
/// - To use a different set of builds, provide [builds].
ArgParser createArgParser({
TestEnvironment? environment,
void Function(TestBuilderConfig)? builds,
}) {
final testEnv = environment ?? TestEnvironment.withTestEngine();
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig(); final testConfig = TestBuilderConfig();
testConfig.addBuild( if (builds != null) {
name: 'ci/host_debug', builds(testConfig);
dimension: TestDroneDimension.linux, } else {
); testConfig.addBuild(
testConfig.addBuild( name: 'linux/host_debug',
name: 'linux/host_debug', dimension: TestDroneDimension.linux,
dimension: TestDroneDimension.linux, );
); }
final parser = ArgParser(); final parser = ArgParser();
final _ = BuildPlan.configureArgParser( final _ = BuildPlan.configureArgParser(
parser, parser,
testEnv.environment, testEnv.environment,
configs: { configs: {
'linux_test_config': testConfig.buildConfig( 'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json', path: 'ci/builders/linux_test_config.json',
),
},
help: true,
);
return parser;
}
test('show builds in help message as long as not a [ci/...] build', () {
final parser = createArgParser(
builds: (testConfig) {
testConfig.addBuild(
name: 'ci/host_debug',
dimension: TestDroneDimension.linux,
);
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
},
);
expect(parser.usage, contains('host_debug'));
expect(parser.usage, isNot(contains('ci/host_debug')));
});
test('shows [ci/...] builds if verbose is true', () {
final parser = createArgParser(
environment: TestEnvironment.withTestEngine(
verbose: true,
), ),
}, builds: (testConfig) {
help: true, testConfig.addBuild(
); name: 'ci/host_debug',
dimension: TestDroneDimension.linux,
);
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
},
);
expect(parser.usage, contains('host_debug')); expect(parser.usage, contains('host_debug'));
expect(parser.usage, isNot(contains('ci/host_debug'))); expect(parser.usage, contains('ci/host_debug'));
}); });
test('shows [ci/...] builds if verbose is true', () { test('hides LTO instructions normally', () {
final testEnv = TestEnvironment.withTestEngine( final parser = createArgParser();
verbose: true,
);
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig(); expect(
testConfig.addBuild( parser.usage,
name: 'ci/host_debug', isNot(contains('Whether LTO should be enabled for a build')),
dimension: TestDroneDimension.linux, );
); });
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser(); test('shows LTO instructions if verbose', () {
final _ = BuildPlan.configureArgParser( final parser = createArgParser(
parser, environment: TestEnvironment.withTestEngine(
testEnv.environment, verbose: true,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
), ),
}, );
help: true,
);
expect(parser.usage, contains('host_debug')); expect(
expect(parser.usage, contains('ci/host_debug')); parser.usage,
}); contains('Whether LTO should be enabled for a build'),
);
});
test('hides LTO instructions normally', () { test('shows RBE instructions if not configured', () {
final testEnv = TestEnvironment.withTestEngine(); final parser = createArgParser(
addTearDown(testEnv.cleanup); environment: TestEnvironment.withTestEngine(
// This is the default, but make it explicit for the test.
final testConfig = TestBuilderConfig(); // ignore: avoid_redundant_argument_values
testConfig.addBuild( withRbe: false,
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser();
final _ = BuildPlan.configureArgParser(
parser,
testEnv.environment,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
), ),
}, );
help: true,
);
expect( expect(
parser.usage, parser.usage,
isNot(contains('Whether LTO should be enabled for a build')), stringContainsInOrder([
); 'Enable pre-configured remote build execution',
}); 'https://flutter.dev/to/engine-rbe',
]),
);
});
test('shows LTO instructions if verbose', () { test('shows RBE instructions if verbose', () {
final testEnv = TestEnvironment.withTestEngine( final parser = createArgParser(
verbose: true, environment: TestEnvironment.withTestEngine(
); verbose: true,
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig();
testConfig.addBuild(
name: 'ci/host_debug',
dimension: TestDroneDimension.linux,
);
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser();
final _ = BuildPlan.configureArgParser(
parser,
testEnv.environment,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
), ),
}, );
help: true,
);
expect( expect(
parser.usage, parser.usage,
contains('Whether LTO should be enabled for a build'), stringContainsInOrder([
); 'Enable pre-configured remote build execution',
}); 'https://flutter.dev/to/engine-rbe',
]),
);
});
test('shows RBE instructions if not configured', () { test('hides RBE instructions if enabled', () {
final testEnv = TestEnvironment.withTestEngine( final parser = createArgParser(
// This is the default, but make it explicit for the test. environment: TestEnvironment.withTestEngine(
// ignore: avoid_redundant_argument_values withRbe: true,
withRbe: false,
);
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig();
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser();
final _ = BuildPlan.configureArgParser(
parser,
testEnv.environment,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
), ),
}, );
help: true,
);
expect( expect(
parser.usage, parser.usage,
contains('Enable pre-configured remote build execution'), contains('Enable pre-configured remote build execution'),
); );
expect( expect(
parser.usage, parser.usage,
contains('https://flutter.dev/to/engine-rbe'), isNot(contains('https://flutter.dev/to/engine-rbe')),
); );
}); });
test('shows RBE instructions if verbose', () { test('hides --build-strategy if RBE not enabled', () {
final testEnv = TestEnvironment.withTestEngine( final parser = createArgParser(
withRbe: true, environment: TestEnvironment.withTestEngine(
verbose: true, // This is the default, but make it explicit for the test.
); // ignore: avoid_redundant_argument_values
addTearDown(testEnv.cleanup); withRbe: false,
final testConfig = TestBuilderConfig();
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser();
final _ = BuildPlan.configureArgParser(
parser,
testEnv.environment,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
), ),
}, );
help: true,
);
expect( expect(
parser.usage, parser.usage,
contains('Enable pre-configured remote build execution'), isNot(contains('How to prefer remote or local builds')),
); );
expect( });
parser.usage,
contains('https://flutter.dev/to/engine-rbe'),
);
});
test('hides RBE intsructions if enabled', () { test('shows --build-strategy if RBE enabled', () {
final testEnv = TestEnvironment.withTestEngine( final parser = createArgParser(
withRbe: true, environment: TestEnvironment.withTestEngine(
); withRbe: true,
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig();
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser();
final _ = BuildPlan.configureArgParser(
parser,
testEnv.environment,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
), ),
}, );
help: true,
);
expect( expect(
parser.usage, parser.usage,
contains('Enable pre-configured remote build execution'), contains('How to prefer remote or local builds'),
); );
expect( });
parser.usage,
isNot(contains('https://flutter.dev/to/engine-rbe')),
);
});
test('hides --build-strategy if RBE not enabled', () { test('shows --build-strategy if verbose', () {
final testEnv = TestEnvironment.withTestEngine( final parser = createArgParser(
// This is the default, but make it explicit for the test. environment: TestEnvironment.withTestEngine(
// ignore: avoid_redundant_argument_values verbose: true,
withRbe: false,
);
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig();
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser();
final _ = BuildPlan.configureArgParser(
parser,
testEnv.environment,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
), ),
}, );
help: true,
);
expect( expect(
parser.usage, parser.usage,
isNot(contains('How to prefer remote or local builds')), contains('How to prefer remote or local builds'),
); );
}); });
test('shows --build-strategy if RBE enabled', () { test('hides --gn-args if not verbose', () {
final testEnv = TestEnvironment.withTestEngine( final parser = createArgParser();
withRbe: true,
);
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig(); expect(
testConfig.addBuild( parser.usage,
name: 'linux/host_debug', isNot(contains('Additional arguments to provide to "gn"')),
dimension: TestDroneDimension.linux, );
); });
final parser = ArgParser(); test('shows --gn-args if verbose', () {
final _ = BuildPlan.configureArgParser( final parser = createArgParser(
parser, environment: TestEnvironment.withTestEngine(
testEnv.environment, verbose: true,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
), ),
}, );
help: true,
);
expect( expect(
parser.usage, parser.usage,
contains('How to prefer remote or local builds'), contains('Additional arguments to provide to "gn"'),
); );
}); });
test('shows --build-strategy if verbose', () {
final testEnv = TestEnvironment.withTestEngine(
verbose: true,
);
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig();
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser();
final _ = BuildPlan.configureArgParser(
parser,
testEnv.environment,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
),
},
help: true,
);
expect(
parser.usage,
contains('How to prefer remote or local builds'),
);
});
test('shows --gn-args if verbose', () {
final testEnv = TestEnvironment.withTestEngine(
verbose: true,
);
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig();
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser();
final _ = BuildPlan.configureArgParser(
parser,
testEnv.environment,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
),
},
help: true,
);
expect(
parser.usage,
contains('Additional arguments to provide to "gn"'),
);
});
test('hides --gn-args if not verbose', () {
final testEnv = TestEnvironment.withTestEngine();
addTearDown(testEnv.cleanup);
final testConfig = TestBuilderConfig();
testConfig.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
final parser = ArgParser();
final _ = BuildPlan.configureArgParser(
parser,
testEnv.environment,
configs: {
'linux_test_config': testConfig.buildConfig(
path: 'ci/builders/linux_test_config.json',
),
},
help: true,
);
expect(
parser.usage,
isNot(contains('Additional arguments to provide to "gn"')),
);
}); });
} }