Unverified Commit 57911641 authored by Mikkel Nygaard Ravn's avatar Mikkel Nygaard Ravn Committed by GitHub

Fix gradle plugin test (#18824)

parent 5e54b9e0
...@@ -12,19 +12,30 @@ import 'package:flutter_devicelab/framework/utils.dart'; ...@@ -12,19 +12,30 @@ import 'package:flutter_devicelab/framework/utils.dart';
String javaHome; String javaHome;
String errorMessage; String errorMessage;
/// Runs the given [testFunction] in a clean temporary directory. /// Runs the given [testFunction] on a freshly generated Flutter project.
Future<void> runTest(Future<void> testFunction(FlutterProject project, FlutterPluginProject pluginProject)) async { Future<void> runProjectTest(Future<void> testFunction(FlutterProject project)) async {
final Directory tmp = await Directory.systemTemp.createTemp('gradle'); final Directory tmp = await Directory.systemTemp.createTemp('gradle');
final FlutterProject project = await FlutterProject.create(tmp, 'hello'); final FlutterProject project = await FlutterProject.create(tmp, 'hello');
final FlutterPluginProject pluginProject = await FlutterPluginProject.create(tmp, 'aaa');
try { try {
await testFunction(project, pluginProject); await testFunction(project);
} finally { } finally {
project.parent.deleteSync(recursive: true); project.parent.deleteSync(recursive: true);
} }
} }
/// Runs the given [testFunction] on a freshly generated Flutter plugin project.
Future<void> runPluginProjectTest(Future<void> testFunction(FlutterPluginProject pluginProject)) async {
final Directory tmp = await Directory.systemTemp.createTemp('gradle');
final FlutterPluginProject pluginProject = await FlutterPluginProject.create(tmp, 'aaa');
try {
await testFunction(pluginProject);
} finally {
pluginProject.parent.deleteSync(recursive: true);
}
}
void main() async { void main() async {
await task(() async { await task(() async {
section('Find Java'); section('Find Java');
...@@ -35,7 +46,7 @@ void main() async { ...@@ -35,7 +46,7 @@ void main() async {
print('\nUsing JAVA_HOME=$javaHome'); print('\nUsing JAVA_HOME=$javaHome');
try { try {
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runProjectTest((FlutterProject project) async {
section('gradlew assembleDebug'); section('gradlew assembleDebug');
await project.runGradleTask('assembleDebug'); await project.runGradleTask('assembleDebug');
errorMessage = _validateSnapshotDependency(project, 'build/app.dill'); errorMessage = _validateSnapshotDependency(project, 'build/app.dill');
...@@ -44,79 +55,79 @@ void main() async { ...@@ -44,79 +55,79 @@ void main() async {
} }
}); });
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runProjectTest((FlutterProject project) async {
section('gradlew assembleDebug no-preview-dart-2'); section('gradlew assembleDebug no-preview-dart-2');
await project.runGradleTask('assembleDebug', await project.runGradleTask('assembleDebug',
options: <String>['-Ppreview-dart-2=false']); options: <String>['-Ppreview-dart-2=false']);
}); });
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runProjectTest((FlutterProject project) async {
section('gradlew assembleProfile'); section('gradlew assembleProfile');
await project.runGradleTask('assembleProfile'); await project.runGradleTask('assembleProfile');
}); });
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runProjectTest((FlutterProject project) async {
section('gradlew assembleRelease'); section('gradlew assembleRelease');
await project.runGradleTask('assembleRelease'); await project.runGradleTask('assembleRelease');
}); });
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runProjectTest((FlutterProject project) async {
section('gradlew assembleLocal (custom debug build)'); section('gradlew assembleLocal (custom debug build)');
await project.addCustomBuildType('local', initWith: 'debug'); await project.addCustomBuildType('local', initWith: 'debug');
await project.runGradleTask('assembleLocal'); await project.runGradleTask('assembleLocal');
}); });
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runProjectTest((FlutterProject project) async {
section('gradlew assembleBeta (custom release build)'); section('gradlew assembleBeta (custom release build)');
await project.addCustomBuildType('beta', initWith: 'release'); await project.addCustomBuildType('beta', initWith: 'release');
await project.runGradleTask('assembleBeta'); await project.runGradleTask('assembleBeta');
}); });
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runProjectTest((FlutterProject project) async {
section('gradlew assembleFreeDebug (product flavor)'); section('gradlew assembleFreeDebug (product flavor)');
await project.addProductFlavor('free'); await project.addProductFlavor('free');
await project.runGradleTask('assembleFreeDebug'); await project.runGradleTask('assembleFreeDebug');
await project.introduceError();
}); });
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runProjectTest((FlutterProject project) async {
section('gradlew on build script with error'); section('gradlew on build script with error');
await project.introduceError();
final ProcessResult result = final ProcessResult result =
await project.resultOfGradleTask('assembleRelease'); await project.resultOfGradleTask('assembleRelease');
if (result.exitCode == 0) if (result.exitCode == 0)
return _failure( throw _failure(
'Gradle did not exit with error as expected', result); 'Gradle did not exit with error as expected', result);
final String output = result.stdout + '\n' + result.stderr; final String output = result.stdout + '\n' + result.stderr;
if (output.contains('GradleException') || if (output.contains('GradleException') ||
output.contains('Failed to notify') || output.contains('Failed to notify') ||
output.contains('at org.gradle')) output.contains('at org.gradle'))
return _failure( throw _failure(
'Gradle output should not contain stacktrace', result); 'Gradle output should not contain stacktrace', result);
if (!output.contains('Build failed') || !output.contains('builTypes')) if (!output.contains('Build failed') || !output.contains('builTypes'))
return _failure( throw _failure(
'Gradle output should contain a readable error message', 'Gradle output should contain a readable error message',
result); result);
}); });
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runProjectTest((FlutterProject project) async {
section('flutter build apk on build script with error'); section('flutter build apk on build script with error');
await project.introduceError();
final ProcessResult result = await project.resultOfFlutterCommand('build', <String>['apk']); final ProcessResult result = await project.resultOfFlutterCommand('build', <String>['apk']);
if (result.exitCode == 0) if (result.exitCode == 0)
return _failure( throw _failure(
'flutter build apk should fail when Gradle does', result); 'flutter build apk should fail when Gradle does', result);
final String output = result.stdout + '\n' + result.stderr; final String output = result.stdout + '\n' + result.stderr;
if (!output.contains('Build failed') || !output.contains('builTypes')) if (!output.contains('Build failed') || !output.contains('builTypes'))
return _failure( throw _failure(
'flutter build apk output should contain a readable Gradle error message', 'flutter build apk output should contain a readable Gradle error message',
result); result);
if (_hasMultipleOccurrences(output, 'builTypes')) if (_hasMultipleOccurrences(output, 'builTypes'))
return _failure( throw _failure(
'flutter build apk should not invoke Gradle repeatedly on error', 'flutter build apk should not invoke Gradle repeatedly on error',
result); result);
}); });
await runTest((FlutterProject project, FlutterPluginProject pluginProject) async { await runPluginProjectTest((FlutterPluginProject pluginProject) async {
section('gradlew assembleDebug on plugin example'); section('gradlew assembleDebug on plugin example');
await pluginProject.runGradleTask('assembleDebug'); await pluginProject.runGradleTask('assembleDebug');
if (!pluginProject.hasDebugApk) if (!pluginProject.hasDebugApk)
......
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