blob: b9b3af1db55285757c23c76fff803332ffd46968 [file] [log] [blame]
// 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());
});
}