Unverified Commit b02cb6e4 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[flutter_tools] make local engine integration testing easier (#65802)

parent 199a7c19
......@@ -22,7 +22,7 @@ $ ../../bin/flutter --version
To run Flutter Tools from source, in this directory run:
```shell
$ ../../bin/cache/dart-sdk/bin/dart bin/flutter_tools.dart
$ ../../bin/dart bin/flutter_tools.dart
```
followed by command-line arguments, as usual.
......@@ -56,24 +56,38 @@ that add new code should aim to increase coverage. In particular, the coverage
of the diff should be close to the average coverage, and should ideally be
better.
#### Using local engine builds in integration tests
The integration tests can be configured to use a specific local engine
variant by setting the `FLUTTER_LOCAL_ENGINE` environment variable to the
name of the local engine (e.g. "android_debug_unopt"). If the local engine build
requires a source path, this can be provided by setting the `FLUTTER_LOCAL_ENGINE_SRC_PATH`
environment variable. This second variable is not necessary if the `flutter` and
`engine` checkouts are in adjacent directories.
```shell
export FLUTTER_LOCAL_ENGINE=android_debug_unopt
../../bin/dart test test/integration.shard/some_test_case
```
### Running the tests
To run the tests in the `test/` directory, first ensure that there are no
connected devices. Then, in this directory run:
```shell
$ ../../bin/cache/dart-sdk/bin/pub run test
$ ../../bin/dart pub run test
```
The tests in `test/integration.shard` are slower to run than the tests in
`test/general.shard`. To run only the tests in `test/general.shard`, in this
directory run:
```shell
$ ../../bin/cache/dart-sdk/bin/pub run test test/general.shard
$ ../../bin/dart pub run test test/general.shard
```
To run the tests in a specific file, run:
```shell
$ ../../bin/cache/dart-sdk/bin/pub run test test/general.shard/utils_test.dart
$ ../../bin/dart pub run test test/general.shard/utils_test.dart
```
### Forcing snapshot regeneration
......
......@@ -18,6 +18,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'build',
'apk',
'--analyze-size',
......@@ -42,6 +43,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'build',
'ios',
'--analyze-size',
......@@ -65,6 +67,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'build',
'apk',
'--analyze-size',
......
......@@ -5,23 +5,23 @@
import 'package:file_testing/file_testing.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:process/process.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import '../src/common.dart';
import 'test_utils.dart';
void main() {
test('flutter build ios --config only updates generated xcconfig file without performing build', () async {
final String woringDirectory = globals.fs.path.join(getFlutterRoot(), 'examples', 'hello_world');
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
final String woringDirectory = fileSystem.path.join(getFlutterRoot(), 'examples', 'hello_world');
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
await const LocalProcessManager().run(<String>[
await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'clean',
], workingDirectory: woringDirectory);
final ProcessResult result = await const LocalProcessManager().run(<String>[
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'build',
'ios',
'--config-only',
......@@ -36,20 +36,20 @@ void main() {
expect(result.exitCode, 0);
final File generatedConfig = globals.fs.file(
globals.fs.path.join(woringDirectory, 'ios', 'Flutter', 'Generated.xcconfig'));
final File generatedConfig = fileSystem.file(
fileSystem.path.join(woringDirectory, 'ios', 'Flutter', 'Generated.xcconfig'));
// Config is updated if command succeeded.
expect(generatedConfig, exists);
expect(generatedConfig.readAsStringSync(), allOf(
contains('DART_OBFUSCATION=true'),
contains('FLUTTER_FRAMEWORK_DIR=${globals.fs.path.absolute(getFlutterRoot(), 'bin', 'cache', 'artifacts', 'engine')}'),
contains('FLUTTER_FRAMEWORK_DIR=${fileSystem.path.absolute(getFlutterRoot(), 'bin', 'cache', 'artifacts', 'engine')}'),
));
// file that only exists if app was fully built.
final File frameworkPlist = globals.fs.file(
globals.fs.path.join(woringDirectory, 'build', 'ios', 'iphoneos', 'Runner.app', 'AppFrameworkInfo.plist'));
final File frameworkPlist = fileSystem.file(
fileSystem.path.join(woringDirectory, 'build', 'ios', 'iphoneos', 'Runner.app', 'AppFrameworkInfo.plist'));
expect(frameworkPlist, isNot(exists));
},skip: !const LocalPlatform().isMacOS);
}, skip: !platform.isMacOS);
}
......@@ -16,6 +16,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'-h',
'-v',
]);
......@@ -36,6 +37,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'doctor',
'-v',
]);
......@@ -48,6 +50,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'doctor',
'-vv',
]);
......@@ -60,6 +63,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'config',
]);
......@@ -89,6 +93,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'run',
'--show-test-device', // ensure command can fail to run and hit injection of correct logger.
'--machine',
......@@ -105,6 +110,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'attach',
'--machine',
'-v',
......@@ -117,6 +123,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'build',
'-h',
'-v',
......@@ -133,6 +140,7 @@ void main() {
final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
final ProcessResult result = await processManager.run(<String>[
flutterBin,
...getLocalEngineArguments(),
'--version',
'--machine',
]);
......
......@@ -27,7 +27,7 @@ void main() {
const ProcessManager processManager = LocalProcessManager();
final Process process = await processManager.start(
<String>[flutterBin, '--show-test-device', 'daemon'],
<String>[flutterBin, ...getLocalEngineArguments(), '--show-test-device', 'daemon'],
workingDirectory: tempDir.path,
);
......
......@@ -452,6 +452,7 @@ class FlutterRunTestDriver extends FlutterTestDriver {
'--disable-service-auth-codes',
if (machine) '--machine',
if (!spawnDdsInstance) '--disable-dds',
...getLocalEngineArguments(),
'-d',
if (chrome)
...<String>[
......@@ -482,6 +483,7 @@ class FlutterRunTestDriver extends FlutterTestDriver {
await _setupProcess(
<String>[
'attach',
...getLocalEngineArguments(),
'--machine',
if (!spawnDdsInstance)
'--disable-dds',
......@@ -705,6 +707,7 @@ class FlutterTestTestDriver extends FlutterTestDriver {
}) async {
await _setupProcess(<String>[
'test',
...getLocalEngineArguments(),
'--disable-service-auth-codes',
'--machine',
if (coverage)
......
......@@ -63,3 +63,15 @@ Future<void> getPackages(String folder) async {
throw Exception('flutter pub get failed: ${result.stderr}\n${result.stdout}');
}
}
const String kLocalEngineEnvironment = 'FLUTTER_LOCAL_ENGINE';
const String kLocalEngineLocation = 'FLUTTER_LOCAL_ENGINE_SRC_PATH';
List<String> getLocalEngineArguments() {
return <String>[
if (platform.environment.containsKey(kLocalEngineEnvironment))
'--local-engine=${platform.environment[kLocalEngineEnvironment]}',
if (platform.environment.containsKey(kLocalEngineLocation))
'--local-engine-src-path=${platform.environment[kLocalEngineLocation]}',
];
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment