[flutter_tools] remove LinuxWorkflow from injection and clean up tests (#51597)


diff --git a/packages/flutter_tools/lib/src/context_runner.dart b/packages/flutter_tools/lib/src/context_runner.dart
index b9a3297..39043f9 100644
--- a/packages/flutter_tools/lib/src/context_runner.dart
+++ b/packages/flutter_tools/lib/src/context_runner.dart
@@ -40,7 +40,6 @@
 import 'ios/mac.dart';
 import 'ios/simulators.dart';
 import 'ios/xcodeproj.dart';
-import 'linux/linux_workflow.dart';
 import 'macos/cocoapods.dart';
 import 'macos/cocoapods_validator.dart';
 import 'macos/macos_workflow.dart';
@@ -141,7 +140,6 @@
       IOSSimulatorUtils: () => IOSSimulatorUtils(),
       IOSWorkflow: () => const IOSWorkflow(),
       KernelCompilerFactory: () => const KernelCompilerFactory(),
-      LinuxWorkflow: () => const LinuxWorkflow(),
       Logger: () => globals.platform.isWindows
         ? WindowsStdoutLogger(
             terminal: globals.terminal,
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index 0a28259..5eef0b4 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -15,6 +15,7 @@
 import 'base/io.dart';
 import 'base/utils.dart';
 import 'build_info.dart';
+import 'features.dart';
 import 'fuchsia/fuchsia_device.dart';
 import 'globals.dart' as globals;
 import 'ios/devices.dart';
@@ -74,7 +75,10 @@
     FuchsiaDevices(),
     FlutterTesterDevices(),
     MacOSDevices(),
-    LinuxDevices(),
+    LinuxDevices(
+      platform: globals.platform,
+      featureFlags: featureFlags,
+    ),
     WindowsDevices(),
     WebDevices(),
   ]);
diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart
index 5babf68..3a228fd 100644
--- a/packages/flutter_tools/lib/src/doctor.dart
+++ b/packages/flutter_tools/lib/src/doctor.dart
@@ -20,6 +20,7 @@
 import 'base/version.dart';
 import 'cache.dart';
 import 'device.dart';
+import 'features.dart';
 import 'fuchsia/fuchsia_workflow.dart';
 import 'globals.dart' as globals;
 import 'intellij/intellij.dart';
@@ -67,6 +68,10 @@
       ...IntelliJValidator.installedValidators,
       ...VsCodeValidator.installedValidators,
     ];
+    final LinuxWorkflow linuxWorkflow = LinuxWorkflow(
+      platform: globals.platform,
+      featureFlags: featureFlags,
+    );
 
     _validators = <DoctorValidator>[
       FlutterValidator(),
@@ -115,6 +120,10 @@
         _workflows.add(fuchsiaWorkflow);
       }
 
+      final LinuxWorkflow linuxWorkflow = LinuxWorkflow(
+        platform: globals.platform,
+        featureFlags: featureFlags,
+      );
       if (linuxWorkflow.appliesToHostPlatform) {
         _workflows.add(linuxWorkflow);
       }
diff --git a/packages/flutter_tools/lib/src/linux/linux_device.dart b/packages/flutter_tools/lib/src/linux/linux_device.dart
index 2ab1b61..06c3e1c 100644
--- a/packages/flutter_tools/lib/src/linux/linux_device.dart
+++ b/packages/flutter_tools/lib/src/linux/linux_device.dart
@@ -2,10 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'package:meta/meta.dart';
+import 'package:platform/platform.dart';
+
 import '../build_info.dart';
 import '../desktop_device.dart';
 import '../device.dart';
-import '../globals.dart' as globals;
+import '../features.dart';
 import '../project.dart';
 import 'application_package.dart';
 import 'build_linux.dart';
