Unverified Commit 09bb07f8 authored by Francisco Magdaleno's avatar Francisco Magdaleno Committed by GitHub

Adds list required components when VS is not installed (#40397)

parent 18ffb0fb
...@@ -190,9 +190,10 @@ class UserMessages { ...@@ -190,9 +190,10 @@ class UserMessages {
'Visual Studio is missing necessary components. Please re-run the ' 'Visual Studio is missing necessary components. Please re-run the '
'Visual Studio installer for the "$workload" workload, and include these components:\n' 'Visual Studio installer for the "$workload" workload, and include these components:\n'
' ${components.join('\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' '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 ' String get visualStudioIsPrerelease => 'The current Visual Studio installation is a pre-release version. It may not be '
'supported by Flutter yet.'; 'supported by Flutter yet.';
String get visualStudioNotLaunchable => String get visualStudioNotLaunchable =>
......
...@@ -12,6 +12,8 @@ VisualStudioValidator get visualStudioValidator => context.get<VisualStudioValid ...@@ -12,6 +12,8 @@ VisualStudioValidator get visualStudioValidator => context.get<VisualStudioValid
class VisualStudioValidator extends DoctorValidator { class VisualStudioValidator extends DoctorValidator {
const VisualStudioValidator() : super('Visual Studio - develop for Windows'); const VisualStudioValidator() : super('Visual Studio - develop for Windows');
int get majorVersion => int.tryParse(visualStudio.fullVersion.split('.')[0]);
@override @override
Future<ValidationResult> validate() async { Future<ValidationResult> validate() async {
final List<ValidationMessage> messages = <ValidationMessage>[]; final List<ValidationMessage> messages = <ValidationMessage>[];
...@@ -46,7 +48,6 @@ class VisualStudioValidator extends DoctorValidator { ...@@ -46,7 +48,6 @@ class VisualStudioValidator extends DoctorValidator {
messages.add(ValidationMessage.error(userMessages.visualStudioNotLaunchable)); messages.add(ValidationMessage.error(userMessages.visualStudioNotLaunchable));
} else if (!visualStudio.hasNecessaryComponents) { } else if (!visualStudio.hasNecessaryComponents) {
status = ValidationType.partial; status = ValidationType.partial;
final int majorVersion = int.tryParse(visualStudio.fullVersion.split('.')[0]);
messages.add(ValidationMessage.error( messages.add(ValidationMessage.error(
userMessages.visualStudioMissingComponents( userMessages.visualStudioMissingComponents(
visualStudio.workloadDescription, visualStudio.workloadDescription,
...@@ -57,7 +58,12 @@ class VisualStudioValidator extends DoctorValidator { ...@@ -57,7 +58,12 @@ class VisualStudioValidator extends DoctorValidator {
versionInfo = '${visualStudio.displayName} ${visualStudio.displayVersion}'; versionInfo = '${visualStudio.displayName} ${visualStudio.displayVersion}';
} else { } else {
status = ValidationType.missing; 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); return ValidationResult(status, messages, statusInfo: versionInfo);
......
...@@ -26,6 +26,9 @@ void main() { ...@@ -26,6 +26,9 @@ void main() {
when(mockVisualStudio.isLaunchable).thenReturn(true); when(mockVisualStudio.isLaunchable).thenReturn(true);
when(mockVisualStudio.isRebootRequired).thenReturn(false); when(mockVisualStudio.isRebootRequired).thenReturn(false);
when(mockVisualStudio.hasNecessaryComponents).thenReturn(true); 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 { testUsingContext('Emits a message when Visual Studio is a pre-release version', () async {
...@@ -87,9 +90,6 @@ void main() { ...@@ -87,9 +90,6 @@ void main() {
testUsingContext('Emits partial status when Visual Studio is installed without necessary components', () async { testUsingContext('Emits partial status when Visual Studio is installed without necessary components', () async {
when(visualStudio.hasNecessaryComponents).thenReturn(false); 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(); const VisualStudioValidator validator = VisualStudioValidator();
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
expect(result.type, ValidationType.partial); expect(result.type, ValidationType.partial);
...@@ -109,7 +109,12 @@ void main() { ...@@ -109,7 +109,12 @@ void main() {
when(visualStudio.isInstalled).thenReturn(false); when(visualStudio.isInstalled).thenReturn(false);
const VisualStudioValidator validator = VisualStudioValidator(); const VisualStudioValidator validator = VisualStudioValidator();
final ValidationResult result = await validator.validate(); 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.messages.contains(expectedMessage), true);
expect(result.type, ValidationType.missing); expect(result.type, ValidationType.missing);
}, overrides: <Type, Generator>{ }, overrides: <Type, Generator>{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment