[flutter_tools] clean-ups to linux doctor test (#51593)
diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart
index 74fd16e..5babf68 100644
--- a/packages/flutter_tools/lib/src/doctor.dart
+++ b/packages/flutter_tools/lib/src/doctor.dart
@@ -81,7 +81,9 @@
fileSystem: globals.fs,
),
if (linuxWorkflow.appliesToHostPlatform)
- LinuxDoctorValidator(),
+ LinuxDoctorValidator(
+ processManager: globals.processManager,
+ ),
if (windowsWorkflow.appliesToHostPlatform)
visualStudioValidator,
if (ideValidators.isNotEmpty)
diff --git a/packages/flutter_tools/lib/src/linux/linux_doctor.dart b/packages/flutter_tools/lib/src/linux/linux_doctor.dart
index 2d5665b..edcd9f0 100644
--- a/packages/flutter_tools/lib/src/linux/linux_doctor.dart
+++ b/packages/flutter_tools/lib/src/linux/linux_doctor.dart
@@ -2,14 +2,21 @@
// 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:process/process.dart';
+
import '../base/io.dart';
import '../base/version.dart';
import '../doctor.dart';
-import '../globals.dart' as globals;
/// A validator that checks for Clang and Make build dependencies
class LinuxDoctorValidator extends DoctorValidator {
- LinuxDoctorValidator() : super('Linux toolchain - develop for Linux desktop');
+ LinuxDoctorValidator({
+ @required ProcessManager processManager,
+ }) : _processManager = processManager,
+ super('Linux toolchain - develop for Linux desktop');
+
+ final ProcessManager _processManager;
/// The minimum version of clang supported.
final Version minimumClangVersion = Version(3, 4, 0);
@@ -21,7 +28,7 @@
/// Check for a minimum version of Clang.
ProcessResult clangResult;
try {
- clangResult = await globals.processManager.run(const <String>[
+ clangResult = await _processManager.run(const <String>[
'clang++',
'--version',
]);
@@ -48,7 +55,7 @@
// a better idea about what is supported.
ProcessResult makeResult;
try {
- makeResult = await globals.processManager.run(const <String>[
+ makeResult = await _processManager.run(const <String>[
'make',
'--version',
]);
diff --git a/packages/flutter_tools/test/general.shard/linux/linux_doctor_test.dart b/packages/flutter_tools/test/general.shard/linux/linux_doctor_test.dart
index 095fcdc..69a3a20 100644
--- a/packages/flutter_tools/test/general.shard/linux/linux_doctor_test.dart
+++ b/packages/flutter_tools/test/general.shard/linux/linux_doctor_test.dart
@@ -3,157 +3,121 @@
// found in the LICENSE file.
import 'package:flutter_tools/src/doctor.dart';
-import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:flutter_tools/src/linux/linux_doctor.dart';
-import 'package:mockito/mockito.dart';
import 'package:process/process.dart';
import '../../src/common.dart';
import '../../src/context.dart';
-import '../../src/mocks.dart';
void main() {
- group(LinuxDoctorValidator, () {
- ProcessManager processManager;
- LinuxDoctorValidator linuxDoctorValidator;
+ testWithoutContext('Full validation when clang++ and Make are available',() async {
+ final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
+ const FakeCommand(
+ command: <String>['clang++', '--version'],
+ stdout: 'clang version 4.0.1-10 (tags/RELEASE_401/final)\njunk',
+ ),
+ const FakeCommand(
+ command: <String>['make', '--version'],
+ stdout: 'GNU Make 4.1\njunk',
+ ),
+ ]);
+ final DoctorValidator linuxDoctorValidator = LinuxDoctorValidator(
+ processManager: processManager,
+ );
+ final ValidationResult result = await linuxDoctorValidator.validate();
- setUp(() {
- processManager = MockProcessManager();
- linuxDoctorValidator = LinuxDoctorValidator();
- });
+ expect(result.type, ValidationType.installed);
+ expect(result.messages, <ValidationMessage>[
+ ValidationMessage('clang++ 4.0.1'),
+ ValidationMessage('GNU Make 4.1'),
+ ]);
+ });
- testUsingContext('Returns full validation when clang++ and make are availibe', () async {
- when(globals.processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: 'clang version 4.0.1-10 (tags/RELEASE_401/final)\njunk',
- exitCode: 0,
- );
- });
- when(globals.processManager.run(<String>[
- 'make',
- '--version',
- ])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: 'GNU Make 4.1\njunk',
- exitCode: 0,
- );
- });
+ testWithoutContext('Partial validation when clang++ version is too old', () async {
+ final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
+ const FakeCommand(
+ command: <String>['clang++', '--version'],
+ stdout: 'clang version 2.0.1-10 (tags/RELEASE_401/final)\njunk',
+ ),
+ const FakeCommand(
+ command: <String>['make', '--version'],
+ stdout: 'GNU Make 4.1\njunk',
+ ),
+ ]);
+ final DoctorValidator linuxDoctorValidator = LinuxDoctorValidator(
+ processManager: processManager,
+ );
+ final ValidationResult result = await linuxDoctorValidator.validate();
- final ValidationResult result = await linuxDoctorValidator.validate();
- expect(result.type, ValidationType.installed);
- expect(result.messages, <ValidationMessage>[
- ValidationMessage('clang++ 4.0.1'),
- ValidationMessage('GNU Make 4.1'),
- ]);
- }, overrides: <Type, Generator>{
- ProcessManager: () => processManager,
- });
+ expect(result.type, ValidationType.partial);
+ expect(result.messages, <ValidationMessage>[
+ ValidationMessage.error('clang++ 2.0.1 is below minimum version of 3.4.0'),
+ ValidationMessage('GNU Make 4.1'),
+ ]);
+ });
- testUsingContext('Returns partial validation when clang++ version is too old', () async {
- when(globals.processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: 'clang version 2.0.1-10 (tags/RELEASE_401/final)\njunk',
- exitCode: 0,
- );
- });
- when(globals.processManager.run(<String>[
- 'make',
- '--version',
- ])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: 'GNU Make 4.1\njunk',
- exitCode: 0,
- );
- });
+ testWithoutContext('Missing validation when Make is not available', () async {
+ final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
+ const FakeCommand(
+ command: <String>['clang++', '--version'],
+ stdout: 'clang version 4.0.1-10 (tags/RELEASE_401/final)\njunk',
+ ),
+ const FakeCommand(
+ command: <String>['make', '--version'],
+ exitCode: 1,
+ ),
+ ]);
+ final DoctorValidator linuxDoctorValidator = LinuxDoctorValidator(
+ processManager: processManager,
+ );
+ final ValidationResult result = await linuxDoctorValidator.validate();
- final ValidationResult result = await linuxDoctorValidator.validate();
- expect(result.type, ValidationType.partial);
- expect(result.messages, <ValidationMessage>[
- ValidationMessage.error('clang++ 2.0.1 is below minimum version of 3.4.0'),
- ValidationMessage('GNU Make 4.1'),
- ]);
- }, overrides: <Type, Generator>{
- ProcessManager: () => processManager,
- });
+ expect(result.type, ValidationType.missing);
+ expect(result.messages, <ValidationMessage>[
+ ValidationMessage('clang++ 4.0.1'),
+ ValidationMessage.error('make is not installed'),
+ ]);
+ });
- testUsingContext('Returns mising validation when make is not availible', () async {
- when(globals.processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: 'clang version 4.0.1-10 (tags/RELEASE_401/final)\njunk',
- exitCode: 0,
- );
- });
- when(globals.processManager.run(<String>[
- 'make',
- '--version',
- ])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: '',
- exitCode: 1,
- );
- });
+ testWithoutContext('Missing validation when clang++ is not available', () async {
+ final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
+ const FakeCommand(
+ command: <String>['clang++', '--version'],
+ exitCode: 1
+ ),
+ const FakeCommand(
+ command: <String>['make', '--version'],
+ stdout: 'GNU Make 4.1\njunk'
+ ),
+ ]);
+ final DoctorValidator linuxDoctorValidator = LinuxDoctorValidator(
+ processManager: processManager,
+ );
+ final ValidationResult result = await linuxDoctorValidator.validate();
- final ValidationResult result = await linuxDoctorValidator.validate();
- expect(result.type, ValidationType.missing);
- expect(result.messages, <ValidationMessage>[
- ValidationMessage('clang++ 4.0.1'),
- ValidationMessage.error('make is not installed'),
- ]);
- }, overrides: <Type, Generator>{
- ProcessManager: () => processManager,
- });
+ expect(result.type, ValidationType.missing);
+ expect(result.messages, <ValidationMessage>[
+ ValidationMessage.error('clang++ is not installed'),
+ ValidationMessage('GNU Make 4.1'),
+ ]);
+ });
- testUsingContext('Returns mising validation when clang++ is not availible', () async {
- when(globals.processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: '',
- exitCode: 1,
- );
- });
- when(globals.processManager.run(<String>[
- 'make',
- '--version',
- ])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: 'GNU Make 4.1\njunk',
- exitCode: 0,
- );
- });
+ testWithoutContext('Missing validation when clang++ and Make are not available', () async {
+ final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
+ const FakeCommand(
+ command: <String>['clang++', '--version'],
+ exitCode: 1,
+ ),
+ const FakeCommand(
+ command: <String>['make', '--version'],
+ exitCode: 1,
+ ),
+ ]);
+ final DoctorValidator linuxDoctorValidator = LinuxDoctorValidator(
+ processManager: processManager,
+ );
- final ValidationResult result = await linuxDoctorValidator.validate();
- expect(result.type, ValidationType.missing);
- expect(result.messages, <ValidationMessage>[
- ValidationMessage.error('clang++ is not installed'),
- ValidationMessage('GNU Make 4.1'),
- ]);
- }, overrides: <Type, Generator>{
- ProcessManager: () => processManager,
- });
-
-
- testUsingContext('Returns missing validation when clang and make are not availible', () async {
- when(globals.processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: '',
- exitCode: 1,
- );
- });
- when(globals.processManager.run(<String>[
- 'make',
- '--version',
- ])).thenAnswer((_) async {
- return FakeProcessResult(
- stdout: '',
- exitCode: 1,
- );
- });
-
- final ValidationResult result = await linuxDoctorValidator.validate();
- expect(result.type, ValidationType.missing);
- }, overrides: <Type, Generator>{
- ProcessManager: () => processManager,
- });
+ final ValidationResult result = await linuxDoctorValidator.validate();
+ expect(result.type, ValidationType.missing);
});
}
-
-class MockProcessManager extends Mock implements ProcessManager {}