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

[flutter_tools] do not use context logger in gradle (#75940)

parent 835c7fab
...@@ -21,7 +21,7 @@ import '../build_info.dart'; ...@@ -21,7 +21,7 @@ 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; import '../globals.dart' as globals hide logger, printStatus, printTrace, printError;
import '../project.dart'; import '../project.dart';
import '../reporting/reporting.dart'; import '../reporting/reporting.dart';
import 'android_builder.dart'; import 'android_builder.dart';
...@@ -136,8 +136,8 @@ Future<File> getGradleAppOut(AndroidProject androidProject) async { ...@@ -136,8 +136,8 @@ Future<File> getGradleAppOut(AndroidProject androidProject) async {
/// Runs `gradlew dependencies`, ensuring that dependencies are resolved and /// Runs `gradlew dependencies`, ensuring that dependencies are resolved and
/// potentially downloaded. /// potentially downloaded.
Future<void> checkGradleDependencies() async { Future<void> checkGradleDependencies(Logger logger) async {
final Status progress = globals.logger.startProgress( final Status progress = logger.startProgress(
'Ensuring gradle dependencies are up to date...', 'Ensuring gradle dependencies are up to date...',
); );
final FlutterProject flutterProject = FlutterProject.current(); final FlutterProject flutterProject = FlutterProject.current();
...@@ -157,7 +157,7 @@ Future<void> checkGradleDependencies() async { ...@@ -157,7 +157,7 @@ Future<void> checkGradleDependencies() async {
/// from the existing `settings.gradle` file. This operation will fail if the existing /// from the existing `settings.gradle` file. This operation will fail if the existing
/// `settings.gradle` file has local edits. /// `settings.gradle` file has local edits.
@visibleForTesting @visibleForTesting
void createSettingsAarGradle(Directory androidDirectory) { void createSettingsAarGradle(Directory androidDirectory, Logger logger) {
final File newSettingsFile = androidDirectory.childFile('settings_aar.gradle'); final File newSettingsFile = androidDirectory.childFile('settings_aar.gradle');
if (newSettingsFile.existsSync()) { if (newSettingsFile.existsSync()) {
return; return;
...@@ -169,7 +169,7 @@ void createSettingsAarGradle(Directory androidDirectory) { ...@@ -169,7 +169,7 @@ void createSettingsAarGradle(Directory androidDirectory) {
final String currentFileContent = currentSettingsFile.readAsStringSync(); final String currentFileContent = currentSettingsFile.readAsStringSync();
final String newSettingsRelativeFile = globals.fs.path.relative(newSettingsFile.path); final String newSettingsRelativeFile = globals.fs.path.relative(newSettingsFile.path);
final Status status = globals.logger.startProgress('✏️ Creating `$newSettingsRelativeFile`...'); final Status status = logger.startProgress('✏️ Creating `$newSettingsRelativeFile`...');
final String flutterRoot = globals.fs.path.absolute(Cache.flutterRoot); final String flutterRoot = globals.fs.path.absolute(Cache.flutterRoot);
final File legacySettingsDotGradleFiles = globals.fs.file(globals.fs.path.join(flutterRoot, 'packages','flutter_tools', final File legacySettingsDotGradleFiles = globals.fs.file(globals.fs.path.join(flutterRoot, 'packages','flutter_tools',
...@@ -191,20 +191,26 @@ void createSettingsAarGradle(Directory androidDirectory) { ...@@ -191,20 +191,26 @@ void createSettingsAarGradle(Directory androidDirectory) {
} }
if (!exactMatch) { if (!exactMatch) {
status.cancel(); status.cancel();
globals.printStatus('$warningMark Flutter tried to create the file `$newSettingsRelativeFile`, but failed.'); logger.printStatus('$warningMark Flutter tried to create the file `$newSettingsRelativeFile`, but failed.');
// Print how to manually update the file. // Print how to manually update the file.
globals.printStatus(globals.fs.file(globals.fs.path.join(flutterRoot, 'packages','flutter_tools', logger.printStatus(globals.fs.file(globals.fs.path.join(flutterRoot, 'packages','flutter_tools',
'gradle', 'manual_migration_settings.gradle.md')).readAsStringSync()); 'gradle', 'manual_migration_settings.gradle.md')).readAsStringSync());
throwToolExit('Please create the file and run this command again.'); throwToolExit('Please create the file and run this command again.');
} }
// Copy the new file. // Copy the new file.
newSettingsFile.writeAsStringSync(settingsAarContent); newSettingsFile.writeAsStringSync(settingsAarContent);
status.stop(); status.stop();
globals.printStatus('$successMark `$newSettingsRelativeFile` created successfully.'); logger.printStatus('$successMark `$newSettingsRelativeFile` created successfully.');
} }
/// An implementation of the [AndroidBuilder] that delegates to gradle. /// An implementation of the [AndroidBuilder] that delegates to gradle.
class AndroidGradleBuilder implements AndroidBuilder { class AndroidGradleBuilder implements AndroidBuilder {
AndroidGradleBuilder({
@required Logger logger,
}) : _logger = logger;
final Logger _logger;
/// 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
Future<void> buildAar({ Future<void> buildAar({
...@@ -238,7 +244,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -238,7 +244,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
androidPackage: project.manifest.androidPackage, androidPackage: project.manifest.androidPackage,
repoDirectory: getRepoDirectory(outputDirectory), repoDirectory: getRepoDirectory(outputDirectory),
buildNumber: buildNumber, buildNumber: buildNumber,
logger: globals.logger, logger: _logger,
fileSystem: globals.fs, fileSystem: globals.fs,
); );
} finally { } finally {
...@@ -326,8 +332,8 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -326,8 +332,8 @@ class AndroidGradleBuilder implements AndroidBuilder {
BuildEvent('app-using-android-x', flutterUsage: globals.flutterUsage).send(); BuildEvent('app-using-android-x', flutterUsage: globals.flutterUsage).send();
} else if (!usesAndroidX) { } else if (!usesAndroidX) {
BuildEvent('app-not-using-android-x', flutterUsage: globals.flutterUsage).send(); BuildEvent('app-not-using-android-x', flutterUsage: globals.flutterUsage).send();
globals.printStatus("$warningMark Your app isn't using AndroidX.", emphasis: true); _logger.printStatus("$warningMark Your app isn't using AndroidX.", emphasis: true);
globals.printStatus( _logger.printStatus(
'To avoid potential build failures, you can quickly migrate your app ' 'To avoid potential build failures, you can quickly migrate your app '
'by following the steps on https://goo.gl/CP92wY .', 'by following the steps on https://goo.gl/CP92wY .',
indent: 4, indent: 4,
...@@ -339,7 +345,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -339,7 +345,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
if (shouldBuildPluginAsAar) { if (shouldBuildPluginAsAar) {
// Create a settings.gradle that doesn't import the plugins as subprojects. // Create a settings.gradle that doesn't import the plugins as subprojects.
createSettingsAarGradle(project.android.hostAppGradleRoot); createSettingsAarGradle(project.android.hostAppGradleRoot, _logger);
await buildPluginsAsAar( await buildPluginsAsAar(
project, project,
androidBuildInfo, androidBuildInfo,
...@@ -352,7 +358,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -352,7 +358,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
? getBundleTaskFor(buildInfo) ? getBundleTaskFor(buildInfo)
: getAssembleTaskFor(buildInfo); : getAssembleTaskFor(buildInfo);
final Status status = globals.logger.startProgress( final Status status = _logger.startProgress(
"Running Gradle task '$assembleTask'...", "Running Gradle task '$assembleTask'...",
multilineOutput: true, multilineOutput: true,
); );
...@@ -360,7 +366,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -360,7 +366,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
final List<String> command = <String>[ final List<String> command = <String>[
gradleUtils.getExecutable(project), gradleUtils.getExecutable(project),
]; ];
if (globals.logger.isVerbose) { if (_logger.isVerbose) {
command.add('-Pverbose=true'); command.add('-Pverbose=true');
} else { } else {
command.add('-q'); command.add('-q');
...@@ -374,7 +380,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -374,7 +380,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
engineOutPath: localEngineArtifacts.engineOutPath, engineOutPath: localEngineArtifacts.engineOutPath,
androidBuildInfo: androidBuildInfo, androidBuildInfo: androidBuildInfo,
); );
globals.printTrace( _logger.printTrace(
'Using local engine: ${localEngineArtifacts.engineOutPath}\n' 'Using local engine: ${localEngineArtifacts.engineOutPath}\n'
'Local Maven repo: ${localEngineRepo.path}' 'Local Maven repo: ${localEngineRepo.path}'
); );
...@@ -528,7 +534,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -528,7 +534,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
await _performCodeSizeAnalysis('aab', bundleFile, androidBuildInfo); await _performCodeSizeAnalysis('aab', bundleFile, androidBuildInfo);
} }
globals.printStatus( _logger.printStatus(
'$successMark Built ${globals.fs.path.relative(bundleFile.path)}$appSize.', '$successMark Built ${globals.fs.path.relative(bundleFile.path)}$appSize.',
color: TerminalColor.green, color: TerminalColor.green,
); );
...@@ -552,7 +558,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -552,7 +558,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
apkFile.copySync(apkDirectory apkFile.copySync(apkDirectory
.childFile('app.apk') .childFile('app.apk')
.path); .path);
globals.printTrace('calculateSha: $apkDirectory/app.apk'); _logger.printTrace('calculateSha: $apkDirectory/app.apk');
final File apkShaFile = apkDirectory.childFile('app.apk.sha1'); final File apkShaFile = apkDirectory.childFile('app.apk.sha1');
apkShaFile.writeAsStringSync(_calculateSha(apkFile)); apkShaFile.writeAsStringSync(_calculateSha(apkFile));
...@@ -560,7 +566,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -560,7 +566,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
final String appSize = (buildInfo.mode == BuildMode.debug) final String appSize = (buildInfo.mode == BuildMode.debug)
? '' // Don't display the size when building a debug variant. ? '' // Don't display the size when building a debug variant.
: ' (${getSizeAsMB(apkFile.lengthSync())})'; : ' (${getSizeAsMB(apkFile.lengthSync())})';
globals.printStatus( _logger.printStatus(
'$successMark Built ${globals.fs.path.relative(apkFile.path)}$appSize.', '$successMark Built ${globals.fs.path.relative(apkFile.path)}$appSize.',
color: TerminalColor.green, color: TerminalColor.green,
); );
...@@ -575,7 +581,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -575,7 +581,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
AndroidBuildInfo androidBuildInfo,) async { AndroidBuildInfo androidBuildInfo,) async {
final SizeAnalyzer sizeAnalyzer = SizeAnalyzer( final SizeAnalyzer sizeAnalyzer = SizeAnalyzer(
fileSystem: globals.fs, fileSystem: globals.fs,
logger: globals.logger, logger: _logger,
flutterUsage: globals.flutterUsage, flutterUsage: globals.flutterUsage,
); );
final String archName = getNameForAndroidArch(androidBuildInfo.targetArchs.single); final String archName = getNameForAndroidArch(androidBuildInfo.targetArchs.single);
...@@ -597,7 +603,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -597,7 +603,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
) )
..writeAsStringSync(jsonEncode(output)); ..writeAsStringSync(jsonEncode(output));
// This message is used as a sentinel in analyze_apk_size_test.dart // This message is used as a sentinel in analyze_apk_size_test.dart
globals.printStatus( _logger.printStatus(
'A summary of your ${kind.toUpperCase()} analysis can be found at: ${outputFile.path}', 'A summary of your ${kind.toUpperCase()} analysis can be found at: ${outputFile.path}',
); );
...@@ -606,7 +612,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -606,7 +612,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
.split('.flutter-devtools/') .split('.flutter-devtools/')
.last .last
.trim(); .trim();
globals.printStatus( _logger.printStatus(
'\nTo analyze your app size in Dart DevTools, run the following command:\n' '\nTo analyze your app size in Dart DevTools, run the following command:\n'
'flutter pub global activate devtools; flutter pub global run devtools ' 'flutter pub global activate devtools; flutter pub global run devtools '
'--appSizeBase=$relativeAppSizePath' '--appSizeBase=$relativeAppSizePath'
...@@ -639,7 +645,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -639,7 +645,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
final BuildInfo buildInfo = androidBuildInfo.buildInfo; final BuildInfo buildInfo = androidBuildInfo.buildInfo;
final String aarTask = getAarTaskFor(buildInfo); final String aarTask = getAarTaskFor(buildInfo);
final Status status = globals.logger.startProgress( final Status status = _logger.startProgress(
"Running Gradle task '$aarTask'...", "Running Gradle task '$aarTask'...",
multilineOutput: true, multilineOutput: true,
); );
...@@ -660,7 +666,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -660,7 +666,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
'-Pis-plugin=${manifest.isPlugin}', '-Pis-plugin=${manifest.isPlugin}',
'-PbuildNumber=$buildNumber' '-PbuildNumber=$buildNumber'
]; ];
if (globals.logger.isVerbose) { if (_logger.isVerbose) {
command.add('-Pverbose=true'); command.add('-Pverbose=true');
} else { } else {
command.add('-q'); command.add('-q');
...@@ -674,7 +680,7 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -674,7 +680,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
} }
command.addAll(androidBuildInfo.buildInfo.toGradleConfig()); command.addAll(androidBuildInfo.buildInfo.toGradleConfig());
if (buildInfo.dartObfuscation && buildInfo.mode != BuildMode.release) { if (buildInfo.dartObfuscation && buildInfo.mode != BuildMode.release) {
globals.printStatus( _logger.printStatus(
'Dart obfuscation is not supported in ${toTitleCase(buildInfo.friendlyModeName)}' 'Dart obfuscation is not supported in ${toTitleCase(buildInfo.friendlyModeName)}'
' mode, building as un-obfuscated.', ' mode, building as un-obfuscated.',
); );
...@@ -686,9 +692,9 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -686,9 +692,9 @@ class AndroidGradleBuilder implements AndroidBuilder {
engineOutPath: localEngineArtifacts.engineOutPath, engineOutPath: localEngineArtifacts.engineOutPath,
androidBuildInfo: androidBuildInfo, androidBuildInfo: androidBuildInfo,
); );
globals.printTrace( _logger.printTrace(
'Using local engine: ${localEngineArtifacts.engineOutPath}\n' 'Using local engine: ${localEngineArtifacts.engineOutPath}\n'
'Local Maven repo: ${localEngineRepo.path}' 'Local Maven repo: ${localEngineRepo.path}'
); );
command.add('-Plocal-engine-repo=${localEngineRepo.path}'); command.add('-Plocal-engine-repo=${localEngineRepo.path}');
command.add('-Plocal-engine-build-mode=${buildInfo.modeName}'); command.add('-Plocal-engine-build-mode=${buildInfo.modeName}');
...@@ -732,8 +738,8 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -732,8 +738,8 @@ class AndroidGradleBuilder implements AndroidBuilder {
globals.flutterUsage.sendTiming('build', 'gradle-aar', sw.elapsed); globals.flutterUsage.sendTiming('build', 'gradle-aar', sw.elapsed);
if (result.exitCode != 0) { if (result.exitCode != 0) {
globals.printStatus(result.stdout, wrap: false); _logger.printStatus(result.stdout, wrap: false);
globals.printError(result.stderr, wrap: false); _logger.printError(result.stderr, wrap: false);
throwToolExit( throwToolExit(
'Gradle task $aarTask failed with exit code ${result.exitCode}.', 'Gradle task $aarTask failed with exit code ${result.exitCode}.',
exitCode: result.exitCode, exitCode: result.exitCode,
...@@ -741,14 +747,14 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -741,14 +747,14 @@ class AndroidGradleBuilder implements AndroidBuilder {
} }
final Directory repoDirectory = getRepoDirectory(outputDirectory); final Directory repoDirectory = getRepoDirectory(outputDirectory);
if (!repoDirectory.existsSync()) { if (!repoDirectory.existsSync()) {
globals.printStatus(result.stdout, wrap: false); _logger.printStatus(result.stdout, wrap: false);
globals.printError(result.stderr, wrap: false); _logger.printError(result.stderr, wrap: false);
throwToolExit( throwToolExit(
'Gradle task $aarTask failed to produce $repoDirectory.', 'Gradle task $aarTask failed to produce $repoDirectory.',
exitCode: exitCode, exitCode: exitCode,
); );
} }
globals.printStatus( _logger.printStatus(
'$successMark Built ${globals.fs.path.relative(repoDirectory.path)}.', '$successMark Built ${globals.fs.path.relative(repoDirectory.path)}.',
color: TerminalColor.green, color: TerminalColor.green,
); );
...@@ -777,10 +783,10 @@ class AndroidGradleBuilder implements AndroidBuilder { ...@@ -777,10 +783,10 @@ class AndroidGradleBuilder implements AndroidBuilder {
final String pluginName = pluginParts.first; final String pluginName = pluginParts.first;
final File buildGradleFile = pluginDirectory.childDirectory('android').childFile('build.gradle'); final File buildGradleFile = pluginDirectory.childDirectory('android').childFile('build.gradle');
if (!buildGradleFile.existsSync()) { if (!buildGradleFile.existsSync()) {
globals.printTrace("Skipping plugin $pluginName since it doesn't have a android/build.gradle file"); _logger.printTrace("Skipping plugin $pluginName since it doesn't have a android/build.gradle file");
continue; continue;
} }
globals.logger.printStatus('Building plugin $pluginName...'); _logger.printStatus('Building plugin $pluginName...');
try { try {
await buildGradleAar( await buildGradleAar(
project: FlutterProject.fromDirectory(pluginDirectory), project: FlutterProject.fromDirectory(pluginDirectory),
...@@ -876,15 +882,8 @@ String _hex(List<int> bytes) { ...@@ -876,15 +882,8 @@ String _hex(List<int> bytes) {
} }
String _calculateSha(File file) { String _calculateSha(File file) {
final Stopwatch sw = Stopwatch()..start();
final List<int> bytes = file.readAsBytesSync(); final List<int> bytes = file.readAsBytesSync();
globals.printTrace('calculateSha: reading file took ${sw.elapsedMilliseconds}us'); return _hex(sha1.convert(bytes).bytes);
globals.flutterUsage.sendTiming('build', 'apk-sha-read', sw.elapsed);
sw.reset();
final String sha = _hex(sha1.convert(bytes).bytes);
globals.printTrace('calculateSha: computing sha took ${sw.elapsedMilliseconds}us');
globals.flutterUsage.sendTiming('build', 'apk-sha-calc', sw.elapsed);
return sha;
} }
void _exitWithUnsupportedProjectMessage() { void _exitWithUnsupportedProjectMessage() {
......
...@@ -65,7 +65,7 @@ class ApplicationPackageFactory { ...@@ -65,7 +65,7 @@ class ApplicationPackageFactory {
case TargetPlatform.android_x64: case TargetPlatform.android_x64:
case TargetPlatform.android_x86: case TargetPlatform.android_x86:
if (_androidSdk?.licensesAvailable == true && _androidSdk?.latestVersion == null) { if (_androidSdk?.licensesAvailable == true && _androidSdk?.latestVersion == null) {
await checkGradleDependencies(); await checkGradleDependencies(_logger);
} }
if (applicationBinary == null) { if (applicationBinary == null) {
return await AndroidApk.fromAndroidProject( return await AndroidApk.fromAndroidProject(
......
...@@ -413,7 +413,6 @@ class WindowsStdoutLogger extends StdoutLogger { ...@@ -413,7 +413,6 @@ class WindowsStdoutLogger extends StdoutLogger {
@override @override
void writeToStdOut(String message) { void writeToStdOut(String message) {
// TODO(jcollins-g): wrong abstraction layer for this, move to [Stdio].
final String windowsMessage = _terminal.supportsEmoji final String windowsMessage = _terminal.supportsEmoji
? message ? message
: message.replaceAll('🔥', '') : message.replaceAll('🔥', '')
...@@ -421,7 +420,8 @@ class WindowsStdoutLogger extends StdoutLogger { ...@@ -421,7 +420,8 @@ class WindowsStdoutLogger extends StdoutLogger {
.replaceAll('✗', 'X') .replaceAll('✗', 'X')
.replaceAll('✓', '√') .replaceAll('✓', '√')
.replaceAll('🔨', '') .replaceAll('🔨', '')
.replaceAll('💪', ''); .replaceAll('💪', '')
.replaceAll('✏️', '');
_stdio.stdoutWrite(windowsMessage); _stdio.stdoutWrite(windowsMessage);
} }
} }
......
...@@ -84,7 +84,7 @@ abstract class Terminal { ...@@ -84,7 +84,7 @@ abstract class Terminal {
/// Create a new test [Terminal]. /// Create a new test [Terminal].
/// ///
/// If not specified, [supportsColor] defaults to `false`. /// If not specified, [supportsColor] defaults to `false`.
factory Terminal.test({bool supportsColor}) = _TestTerminal; factory Terminal.test({bool supportsColor, bool supportsEmoji}) = _TestTerminal;
/// Whether the current terminal supports color escape codes. /// Whether the current terminal supports color escape codes.
bool get supportsColor; bool get supportsColor;
...@@ -317,7 +317,7 @@ class AnsiTerminal implements Terminal { ...@@ -317,7 +317,7 @@ class AnsiTerminal implements Terminal {
} }
class _TestTerminal implements Terminal { class _TestTerminal implements Terminal {
_TestTerminal({this.supportsColor = false}); _TestTerminal({this.supportsColor = false, this.supportsEmoji = false});
@override @override
bool usesTerminalUi; bool usesTerminalUi;
...@@ -351,7 +351,7 @@ class _TestTerminal implements Terminal { ...@@ -351,7 +351,7 @@ class _TestTerminal implements Terminal {
final bool supportsColor; final bool supportsColor;
@override @override
bool get supportsEmoji => false; final bool supportsEmoji;
@override @override
bool get stdinHasTerminal => false; bool get stdinHasTerminal => false;
......
...@@ -79,7 +79,9 @@ Future<T> runInContext<T>( ...@@ -79,7 +79,9 @@ Future<T> runInContext<T>(
body: runnerWrapper, body: runnerWrapper,
overrides: overrides, overrides: overrides,
fallbacks: <Type, Generator>{ fallbacks: <Type, Generator>{
AndroidBuilder: () => AndroidGradleBuilder(), AndroidBuilder: () => AndroidGradleBuilder(
logger: globals.logger,
),
AndroidLicenseValidator: () => AndroidLicenseValidator( AndroidLicenseValidator: () => AndroidLicenseValidator(
operatingSystemUtils: globals.os, operatingSystemUtils: globals.os,
platform: globals.platform, platform: globals.platform,
......
...@@ -14,6 +14,7 @@ import 'package:flutter_tools/src/artifacts.dart'; ...@@ -14,6 +14,7 @@ import 'package:flutter_tools/src/artifacts.dart';
import 'package:flutter_tools/src/base/context.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/platform.dart'; import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/build_info.dart'; import 'package:flutter_tools/src/build_info.dart';
import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/cache.dart';
...@@ -29,6 +30,7 @@ import '../../src/mocks.dart'; ...@@ -29,6 +30,7 @@ import '../../src/mocks.dart';
void main() { void main() {
group('gradle build', () { group('gradle build', () {
BufferLogger logger;
TestUsage testUsage; TestUsage testUsage;
MockAndroidSdk mockAndroidSdk; MockAndroidSdk mockAndroidSdk;
MockAndroidStudio mockAndroidStudio; MockAndroidStudio mockAndroidStudio;
...@@ -41,6 +43,7 @@ void main() { ...@@ -41,6 +43,7 @@ void main() {
AndroidGradleBuilder builder; AndroidGradleBuilder builder;
setUp(() { setUp(() {
logger = BufferLogger.test();
testUsage = TestUsage(); testUsage = TestUsage();
fileSystem = MemoryFileSystem.test(); fileSystem = MemoryFileSystem.test();
fileSystemUtils = MockFileSystemUtils(); fileSystemUtils = MockFileSystemUtils();
...@@ -49,7 +52,9 @@ void main() { ...@@ -49,7 +52,9 @@ void main() {
mockArtifacts = MockLocalEngineArtifacts(); mockArtifacts = MockLocalEngineArtifacts();
mockProcessManager = MockProcessManager(); mockProcessManager = MockProcessManager();
android = fakePlatform('android'); android = fakePlatform('android');
builder = AndroidGradleBuilder(); builder = AndroidGradleBuilder(
logger: logger,
);
when(mockAndroidSdk.directory).thenReturn('irrelevant'); when(mockAndroidSdk.directory).thenReturn('irrelevant');
...@@ -660,7 +665,7 @@ void main() { ...@@ -660,7 +665,7 @@ void main() {
); );
expect( expect(
testLogger.statusText, logger.statusText,
contains('Built build/app/outputs/flutter-apk/app-release.apk (0.0MB)'), contains('Built build/app/outputs/flutter-apk/app-release.apk (0.0MB)'),
); );
...@@ -708,11 +713,11 @@ void main() { ...@@ -708,11 +713,11 @@ void main() {
); );
expect( expect(
testLogger.statusText, logger.statusText,
contains('Built build/outputs/repo'), contains('Built build/outputs/repo'),
); );
expect( expect(
testLogger.statusText.contains('Consuming the Module'), logger.statusText.contains('Consuming the Module'),
isFalse, isFalse,
); );
......
...@@ -462,7 +462,7 @@ include ':app' ...@@ -462,7 +462,7 @@ include ':app'
globals.fs.file(globals.fs.path.join(toolGradlePath, 'settings_aar.gradle.tmpl')) globals.fs.file(globals.fs.path.join(toolGradlePath, 'settings_aar.gradle.tmpl'))
.writeAsStringSync(settingsAarFile); .writeAsStringSync(settingsAarFile);
createSettingsAarGradle(tempDir); createSettingsAarGradle(tempDir, testLogger);
expect(testLogger.statusText, contains('created successfully')); expect(testLogger.statusText, contains('created successfully'));
expect(tempDir.childFile('settings_aar.gradle').existsSync(), isTrue); expect(tempDir.childFile('settings_aar.gradle').existsSync(), isTrue);
...@@ -495,7 +495,7 @@ include ':app' ...@@ -495,7 +495,7 @@ include ':app'
globals.fs.file(globals.fs.path.join(toolGradlePath, 'settings_aar.gradle.tmpl')) globals.fs.file(globals.fs.path.join(toolGradlePath, 'settings_aar.gradle.tmpl'))
.writeAsStringSync(settingsAarFile); .writeAsStringSync(settingsAarFile);
createSettingsAarGradle(tempDir); createSettingsAarGradle(tempDir, testLogger);
expect(testLogger.statusText, contains('created successfully')); expect(testLogger.statusText, contains('created successfully'));
expect(tempDir.childFile('settings_aar.gradle').existsSync(), isTrue); expect(tempDir.childFile('settings_aar.gradle').existsSync(), isTrue);
...@@ -834,13 +834,15 @@ flutter: ...@@ -834,13 +834,15 @@ flutter:
FakeProcessManager fakeProcessManager; FakeProcessManager fakeProcessManager;
MockAndroidSdk mockAndroidSdk; MockAndroidSdk mockAndroidSdk;
AndroidGradleBuilder builder; AndroidGradleBuilder builder;
BufferLogger logger;
setUp(() { setUp(() {
logger = BufferLogger.test();
fs = MemoryFileSystem.test(); fs = MemoryFileSystem.test();
fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]); fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]);
mockAndroidSdk = MockAndroidSdk(); mockAndroidSdk = MockAndroidSdk();
when(mockAndroidSdk.directory).thenReturn('irrelevant'); when(mockAndroidSdk.directory).thenReturn('irrelevant');
builder = AndroidGradleBuilder(); builder = AndroidGradleBuilder(logger: logger);
}); });
testUsingContext('calls gradle', () async { testUsingContext('calls gradle', () async {
......
...@@ -87,6 +87,32 @@ void main() { ...@@ -87,6 +87,32 @@ void main() {
), isA<AppRunLogger>()); ), isA<AppRunLogger>());
}); });
testWithoutContext('WindowsStdoutLogger rewrites emojis when terminal does not support emoji', () {
final FakeStdio stdio = FakeStdio();
final WindowsStdoutLogger logger = WindowsStdoutLogger(
outputPreferences: OutputPreferences.test(),
stdio: stdio,
terminal: Terminal.test(supportsColor: false, supportsEmoji: false),
);
logger.printStatus('🔥🖼️✗✓🔨💪✏️');
expect(stdio.writtenToStdout, <String>['X√\n']);
});
testWithoutContext('WindowsStdoutLogger does not rewrite emojis when terminal does support emoji', () {
final FakeStdio stdio = FakeStdio();
final WindowsStdoutLogger logger = WindowsStdoutLogger(
outputPreferences: OutputPreferences.test(),
stdio: stdio,
terminal: Terminal.test(supportsColor: true, supportsEmoji: true),
);
logger.printStatus('🔥🖼️✗✓🔨💪✏️');
expect(stdio.writtenToStdout, <String>['🔥🖼️✗✓🔨💪✏️\n']);
});
testWithoutContext('DelegatingLogger delegates', () { testWithoutContext('DelegatingLogger delegates', () {
final FakeLogger fakeLogger = FakeLogger(); final FakeLogger fakeLogger = FakeLogger();
final DelegatingLogger delegatingLogger = DelegatingLogger(fakeLogger); final DelegatingLogger delegatingLogger = DelegatingLogger(fakeLogger);
......
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