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

[flutter_tools] remove globals and mocks from android gradle builder and test (#76416)

parent e204b896
...@@ -15,6 +15,7 @@ import '../base/common.dart'; ...@@ -15,6 +15,7 @@ import '../base/common.dart';
import '../base/file_system.dart'; import '../base/file_system.dart';
import '../base/io.dart'; import '../base/io.dart';
import '../base/logger.dart'; import '../base/logger.dart';
import '../base/platform.dart';
import '../base/process.dart'; import '../base/process.dart';
import '../base/terminal.dart'; import '../base/terminal.dart';
import '../base/utils.dart'; import '../base/utils.dart';
...@@ -22,7 +23,6 @@ import '../build_info.dart'; ...@@ -22,7 +23,6 @@ import '../build_info.dart';
import '../cache.dart'; import '../cache.dart';
import '../convert.dart'; import '../convert.dart';
import '../flutter_manifest.dart'; import '../flutter_manifest.dart';
import '../globals.dart' as globals hide logger, printStatus, printTrace, printError, processManager, processUtils, fs, artifacts, flutterUsage;
import '../project.dart'; import '../project.dart';
import '../reporting/reporting.dart'; import '../reporting/reporting.dart';
import 'android_builder.dart'; import 'android_builder.dart';
...@@ -165,10 +165,14 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -165,10 +165,14 @@ class AndroidGradleBuilder implements AndroidBuilder {
@required FileSystem fileSystem, @required FileSystem fileSystem,
@required Artifacts artifacts, @required Artifacts artifacts,
@required Usage usage, @required Usage usage,
@required GradleUtils gradleUtils,
@required Platform platform,
}) : _logger = logger, }) : _logger = logger,
_fileSystem = fileSystem, _fileSystem = fileSystem,
_artifacts = artifacts, _artifacts = artifacts,
_usage = usage, _usage = usage,
_gradleUtils = gradleUtils,
_fileSystemUtils = FileSystemUtils(fileSystem: fileSystem, platform: platform),
_processUtils = ProcessUtils(logger: logger, processManager: processManager); _processUtils = ProcessUtils(logger: logger, processManager: processManager);
final Logger _logger; final Logger _logger;
...@@ -176,6 +180,8 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -176,6 +180,8 @@ class AndroidGradleBuilder implements AndroidBuilder {
final FileSystem _fileSystem; final FileSystem _fileSystem;
final Artifacts _artifacts; final Artifacts _artifacts;
final Usage _usage; final Usage _usage;
final GradleUtils _gradleUtils;
final FileSystemUtils _fileSystemUtils;
/// Builds the AAR and POM files for the current Flutter module or plugin. /// Builds the AAR and POM files for the current Flutter module or plugin.
@override @override
...@@ -186,7 +192,6 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -186,7 +192,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
@required String outputDirectoryPath, @required String outputDirectoryPath,
@required String buildNumber, @required String buildNumber,
}) async { }) async {
try {
Directory outputDirectory = Directory outputDirectory =
_fileSystem.directory(outputDirectoryPath ?? project.android.buildDirectory); _fileSystem.directory(outputDirectoryPath ?? project.android.buildDirectory);
if (project.isModule) { if (project.isModule) {
...@@ -213,9 +218,6 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -213,9 +218,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
logger: _logger, logger: _logger,
fileSystem: _fileSystem, fileSystem: _fileSystem,
); );
} finally {
globals.androidSdk?.reinitialize();
}
} }
/// Builds the APK. /// Builds the APK.
...@@ -225,7 +227,6 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -225,7 +227,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
@required AndroidBuildInfo androidBuildInfo, @required AndroidBuildInfo androidBuildInfo,
@required String target, @required String target,
}) async { }) async {
try {
await buildGradleApp( await buildGradleApp(
project: project, project: project,
androidBuildInfo: androidBuildInfo, androidBuildInfo: androidBuildInfo,
...@@ -233,9 +234,6 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -233,9 +234,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
isBuildingBundle: false, isBuildingBundle: false,
localGradleErrors: gradleErrors, localGradleErrors: gradleErrors,
); );
} finally {
globals.androidSdk?.reinitialize();
}
} }
/// Builds the App Bundle. /// Builds the App Bundle.
...@@ -245,7 +243,6 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -245,7 +243,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
@required AndroidBuildInfo androidBuildInfo, @required AndroidBuildInfo androidBuildInfo,
@required String target, @required String target,
}) async { }) async {
try {
await buildGradleApp( await buildGradleApp(
project: project, project: project,
androidBuildInfo: androidBuildInfo, androidBuildInfo: androidBuildInfo,
...@@ -253,9 +250,6 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -253,9 +250,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
isBuildingBundle: true, isBuildingBundle: true,
localGradleErrors: gradleErrors, localGradleErrors: gradleErrors,
); );
} finally {
globals.androidSdk?.reinitialize();
}
} }
/// Builds an app. /// Builds an app.
...@@ -283,7 +277,6 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -283,7 +277,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
assert(target != null); assert(target != null);
assert(isBuildingBundle != null); assert(isBuildingBundle != null);
assert(localGradleErrors != null); assert(localGradleErrors != null);
assert(globals.androidSdk != null);
if (!project.android.isSupportedVersion) { if (!project.android.isSupportedVersion) {
_exitWithUnsupportedProjectMessage(_usage); _exitWithUnsupportedProjectMessage(_usage);
...@@ -327,7 +320,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -327,7 +320,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
); );
final List<String> command = <String>[ final List<String> command = <String>[
globals.gradleUtils.getExecutable(project), _gradleUtils.getExecutable(project),
]; ];
if (_logger.isVerbose) { if (_logger.isVerbose) {
command.add('-Pverbose=true'); command.add('-Pverbose=true');
...@@ -565,9 +558,9 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -565,9 +558,9 @@ class AndroidGradleBuilder implements AndroidBuilder {
precompilerTrace: precompilerTrace, precompilerTrace: precompilerTrace,
kind: kind, kind: kind,
); );
final File outputFile = globals.fsUtils.getUniqueFile( final File outputFile = _fileSystemUtils.getUniqueFile(
_fileSystem _fileSystem
.directory(globals.fsUtils.homeDirPath) .directory(_fileSystemUtils.homeDirPath)
.childDirectory('.flutter-devtools'), '$kind-code-size-analysis', 'json', .childDirectory('.flutter-devtools'), '$kind-code-size-analysis', 'json',
) )
..writeAsStringSync(jsonEncode(output)); ..writeAsStringSync(jsonEncode(output));
...@@ -605,7 +598,6 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -605,7 +598,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
assert(target != null); assert(target != null);
assert(androidBuildInfo != null); assert(androidBuildInfo != null);
assert(outputDirectory != null); assert(outputDirectory != null);
assert(globals.androidSdk != null);
final FlutterManifest manifest = project.manifest; final FlutterManifest manifest = project.manifest;
if (!manifest.isModule && !manifest.isPlugin) { if (!manifest.isModule && !manifest.isPlugin) {
...@@ -628,7 +620,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -628,7 +620,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
'aar_init_script.gradle', 'aar_init_script.gradle',
); );
final List<String> command = <String>[ final List<String> command = <String>[
globals.gradleUtils.getExecutable(project), _gradleUtils.getExecutable(project),
'-I=$initScript', '-I=$initScript',
'-Pflutter-root=$flutterRoot', '-Pflutter-root=$flutterRoot',
'-Poutput-dir=${outputDirectory.path}', '-Poutput-dir=${outputDirectory.path}',
......
...@@ -85,6 +85,8 @@ Future<T> runInContext<T>( ...@@ -85,6 +85,8 @@ Future<T> runInContext<T>(
fileSystem: globals.fs, fileSystem: globals.fs,
artifacts: globals.artifacts, artifacts: globals.artifacts,
usage: globals.flutterUsage, usage: globals.flutterUsage,
gradleUtils: globals.gradleUtils,
platform: globals.platform,
), ),
AndroidLicenseValidator: () => AndroidLicenseValidator( AndroidLicenseValidator: () => AndroidLicenseValidator(
operatingSystemUtils: globals.os, operatingSystemUtils: globals.os,
......
...@@ -235,27 +235,6 @@ void main() { ...@@ -235,27 +235,6 @@ void main() {
}); });
group('AndroidSdk', () { group('AndroidSdk', () {
testUsingContext('validateSdkWellFormed() not called, sdk reinitialized', () async {
final String projectPath = await createProject(tempDir,
arguments: <String>['--no-pub', '--template=module']);
await expectLater(
runBuildAarCommand(
projectPath,
arguments: <String>['--no-pub'],
),
throwsToolExit(),
);
verifyNever(mockAndroidSdk.validateSdkWellFormed());
verify(mockAndroidSdk.reinitialize()).called(1);
},
overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
FlutterProjectFactory: () => FakeFlutterProjectFactory(tempDir),
ProcessManager: () => mockProcessManager,
});
testUsingContext('throws throwsToolExit if AndroidSdk is null', () async { testUsingContext('throws throwsToolExit if AndroidSdk is null', () async {
final String projectPath = await createProject(tempDir, final String projectPath = await createProject(tempDir,
arguments: <String>['--no-pub', '--template=module']); arguments: <String>['--no-pub', '--template=module']);
......
...@@ -182,27 +182,6 @@ void main() { ...@@ -182,27 +182,6 @@ void main() {
}); });
group('AndroidSdk', () { group('AndroidSdk', () {
testUsingContext('validateSdkWellFormed() not called, sdk reinitialized', () async {
final String projectPath = await createProject(tempDir,
arguments: <String>['--no-pub', '--template=app']);
await expectLater(
runBuildApkCommand(
projectPath,
arguments: <String>['--no-pub'],
),
throwsToolExit(message: 'Gradle task assembleRelease failed with exit code 1'),
);
verifyNever(mockAndroidSdk.validateSdkWellFormed());
verify(mockAndroidSdk.reinitialize()).called(1);
},
overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
FlutterProjectFactory: () => FakeFlutterProjectFactory(tempDir),
ProcessManager: () => mockProcessManager,
});
testUsingContext('throws throwsToolExit if AndroidSdk is null', () async { testUsingContext('throws throwsToolExit if AndroidSdk is null', () async {
final String projectPath = await createProject(tempDir, final String projectPath = await createProject(tempDir,
arguments: <String>['--no-pub', '--template=app']); arguments: <String>['--no-pub', '--template=app']);
......
...@@ -162,27 +162,6 @@ void main() { ...@@ -162,27 +162,6 @@ void main() {
}); });
group('AndroidSdk', () { group('AndroidSdk', () {
testUsingContext('validateSdkWellFormed() not called, sdk reinitialized', () async {
final String projectPath = await createProject(tempDir,
arguments: <String>['--no-pub', '--template=app']);
await expectLater(
runBuildAppBundleCommand(
projectPath,
arguments: <String>['--no-pub'],
),
throwsToolExit(message: 'Gradle task bundleRelease failed with exit code 1'),
);
verifyNever(mockAndroidSdk.validateSdkWellFormed());
verify(mockAndroidSdk.reinitialize()).called(1);
},
overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
FlutterProjectFactory: () => FakeFlutterProjectFactory(tempDir),
ProcessManager: () => mockProcessManager,
});
testUsingContext('throws throwsToolExit if AndroidSdk is null', () async { testUsingContext('throws throwsToolExit if AndroidSdk is null', () async {
final String projectPath = await createProject(tempDir, final String projectPath = await createProject(tempDir,
arguments: <String>['--no-pub', '--template=app']); arguments: <String>['--no-pub', '--template=app']);
......
...@@ -7,12 +7,10 @@ ...@@ -7,12 +7,10 @@
import 'package:archive/archive.dart'; import 'package:archive/archive.dart';
import 'package:file/memory.dart'; import 'package:file/memory.dart';
import 'package:file_testing/file_testing.dart'; import 'package:file_testing/file_testing.dart';
import 'package:flutter_tools/src/android/android_sdk.dart';
import 'package:flutter_tools/src/android/android_studio.dart';
import 'package:flutter_tools/src/android/gradle.dart'; import 'package:flutter_tools/src/android/gradle.dart';
import 'package:flutter_tools/src/android/gradle_errors.dart'; import 'package:flutter_tools/src/android/gradle_errors.dart';
import 'package:flutter_tools/src/android/gradle_utils.dart';
import 'package:flutter_tools/src/artifacts.dart'; import 'package:flutter_tools/src/artifacts.dart';
import 'package:flutter_tools/src/base/context.dart';
import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/logger.dart';
...@@ -21,8 +19,7 @@ import 'package:flutter_tools/src/build_info.dart'; ...@@ -21,8 +19,7 @@ import 'package:flutter_tools/src/build_info.dart';
import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/project.dart';
import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:flutter_tools/src/reporting/reporting.dart';
import 'package:mockito/mockito.dart'; import 'package:test/fake.dart';
import 'package:process/process.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/context.dart'; import '../../src/context.dart';
...@@ -31,11 +28,7 @@ void main() { ...@@ -31,11 +28,7 @@ void main() {
group('gradle build', () { group('gradle build', () {
BufferLogger logger; BufferLogger logger;
TestUsage testUsage; TestUsage testUsage;
MockAndroidSdk mockAndroidSdk;
MockAndroidStudio mockAndroidStudio;
FakePlatform android;
FileSystem fileSystem; FileSystem fileSystem;
Cache cache;
FakeProcessManager processManager; FakeProcessManager processManager;
setUp(() { setUp(() {
...@@ -43,36 +36,7 @@ void main() { ...@@ -43,36 +36,7 @@ void main() {
logger = BufferLogger.test(); logger = BufferLogger.test();
testUsage = TestUsage(); testUsage = TestUsage();
fileSystem = MemoryFileSystem.test(); fileSystem = MemoryFileSystem.test();
mockAndroidSdk = MockAndroidSdk();
mockAndroidStudio = MockAndroidStudio();
android = fakePlatform('android');
when(mockAndroidSdk.directory).thenReturn(fileSystem.directory('irrelevant'));
final Directory rootDirectory = fileSystem.currentDirectory;
cache = Cache.test(
rootOverride: rootDirectory,
fileSystem: fileSystem,
);
Cache.flutterRoot = ''; Cache.flutterRoot = '';
final Directory gradleWrapperDirectory = rootDirectory
.childDirectory('bin')
.childDirectory('cache')
.childDirectory('artifacts')
.childDirectory('gradle_wrapper');
gradleWrapperDirectory.createSync(recursive: true);
gradleWrapperDirectory
.childFile('gradlew')
.writeAsStringSync('irrelevant');
gradleWrapperDirectory
.childDirectory('gradle')
.childDirectory('wrapper')
.createSync(recursive: true);
gradleWrapperDirectory
.childDirectory('gradle')
.childDirectory('wrapper')
.childFile('gradle-wrapper.jar')
.writeAsStringSync('irrelevant');
}); });
testUsingContext('Can immediately tool exit on recognized exit code/stderr', () async { testUsingContext('Can immediately tool exit on recognized exit code/stderr', () async {
...@@ -82,10 +46,12 @@ void main() { ...@@ -82,10 +46,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -158,13 +124,6 @@ void main() { ...@@ -158,13 +124,6 @@ void main() {
parameters: <String, String>{}, parameters: <String, String>{},
), ),
)); ));
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
Cache: () => cache,
Platform: () => android,
Usage: () => testUsage,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('Can retry build on recognized exit code/stderr', () async { testUsingContext('Can retry build on recognized exit code/stderr', () async {
...@@ -174,10 +133,12 @@ void main() { ...@@ -174,10 +133,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -191,7 +152,7 @@ void main() { ...@@ -191,7 +152,7 @@ void main() {
)); ));
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -265,13 +226,6 @@ void main() { ...@@ -265,13 +226,6 @@ void main() {
parameters: <String, String>{}, parameters: <String, String>{},
), ),
)); ));
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
Cache: () => cache,
Platform: () => android,
Usage: () => testUsage,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('Converts recognized ProcessExceptions into tools exits', () async { testUsingContext('Converts recognized ProcessExceptions into tools exits', () async {
...@@ -281,10 +235,12 @@ void main() { ...@@ -281,10 +235,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -357,13 +313,6 @@ void main() { ...@@ -357,13 +313,6 @@ void main() {
parameters: <String, String>{}, parameters: <String, String>{},
), ),
)); ));
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
Cache: () => cache,
Platform: () => android,
Usage: () => testUsage,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('rethrows unrecognized ProcessException', () async { testUsingContext('rethrows unrecognized ProcessException', () async {
...@@ -373,10 +322,12 @@ void main() { ...@@ -373,10 +322,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(FakeCommand( processManager.addCommand(FakeCommand(
command: const <String>[ command: const <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -422,12 +373,6 @@ void main() { ...@@ -422,12 +373,6 @@ void main() {
}, },
throwsA(isA<ProcessException>())); throwsA(isA<ProcessException>()));
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('logs success event after a successful retry', () async { testUsingContext('logs success event after a successful retry', () async {
...@@ -437,10 +382,12 @@ void main() { ...@@ -437,10 +382,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -454,7 +401,7 @@ void main() { ...@@ -454,7 +401,7 @@ void main() {
)); ));
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -524,13 +471,6 @@ void main() { ...@@ -524,13 +471,6 @@ void main() {
), ),
)); ));
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
Cache: () => cache,
Platform: () => android,
Usage: () => testUsage,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('performs code size analysis and sends analytics', () async { testUsingContext('performs code size analysis and sends analytics', () async {
...@@ -540,10 +480,16 @@ void main() { ...@@ -540,10 +480,16 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(
environment: <String, String>{
'HOME': '/home',
},
),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm64', '-Ptarget-platform=android-arm64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -622,13 +568,6 @@ void main() { ...@@ -622,13 +568,6 @@ void main() {
'apk', 'apk',
), ),
)); ));
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
Cache: () => cache,
Platform: () => android,
Usage: () => testUsage,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('Can retry gradle build with plugins built as AARs', () async { testUsingContext('Can retry gradle build with plugins built as AARs', () async {
...@@ -638,10 +577,12 @@ void main() { ...@@ -638,10 +577,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -655,7 +596,7 @@ void main() { ...@@ -655,7 +596,7 @@ void main() {
)); ));
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -738,13 +679,6 @@ void main() { ...@@ -738,13 +679,6 @@ void main() {
), ),
)); ));
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
Cache: () => cache,
Platform: () => android,
Usage: () => testUsage,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('indicates that an APK has been built successfully', () async { testUsingContext('indicates that an APK has been built successfully', () async {
...@@ -754,10 +688,12 @@ void main() { ...@@ -754,10 +688,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=lib/main.dart', '-Ptarget=lib/main.dart',
...@@ -807,12 +743,6 @@ void main() { ...@@ -807,12 +743,6 @@ void main() {
contains('Built build/app/outputs/flutter-apk/app-release.apk (0.0MB)'), contains('Built build/app/outputs/flutter-apk/app-release.apk (0.0MB)'),
); );
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext("doesn't indicate how to consume an AAR when printHowToConsumeAar is false", () async { testUsingContext("doesn't indicate how to consume an AAR when printHowToConsumeAar is false", () async {
...@@ -822,10 +752,12 @@ void main() { ...@@ -822,10 +752,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/.android/gradlew', 'gradlew',
'-I=/packages/flutter_tools/gradle/aar_init_script.gradle', '-I=/packages/flutter_tools/gradle/aar_init_script.gradle',
'-Pflutter-root=/', '-Pflutter-root=/',
'-Poutput-dir=build/', '-Poutput-dir=build/',
...@@ -874,13 +806,6 @@ void main() { ...@@ -874,13 +806,6 @@ void main() {
isFalse, isFalse,
); );
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('gradle exit code and stderr is forwarded to tool exit', () async { testUsingContext('gradle exit code and stderr is forwarded to tool exit', () async {
...@@ -890,10 +815,12 @@ void main() { ...@@ -890,10 +815,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/.android/gradlew', 'gradlew',
'-I=/packages/flutter_tools/gradle/aar_init_script.gradle', '-I=/packages/flutter_tools/gradle/aar_init_script.gradle',
'-Pflutter-root=/', '-Pflutter-root=/',
'-Poutput-dir=build/', '-Poutput-dir=build/',
...@@ -935,13 +862,6 @@ void main() { ...@@ -935,13 +862,6 @@ void main() {
buildNumber: '1.0', buildNumber: '1.0',
), throwsToolExit(exitCode: 108, message: 'Gradle task assembleAarRelease failed with exit code 108.')); ), throwsToolExit(exitCode: 108, message: 'Gradle task assembleAarRelease failed with exit code 108.'));
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('build apk uses selected local engine with arm32 ABI', () async { testUsingContext('build apk uses selected local engine with arm32 ABI', () async {
...@@ -951,10 +871,12 @@ void main() { ...@@ -951,10 +871,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(localEngine: 'out/android_arm'), artifacts: Artifacts.test(localEngine: 'out/android_arm'),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0', '-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0',
'-Plocal-engine-build-mode=release', '-Plocal-engine-build-mode=release',
...@@ -1014,13 +936,6 @@ void main() { ...@@ -1014,13 +936,6 @@ void main() {
); );
}, throwsToolExit()); }, throwsToolExit());
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('build apk uses selected local engine with arm64 ABI', () async { testUsingContext('build apk uses selected local engine with arm64 ABI', () async {
...@@ -1030,10 +945,12 @@ void main() { ...@@ -1030,10 +945,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(localEngine: 'out/android_arm64'), artifacts: Artifacts.test(localEngine: 'out/android_arm64'),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0', '-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0',
'-Plocal-engine-build-mode=release', '-Plocal-engine-build-mode=release',
...@@ -1093,13 +1010,6 @@ void main() { ...@@ -1093,13 +1010,6 @@ void main() {
); );
}, throwsToolExit()); }, throwsToolExit());
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('build apk uses selected local engine with x86 ABI', () async { testUsingContext('build apk uses selected local engine with x86 ABI', () async {
...@@ -1109,10 +1019,12 @@ void main() { ...@@ -1109,10 +1019,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(localEngine: 'out/android_x86'), artifacts: Artifacts.test(localEngine: 'out/android_x86'),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0', '-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0',
'-Plocal-engine-build-mode=release', '-Plocal-engine-build-mode=release',
...@@ -1172,13 +1084,6 @@ void main() { ...@@ -1172,13 +1084,6 @@ void main() {
); );
}, throwsToolExit()); }, throwsToolExit());
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('build apk uses selected local engine with x64 ABI', () async { testUsingContext('build apk uses selected local engine with x64 ABI', () async {
...@@ -1188,10 +1093,12 @@ void main() { ...@@ -1188,10 +1093,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(localEngine: 'out/android_x64'), artifacts: Artifacts.test(localEngine: 'out/android_x64'),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0', '-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0',
'-Plocal-engine-build-mode=release', '-Plocal-engine-build-mode=release',
...@@ -1251,13 +1158,6 @@ void main() { ...@@ -1251,13 +1158,6 @@ void main() {
); );
}, throwsToolExit()); }, throwsToolExit());
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('honors --no-android-gradle-daemon setting', () async { testUsingContext('honors --no-android-gradle-daemon setting', () async {
...@@ -1267,10 +1167,12 @@ void main() { ...@@ -1267,10 +1167,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand( processManager.addCommand(
const FakeCommand(command: <String>[ const FakeCommand(command: <String>[
'/android/gradlew', 'gradlew',
'-q', '-q',
'--no-daemon', '--no-daemon',
'-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget-platform=android-arm,android-arm64,android-x64',
...@@ -1311,13 +1213,6 @@ void main() { ...@@ -1311,13 +1213,6 @@ void main() {
); );
}, throwsToolExit()); }, throwsToolExit());
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('build aar uses selected local engine with arm32 ABI', () async { testUsingContext('build aar uses selected local engine with arm32 ABI', () async {
...@@ -1327,10 +1222,12 @@ void main() { ...@@ -1327,10 +1222,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(localEngine: 'out/android_arm'), artifacts: Artifacts.test(localEngine: 'out/android_arm'),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/.android/gradlew', 'gradlew',
'-I=/packages/flutter_tools/gradle/aar_init_script.gradle', '-I=/packages/flutter_tools/gradle/aar_init_script.gradle',
'-Pflutter-root=/', '-Pflutter-root=/',
'-Poutput-dir=build/', '-Poutput-dir=build/',
...@@ -1401,13 +1298,6 @@ void main() { ...@@ -1401,13 +1298,6 @@ void main() {
'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom' 'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom'
), exists); ), exists);
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('build aar uses selected local engine with x64 ABI', () async { testUsingContext('build aar uses selected local engine with x64 ABI', () async {
...@@ -1417,10 +1307,12 @@ void main() { ...@@ -1417,10 +1307,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(localEngine: 'out/android_arm64'), artifacts: Artifacts.test(localEngine: 'out/android_arm64'),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/.android/gradlew', 'gradlew',
'-I=/packages/flutter_tools/gradle/aar_init_script.gradle', '-I=/packages/flutter_tools/gradle/aar_init_script.gradle',
'-Pflutter-root=/', '-Pflutter-root=/',
'-Poutput-dir=build/', '-Poutput-dir=build/',
...@@ -1491,13 +1383,6 @@ void main() { ...@@ -1491,13 +1383,6 @@ void main() {
'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom' 'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom'
), exists); ), exists);
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('build aar uses selected local engine with x86 ABI', () async { testUsingContext('build aar uses selected local engine with x86 ABI', () async {
...@@ -1507,10 +1392,12 @@ void main() { ...@@ -1507,10 +1392,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(localEngine: 'out/android_x86'), artifacts: Artifacts.test(localEngine: 'out/android_x86'),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/.android/gradlew', 'gradlew',
'-I=/packages/flutter_tools/gradle/aar_init_script.gradle', '-I=/packages/flutter_tools/gradle/aar_init_script.gradle',
'-Pflutter-root=/', '-Pflutter-root=/',
'-Poutput-dir=build/', '-Poutput-dir=build/',
...@@ -1581,13 +1468,6 @@ void main() { ...@@ -1581,13 +1468,6 @@ void main() {
'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom' 'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom'
), exists); ), exists);
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
testUsingContext('build aar uses selected local engine on x64 ABI', () async { testUsingContext('build aar uses selected local engine on x64 ABI', () async {
...@@ -1597,10 +1477,12 @@ void main() { ...@@ -1597,10 +1477,12 @@ void main() {
fileSystem: fileSystem, fileSystem: fileSystem,
artifacts: Artifacts.test(localEngine: 'out/android_x64'), artifacts: Artifacts.test(localEngine: 'out/android_x64'),
usage: testUsage, usage: testUsage,
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
processManager.addCommand(const FakeCommand( processManager.addCommand(const FakeCommand(
command: <String>[ command: <String>[
'/.android/gradlew', 'gradlew',
'-I=/packages/flutter_tools/gradle/aar_init_script.gradle', '-I=/packages/flutter_tools/gradle/aar_init_script.gradle',
'-Pflutter-root=/', '-Pflutter-root=/',
'-Poutput-dir=build/', '-Poutput-dir=build/',
...@@ -1671,24 +1553,13 @@ void main() { ...@@ -1671,24 +1553,13 @@ void main() {
'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom' 'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom'
), exists); ), exists);
expect(processManager.hasRemainingExpectations, false); expect(processManager.hasRemainingExpectations, false);
}, overrides: <Type, Generator>{
AndroidSdk: () => mockAndroidSdk,
AndroidStudio: () => mockAndroidStudio,
Cache: () => cache,
Platform: () => android,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
}); });
}); });
} }
FakePlatform fakePlatform(String name) { class FakeGradleUtils extends Fake implements GradleUtils {
return FakePlatform( @override
environment: <String, String>{'HOME': '/path/to/home'}, String getExecutable(FlutterProject project) {
operatingSystem: name, return 'gradlew';
stdoutSupportsAnsi: false, }
);
} }
class MockAndroidSdk extends Mock implements AndroidSdk {}
class MockAndroidStudio extends Mock implements AndroidStudio {}
...@@ -646,6 +646,8 @@ flutter: ...@@ -646,6 +646,8 @@ flutter:
fileSystem: fs, fileSystem: fs,
artifacts: Artifacts.test(), artifacts: Artifacts.test(),
usage: TestUsage(), usage: TestUsage(),
gradleUtils: FakeGradleUtils(),
platform: FakePlatform(),
); );
}); });
......
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