@@ -53,13 +56,24 @@
 }
 
 class LinuxDevices extends PollingDeviceDiscovery {
-  LinuxDevices() : super('linux devices');
+  LinuxDevices({
+    @required Platform platform,
+    @required FeatureFlags featureFlags,
+  }) : _platform = platform,
+       _linuxWorkflow = LinuxWorkflow(
+          platform: platform,
+          featureFlags: featureFlags,
+       ),
+       super('linux devices');
+
+  final Platform _platform;
+  final LinuxWorkflow _linuxWorkflow;
 
   @override
-  bool get supportsPlatform => globals.platform.isLinux;
+  bool get supportsPlatform => _platform.isLinux;
 
   @override
-  bool get canListAnything => linuxWorkflow.canListDevices;
+  bool get canListAnything => _linuxWorkflow.canListDevices;
 
   @override
   Future<List<Device>> pollingGetDevices() async {
diff --git a/packages/flutter_tools/lib/src/linux/linux_workflow.dart b/packages/flutter_tools/lib/src/linux/linux_workflow.dart
index 11423d3..caea987 100644
--- a/packages/flutter_tools/lib/src/linux/linux_workflow.dart
+++ b/packages/flutter_tools/lib/src/linux/linux_workflow.dart
@@ -2,29 +2,34 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '../base/context.dart';
+import 'package:meta/meta.dart';
+import 'package:platform/platform.dart';
+
 import '../doctor.dart';
 import '../features.dart';
-import '../globals.dart' as globals;
-
-/// The [WindowsWorkflow] instance.
-LinuxWorkflow get linuxWorkflow => context.get<LinuxWorkflow>();
 
 /// The windows-specific implementation of a [Workflow].
 ///
 /// This workflow requires the flutter-desktop-embedding as a sibling
 /// repository to the flutter repo.
 class LinuxWorkflow implements Workflow {
-  const LinuxWorkflow();
+  const LinuxWorkflow({
+    @required Platform platform,
+    @required FeatureFlags featureFlags,
+  }) : _platform = platform,
+       _featureFlags = featureFlags;
+
+  final Platform _platform;
+  final FeatureFlags _featureFlags;
 
   @override
-  bool get appliesToHostPlatform => globals.platform.isLinux && featureFlags.isLinuxEnabled;
+  bool get appliesToHostPlatform => _platform.isLinux && _featureFlags.isLinuxEnabled;
 
   @override
-  bool get canLaunchDevices => globals.platform.isLinux && featureFlags.isLinuxEnabled;
+  bool get canLaunchDevices => _platform.isLinux && _featureFlags.isLinuxEnabled;
 
   @override
-  bool get canListDevices => globals.platform.isLinux && featureFlags.isLinuxEnabled;
+  bool get canListDevices => _platform.isLinux && _featureFlags.isLinuxEnabled;
 
   @override
   bool get canListEmulators => false;
diff --git a/packages/flutter_tools/test/general.shard/linux/linux_device_test.dart b/packages/flutter_tools/test/general.shard/linux/linux_device_test.dart
index 5bfe7b4..63a1ead 100644
--- a/packages/flutter_tools/test/general.shard/linux/linux_device_test.dart
+++ b/packages/flutter_tools/test/general.shard/linux/linux_device_test.dart
@@ -5,6 +5,7 @@
 import 'package:file/memory.dart';
 import 'package:flutter_tools/src/base/file_system.dart';
 import 'package:flutter_tools/src/build_info.dart';
+import 'package:flutter_tools/src/features.dart';
 import 'package:flutter_tools/src/linux/application_package.dart';
 import 'package:flutter_tools/src/linux/linux_device.dart';
 import 'package:flutter_tools/src/device.dart';
@@ -36,9 +37,10 @@
   });
 
   testUsingContext('LinuxDevice: no devices listed if platform unsupported', () async {
-    expect(await LinuxDevices().devices, <Device>[]);
-  }, overrides: <Type, Generator>{
-    Platform: () => notLinux,
+    expect(await LinuxDevices(
+      platform: notLinux,
+      featureFlags: featureFlags,
+    ).devices, <Device>[]);
   });
 
   testUsingContext('LinuxDevice.isSupportedForProject is true with editable host app', () async {
diff --git a/packages/flutter_tools/test/general.shard/linux/linux_workflow_test.dart b/packages/flutter_tools/test/general.shard/linux/linux_workflow_test.dart
index 5630431..389842d 100644
--- a/packages/flutter_tools/test/general.shard/linux/linux_workflow_test.dart
+++ b/packages/flutter_tools/test/general.shard/linux/linux_workflow_test.dart
@@ -2,61 +2,60 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'package:flutter_tools/src/features.dart';
-import 'package:mockito/mockito.dart';
 import 'package:platform/platform.dart';
-
+import 'package:flutter_tools/src/features.dart';
 import 'package:flutter_tools/src/linux/linux_workflow.dart';
 
 import '../../src/common.dart';
-import '../../src/context.dart';
 import '../../src/testbed.dart';
 
 void main() {
-  MockPlatform linux;
-  MockPlatform notLinux;
-  Testbed testbed;
+  final Platform linux = FakePlatform(
+    operatingSystem: 'linux',
+    environment: <String, String>{},
+  );
+  final Platform notLinux = FakePlatform(
+    operatingSystem: 'windows',
+    environment: <String, String>{},
+  );
+  final FeatureFlags enabledFlags = TestFeatureFlags(
+    isLinuxEnabled: true,
+  );
+  final FeatureFlags disabledFlags = TestFeatureFlags(isLinuxEnabled: false);
 
-  setUp(() {
-    linux = MockPlatform();
-    notLinux = MockPlatform();
-    when(linux.isLinux).thenReturn(true);
-    when(notLinux.isLinux).thenReturn(false);
-    testbed = Testbed(
-      overrides: <Type, Generator>{
-        Platform: () => linux,
-        FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: true),
-      },
+  testWithoutContext('Applies to Linux platform', () {
+    final LinuxWorkflow linuxWorkflow = LinuxWorkflow(
+      platform: linux,
+      featureFlags: enabledFlags,
     );
-  });
 
-  test('Applies to linux platform', () => testbed.run(() {
     expect(linuxWorkflow.appliesToHostPlatform, true);
     expect(linuxWorkflow.canLaunchDevices, true);
     expect(linuxWorkflow.canListDevices, true);
     expect(linuxWorkflow.canListEmulators, false);
-  }));
+  });
 
-  test('Does not apply to non-linux platform', () => testbed.run(() {
+  testWithoutContext('Does not apply to non-Linux platform', () {
+    final LinuxWorkflow linuxWorkflow = LinuxWorkflow(
+      platform: notLinux,
+      featureFlags: enabledFlags,
+    );
+
     expect(linuxWorkflow.appliesToHostPlatform, false);
     expect(linuxWorkflow.canLaunchDevices, false);
     expect(linuxWorkflow.canListDevices, false);
     expect(linuxWorkflow.canListEmulators, false);
-  }, overrides: <Type, Generator>{
-    Platform: () => notLinux,
-  }));
+  });
 
-  test('Does not apply when feature is disabled', () => testbed.run(() {
+  testWithoutContext('Does not apply when the Linux desktop feature is disabled', () {
+    final LinuxWorkflow linuxWorkflow = LinuxWorkflow(
+      platform: linux,
+      featureFlags: disabledFlags,
+    );
+
     expect(linuxWorkflow.appliesToHostPlatform, false);
     expect(linuxWorkflow.canLaunchDevices, false);
     expect(linuxWorkflow.canListDevices, false);
     expect(linuxWorkflow.canListEmulators, false);
-  }, overrides: <Type, Generator>{
-    FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: false),
-  }));
-}
-
-class MockPlatform extends Mock implements Platform {
-  @override
-  final Map<String, String> environment = <String, String>{};
+  });
 }