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