From 907bed698274d3be8fd772276e48ad86cd8c8f10 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 12 Jan 2021 09:38:23 -0800 Subject: [PATCH] [flutter_tools] daemon does not report platforms that are not enabled (#73736) --- .../lib/src/commands/daemon.dart | 17 ++++++----- .../commands.shard/hermetic/daemon_test.dart | 28 ++++++++++++++++++- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart index 7b28ea87fa5..a72e7763a41 100644 --- a/packages/flutter_tools/lib/src/commands/daemon.dart +++ b/packages/flutter_tools/lib/src/commands/daemon.dart @@ -19,6 +19,7 @@ import '../build_info.dart'; import '../convert.dart'; import '../device.dart'; import '../emulator.dart'; +import '../features.dart'; import '../globals.dart' as globals; import '../project.dart'; import '../resident_runner.dart'; @@ -365,28 +366,26 @@ class DaemonDomain extends Domain { final String projectRoot = _getStringArg(args, 'projectRoot', required: true); final List result = []; try { - // TODO(jonahwilliams): replace this with a project metadata check once - // that has been implemented. final FlutterProject flutterProject = FlutterProject.fromDirectory(globals.fs.directory(projectRoot)); - if (flutterProject.linux.existsSync()) { + if (featureFlags.isLinuxEnabled && flutterProject.linux.existsSync()) { result.add('linux'); } - if (flutterProject.macos.existsSync()) { + if (featureFlags.isMacOSEnabled && flutterProject.macos.existsSync()) { result.add('macos'); } - if (flutterProject.windows.existsSync()) { + if (featureFlags.isWindowsEnabled && flutterProject.windows.existsSync()) { result.add('windows'); } - if (flutterProject.ios.existsSync()) { + if (featureFlags.isIOSEnabled && flutterProject.ios.existsSync()) { result.add('ios'); } - if (flutterProject.android.existsSync()) { + if (featureFlags.isAndroidEnabled && flutterProject.android.existsSync()) { result.add('android'); } - if (flutterProject.web.existsSync()) { + if (featureFlags.isWebEnabled && flutterProject.web.existsSync()) { result.add('web'); } - if (flutterProject.fuchsia.existsSync()) { + if (featureFlags.isFuchsiaEnabled && flutterProject.fuchsia.existsSync()) { result.add('fuchsia'); } return { diff --git a/packages/flutter_tools/test/commands.shard/hermetic/daemon_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/daemon_test.dart index 8eb5342b1b2..ad6f727eede 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/daemon_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/daemon_test.dart @@ -9,6 +9,7 @@ import 'package:flutter_tools/src/base/common.dart'; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/utils.dart'; import 'package:flutter_tools/src/commands/daemon.dart'; +import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/fuchsia/fuchsia_workflow.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/ios/ios_workflow.dart'; @@ -19,6 +20,7 @@ import 'package:fake_async/fake_async.dart'; import '../../src/common.dart'; import '../../src/context.dart'; import '../../src/mocks.dart'; +import '../../src/testbed.dart'; void main() { Daemon daemon; @@ -57,6 +59,30 @@ void main() { await commands.close(); }); + testUsingContext('daemon.getSupportedPlatforms command should succeed', () async { + final StreamController> commands = StreamController>(); + final StreamController> responses = StreamController>(); + daemon = Daemon( + commands.stream, + responses.add, + notifyingLogger: notifyingLogger, + ); + // Use the flutter_gallery project which has a known set of supported platforms. + final String projectPath = globals.fs.path.join(getFlutterRoot(), 'dev', 'integration_tests', 'flutter_gallery'); + + commands.add({'id': 0, 'method': 'daemon.getSupportedPlatforms', 'params': {'projectRoot': projectPath}}); + final Map response = await responses.stream.firstWhere(_notEvent); + + expect(response['id'], 0); + expect(response['result'], isNotEmpty); + expect(response['result']['platforms'], {'macos'}); + await responses.close(); + await commands.close(); + }, overrides: { + // Disable Android/iOS and enable macOS to make sure result is consistent and defaults are tested off. + FeatureFlags: () => TestFeatureFlags(isAndroidEnabled: false, isIOSEnabled: false, isMacOSEnabled: true), + }); + testUsingContext('printError should send daemon.logMessage event', () async { final StreamController> commands = StreamController>(); final StreamController> responses = StreamController>(); @@ -443,7 +469,7 @@ void main() { }); testWithoutContext('does not run any operations concurrently', () async { - // Crete a function thats slow, but throws if another instance of the + // Crete a function that's slow, but throws if another instance of the // function is running. bool isRunning = false; Future f(int ret) async {