diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 09425d25ec..17ab07e321 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -1541,8 +1541,6 @@ abstract class FlutterCommand extends Command { if (_usesFatalWarnings) { globals.logger.fatalWarnings = boolArg(FlutterOptions.kFatalWarnings); } - // Prints the welcome message if needed. - globals.flutterUsage.printWelcome(); _printDeprecationWarning(); final String? commandPath = await usagePath; if (commandPath != null) { diff --git a/packages/flutter_tools/test/general.shard/base/process_test.dart b/packages/flutter_tools/test/general.shard/base/process_test.dart index 20f5a019d9..34337b3cc0 100644 --- a/packages/flutter_tools/test/general.shard/base/process_test.dart +++ b/packages/flutter_tools/test/general.shard/base/process_test.dart @@ -4,14 +4,17 @@ import 'dart:async'; +import 'package:file/memory.dart'; +import 'package:flutter_tools/src/base/io.dart' as io; 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/process.dart'; import 'package:flutter_tools/src/base/terminal.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import '../../src/common.dart'; -import '../../src/fake_process_manager.dart'; +import '../../src/context.dart'; import '../../src/fakes.dart'; void main() { @@ -393,6 +396,51 @@ void main() { expect(errorPassedToCallback, const TypeMatcher()); }); }); + + group('exitWithHooks', () { + late MemoryFileSystem fileSystem; + late BufferLogger logger; + late Analytics analytics; + + setUp(() { + fileSystem = MemoryFileSystem.test(); + logger = BufferLogger.test(); + final FakeFlutterVersion fakeFlutterVersion = FakeFlutterVersion(); + analytics = Analytics.fake( + tool: DashTool.flutterTool, + homeDirectory: fileSystem.currentDirectory, + dartVersion: fakeFlutterVersion.dartSdkVersion, + fs: fileSystem, + flutterChannel: fakeFlutterVersion.channel, + flutterVersion: fakeFlutterVersion.getVersionString(), + ); + }); + + testUsingContext( + 'prints analytics welcome message', + () async { + io.setExitFunctionForTests((int exitCode) {}); + final ShutdownHooks shutdownHooks = ShutdownHooks(); + await exitWithHooks(0, shutdownHooks: shutdownHooks); + expect(logger.statusText, contains(analytics.getConsentMessage)); + }, + overrides: {Analytics: () => analytics, Logger: () => logger}, + ); + + testUsingContext( + 'does not print analytics welcome message if Analytics instance indicates it should not be printed', + () async { + io.setExitFunctionForTests((int exitCode) {}); + + analytics.clientShowedMessage(); + + final ShutdownHooks shutdownHooks = ShutdownHooks(); + await exitWithHooks(0, shutdownHooks: shutdownHooks); + expect(logger.statusText, isNot(contains(analytics.getConsentMessage))); + }, + overrides: {Analytics: () => analytics, Logger: () => logger}, + ); + }); } class _ThrowsOnFlushIOSink extends MemoryIOSink {