Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 4f95282

Browse files
[flutter_tools] Remove shuffle from doctor test (#107744)
1 parent 6952408 commit 4f95282

File tree

2 files changed

+61
-24
lines changed

2 files changed

+61
-24
lines changed

packages/flutter_tools/lib/src/doctor.dart

+32-11
Original file line numberDiff line numberDiff line change
@@ -44,31 +44,52 @@ import 'windows/visual_studio_validator.dart';
4444
import 'windows/windows_workflow.dart';
4545

4646
abstract class DoctorValidatorsProvider {
47+
// Allow tests to construct a [_DefaultDoctorValidatorsProvider] with explicit
48+
// [FeatureFlags].
49+
factory DoctorValidatorsProvider.test({
50+
Platform? platform,
51+
required FeatureFlags featureFlags,
52+
}) {
53+
return _DefaultDoctorValidatorsProvider(
54+
featureFlags: featureFlags,
55+
platform: platform ?? FakePlatform(),
56+
);
57+
}
4758
/// The singleton instance, pulled from the [AppContext].
4859
static DoctorValidatorsProvider get _instance => context.get<DoctorValidatorsProvider>()!;
4960

50-
static final DoctorValidatorsProvider defaultInstance = _DefaultDoctorValidatorsProvider();
61+
static final DoctorValidatorsProvider defaultInstance = _DefaultDoctorValidatorsProvider(
62+
platform: globals.platform,
63+
featureFlags: featureFlags,
64+
);
5165

5266
List<DoctorValidator> get validators;
5367
List<Workflow> get workflows;
5468
}
5569

5670
class _DefaultDoctorValidatorsProvider implements DoctorValidatorsProvider {
71+
_DefaultDoctorValidatorsProvider({
72+
required this.platform,
73+
required this.featureFlags,
74+
});
75+
5776
List<DoctorValidator>? _validators;
5877
List<Workflow>? _workflows;
78+
final Platform platform;
79+
final FeatureFlags featureFlags;
5980

60-
final LinuxWorkflow linuxWorkflow = LinuxWorkflow(
61-
platform: globals.platform,
81+
late final LinuxWorkflow linuxWorkflow = LinuxWorkflow(
82+
platform: platform,
6283
featureFlags: featureFlags,
6384
);
6485

65-
final WebWorkflow webWorkflow = WebWorkflow(
66-
platform: globals.platform,
86+
late final WebWorkflow webWorkflow = WebWorkflow(
87+
platform: platform,
6788
featureFlags: featureFlags,
6889
);
6990

70-
final MacOSWorkflow macOSWorkflow = MacOSWorkflow(
71-
platform: globals.platform,
91+
late final MacOSWorkflow macOSWorkflow = MacOSWorkflow(
92+
platform: platform,
7293
featureFlags: featureFlags,
7394
);
7495

@@ -80,17 +101,17 @@ class _DefaultDoctorValidatorsProvider implements DoctorValidatorsProvider {
80101

81102
final List<DoctorValidator> ideValidators = <DoctorValidator>[
82103
if (androidWorkflow!.appliesToHostPlatform)
83-
...AndroidStudioValidator.allValidators(globals.config, globals.platform, globals.fs, globals.userMessages),
104+
...AndroidStudioValidator.allValidators(globals.config, platform, globals.fs, globals.userMessages),
84105
...IntelliJValidator.installedValidators(
85106
fileSystem: globals.fs,
86-
platform: globals.platform,
107+
platform: platform,
87108
userMessages: userMessages,
88109
plistParser: globals.plistParser,
89110
processManager: globals.processManager,
90111
),
91-
...VsCodeValidator.installedValidators(globals.fs, globals.platform, globals.processManager),
112+
...VsCodeValidator.installedValidators(globals.fs, platform, globals.processManager),
92113
];
93-
final ProxyValidator proxyValidator = ProxyValidator(platform: globals.platform);
114+
final ProxyValidator proxyValidator = ProxyValidator(platform: platform);
94115
_validators = <DoctorValidator>[
95116
FlutterValidator(
96117
fileSystem: globals.fs,

packages/flutter_tools/test/commands.shard/hermetic/doctor_test.dart

+29-13
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
// TODO(gspencergoog): Remove this tag once this test's state leaks/test
6-
// dependencies have been fixed.
7-
// https://github.com/flutter/flutter/issues/85160
8-
// Fails with "flutter test --test-randomize-ordering-seed=20210723"
9-
@Tags(<String>['no-shuffle'])
10-
115
import 'dart:async';
126

137
import 'package:args/command_runner.dart';
@@ -17,6 +11,7 @@ import 'package:flutter_tools/src/android/android_studio_validator.dart';
1711
import 'package:flutter_tools/src/android/android_workflow.dart';
1812
import 'package:flutter_tools/src/base/file_system.dart';
1913
import 'package:flutter_tools/src/base/logger.dart';
14+
import 'package:flutter_tools/src/base/platform.dart';
2015
import 'package:flutter_tools/src/base/terminal.dart';
2116
import 'package:flutter_tools/src/base/user_messages.dart';
2217
import 'package:flutter_tools/src/build_info.dart';
@@ -25,7 +20,6 @@ import 'package:flutter_tools/src/commands/doctor.dart';
2520
import 'package:flutter_tools/src/device.dart';
2621
import 'package:flutter_tools/src/doctor.dart';
2722
import 'package:flutter_tools/src/doctor_validator.dart';
28-
import 'package:flutter_tools/src/features.dart';
2923
import 'package:flutter_tools/src/globals.dart' as globals;
3024
import 'package:flutter_tools/src/reporting/reporting.dart';
3125
import 'package:flutter_tools/src/version.dart';
@@ -743,10 +737,15 @@ void main() {
743737
});
744738

745739
testUsingContext('WebWorkflow is a part of validator workflows if enabled', () async {
746-
expect(DoctorValidatorsProvider.defaultInstance.workflows,
747-
contains(isA<WebWorkflow>()));
740+
final List<Workflow> workflows = DoctorValidatorsProvider.test(
741+
featureFlags: TestFeatureFlags(isWebEnabled: true),
742+
platform: FakePlatform(),
743+
).workflows;
744+
expect(
745+
workflows,
746+
contains(isA<WebWorkflow>()),
747+
);
748748
}, overrides: <Type, Generator>{
749-
FeatureFlags: () => TestFeatureFlags(isWebEnabled: true),
750749
FileSystem: () => MemoryFileSystem.test(),
751750
ProcessManager: () => fakeProcessManager,
752751
});
@@ -769,13 +768,30 @@ void main() {
769768
}, initializeFlutterRoot: false);
770769

771770
testUsingContext('If android workflow is disabled, AndroidStudio validator is not included', () {
772-
expect(DoctorValidatorsProvider.defaultInstance.validators, isNot(contains(isA<AndroidStudioValidator>())));
773-
expect(DoctorValidatorsProvider.defaultInstance.validators, isNot(contains(isA<NoAndroidStudioValidator>())));
771+
final DoctorValidatorsProvider provider = DoctorValidatorsProvider.test(
772+
featureFlags: TestFeatureFlags(isAndroidEnabled: false),
773+
);
774+
expect(provider.validators, isNot(contains(isA<AndroidStudioValidator>())));
775+
expect(provider.validators, isNot(contains(isA<NoAndroidStudioValidator>())));
774776
}, overrides: <Type, Generator>{
775-
FeatureFlags: () => TestFeatureFlags(isAndroidEnabled: false),
777+
AndroidWorkflow: () => FakeAndroidWorkflow(appliesToHostPlatform: false),
776778
});
777779
}
778780

781+
class FakeAndroidWorkflow extends Fake implements AndroidWorkflow {
782+
FakeAndroidWorkflow({
783+
this.canListDevices = true,
784+
this.appliesToHostPlatform = true,
785+
});
786+
787+
@override
788+
final bool canListDevices;
789+
790+
@override
791+
final bool appliesToHostPlatform;
792+
}
793+
794+
779795
class NoOpDoctor implements Doctor {
780796
@override
781797
bool get canLaunchAnything => true;

0 commit comments

Comments
 (0)