Adds list required components when VS is not installed (#40397)
This commit is contained in:
committed by
GitHub
parent
18ffb0fbc3
commit
09bb07f8dd
@@ -190,9 +190,10 @@ class UserMessages {
|
||||
'Visual Studio is missing necessary components. Please re-run the '
|
||||
'Visual Studio installer for the "$workload" workload, and include these components:\n'
|
||||
' ${components.join('\n ')}';
|
||||
String get visualStudioMissing =>
|
||||
String visualStudioMissing(String workload, List<String> components) =>
|
||||
'Visual Studio not installed; this is necessary for Windows development.\n'
|
||||
'Download at https://visualstudio.microsoft.com/downloads/.';
|
||||
'Download at https://visualstudio.microsoft.com/downloads/.\n'
|
||||
'Please install the "$workload" workload, including following components:\n ${components.join('\n ')}';
|
||||
String get visualStudioIsPrerelease => 'The current Visual Studio installation is a pre-release version. It may not be '
|
||||
'supported by Flutter yet.';
|
||||
String get visualStudioNotLaunchable =>
|
||||
|
||||
@@ -12,6 +12,8 @@ VisualStudioValidator get visualStudioValidator => context.get<VisualStudioValid
|
||||
class VisualStudioValidator extends DoctorValidator {
|
||||
const VisualStudioValidator() : super('Visual Studio - develop for Windows');
|
||||
|
||||
int get majorVersion => int.tryParse(visualStudio.fullVersion.split('.')[0]);
|
||||
|
||||
@override
|
||||
Future<ValidationResult> validate() async {
|
||||
final List<ValidationMessage> messages = <ValidationMessage>[];
|
||||
@@ -46,7 +48,6 @@ class VisualStudioValidator extends DoctorValidator {
|
||||
messages.add(ValidationMessage.error(userMessages.visualStudioNotLaunchable));
|
||||
} else if (!visualStudio.hasNecessaryComponents) {
|
||||
status = ValidationType.partial;
|
||||
final int majorVersion = int.tryParse(visualStudio.fullVersion.split('.')[0]);
|
||||
messages.add(ValidationMessage.error(
|
||||
userMessages.visualStudioMissingComponents(
|
||||
visualStudio.workloadDescription,
|
||||
@@ -57,7 +58,12 @@ class VisualStudioValidator extends DoctorValidator {
|
||||
versionInfo = '${visualStudio.displayName} ${visualStudio.displayVersion}';
|
||||
} else {
|
||||
status = ValidationType.missing;
|
||||
messages.add(ValidationMessage.error(userMessages.visualStudioMissing));
|
||||
messages.add(ValidationMessage.error(
|
||||
userMessages.visualStudioMissing(
|
||||
visualStudio.workloadDescription,
|
||||
visualStudio.necessaryComponentDescriptions(majorVersion)
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
return ValidationResult(status, messages, statusInfo: versionInfo);
|
||||
|
||||
@@ -26,6 +26,9 @@ void main() {
|
||||
when(mockVisualStudio.isLaunchable).thenReturn(true);
|
||||
when(mockVisualStudio.isRebootRequired).thenReturn(false);
|
||||
when(mockVisualStudio.hasNecessaryComponents).thenReturn(true);
|
||||
when(mockVisualStudio.workloadDescription).thenReturn('Desktop development');
|
||||
when(mockVisualStudio.necessaryComponentDescriptions(any)).thenReturn(<String>['A', 'B']);
|
||||
when(mockVisualStudio.fullVersion).thenReturn('15.1');
|
||||
});
|
||||
|
||||
testUsingContext('Emits a message when Visual Studio is a pre-release version', () async {
|
||||
@@ -87,9 +90,6 @@ void main() {
|
||||
|
||||
testUsingContext('Emits partial status when Visual Studio is installed without necessary components', () async {
|
||||
when(visualStudio.hasNecessaryComponents).thenReturn(false);
|
||||
when(visualStudio.workloadDescription).thenReturn('Desktop development');
|
||||
when(visualStudio.necessaryComponentDescriptions(any)).thenReturn(<String>['A', 'B']);
|
||||
when(visualStudio.fullVersion).thenReturn('15.1');
|
||||
const VisualStudioValidator validator = VisualStudioValidator();
|
||||
final ValidationResult result = await validator.validate();
|
||||
expect(result.type, ValidationType.partial);
|
||||
@@ -109,7 +109,12 @@ void main() {
|
||||
when(visualStudio.isInstalled).thenReturn(false);
|
||||
const VisualStudioValidator validator = VisualStudioValidator();
|
||||
final ValidationResult result = await validator.validate();
|
||||
final ValidationMessage expectedMessage = ValidationMessage.error(userMessages.visualStudioMissing);
|
||||
final ValidationMessage expectedMessage = ValidationMessage.error(
|
||||
userMessages.visualStudioMissing(
|
||||
visualStudio.workloadDescription,
|
||||
visualStudio.necessaryComponentDescriptions(validator.majorVersion)
|
||||
)
|
||||
);
|
||||
expect(result.messages.contains(expectedMessage), true);
|
||||
expect(result.type, ValidationType.missing);
|
||||
}, overrides: <Type, Generator>{
|
||||
|
||||
Reference in New Issue
Block a user