// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:file/file.dart'; import 'package:flutter_tools/src/base/io.dart'; import '../src/common.dart'; import 'test_utils.dart'; void main() { late Directory tempDir; setUp(() async { tempDir = createResolvedTempDirectorySync('gradle_daemon_test.'); }); tearDown(() async { tryToDelete(tempDir); }); testWithoutContext( 'gradle task succeeds when adding plugins with gradle daemon enabled', () async { final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter'); final Directory appDir = tempDir.childDirectory('testapp'); final Directory androidDir = appDir.childDirectory('android'); // Create dummy plugins processManager.runSync(<String>[ flutterBin, ...getLocalEngineArguments(), 'create', '--template=plugin', '--platforms=android', 'test_plugin_one', ], workingDirectory: tempDir.path); processManager.runSync(<String>[ flutterBin, ...getLocalEngineArguments(), 'create', '--template=plugin', '--platforms=android', 'test_plugin_two', ], workingDirectory: tempDir.path); // Create a new flutter project. ProcessResult result = await processManager.run(<String>[ flutterBin, 'create', appDir.path, '--project-name=testapp', ], workingDirectory: tempDir.path); expect(result, const ProcessResultMatcher()); // Enable gradle daemon for this project final File gradleProperties = androidDir.childFile('gradle.properties'); gradleProperties.writeAsStringSync(r''' org.gradle.daemon=true ''', mode: FileMode.append); // TODO(gustl22): Override with in 'gradle.properties' has no effect, set GRADLE_OPTS instead, // see https://github.com/gradle/gradle/issues/19501 final Map<String, String> envVars = <String, String>{ 'GRADLE_OPTS': '-Dorg.gradle.daemon=true' }; // Stop gradle daemon result = await processManager.run(<String>[ androidDir.childFile('gradlew').path, '--stop', ], workingDirectory: androidDir.path); expect(result, const ProcessResultMatcher()); result = await processManager.run(<String>[ flutterBin, 'pub', 'add', 'test_plugin_one', '--path', '../test_plugin_one', ], workingDirectory: appDir.path, environment: envVars); expect(result, const ProcessResultMatcher()); // Build with gradle daemon result = await processManager.run(<String>[ flutterBin, 'build', 'apk', '--debug', ], workingDirectory: appDir.path, environment: envVars); expect(result, const ProcessResultMatcher()); // Add second plugin result = await processManager.run(<String>[ flutterBin, 'pub', 'add', 'test_plugin_two', '--path', '../test_plugin_two', ], workingDirectory: appDir.path, environment: envVars); expect(result, const ProcessResultMatcher()); // Build again with cached plugin through daemon result = await processManager.run(<String>[ flutterBin, 'build', 'apk', '--debug', ], workingDirectory: appDir.path, environment: envVars); expect(result, const ProcessResultMatcher()); }); }