Commit 306bcbde authored by Greg Spencer's avatar Greg Spencer Committed by Dan Field

Fixes terse doctor output when no devices available. (#22108)

parent f16d005d
...@@ -124,12 +124,20 @@ class Doctor { ...@@ -124,12 +124,20 @@ class Doctor {
for (DoctorValidator validator in validators) { for (DoctorValidator validator in validators) {
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
buffer.write('${result.leadingBox} ${validator.title} is '); buffer.write('${result.leadingBox} ${validator.title} is ');
if (result.type == ValidationType.missing) switch (result.type) {
case ValidationType.missing:
buffer.write('not installed.'); buffer.write('not installed.');
else if (result.type == ValidationType.partial) break;
case ValidationType.partial:
buffer.write('partially installed; more components are available.'); buffer.write('partially installed; more components are available.');
else break;
case ValidationType.notAvailable:
buffer.write('not available.');
break;
case ValidationType.installed:
buffer.write('fully installed.'); buffer.write('fully installed.');
break;
}
if (result.statusInfo != null) if (result.statusInfo != null)
buffer.write(' (${result.statusInfo})'); buffer.write(' (${result.statusInfo})');
...@@ -171,11 +179,17 @@ class Doctor { ...@@ -171,11 +179,17 @@ class Doctor {
} }
status.stop(); status.stop();
if (result.type == ValidationType.missing) { switch (result.type) {
case ValidationType.missing:
doctorResult = false; doctorResult = false;
}
if (result.type != ValidationType.installed) {
issues += 1; issues += 1;
break;
case ValidationType.partial:
case ValidationType.notAvailable:
issues += 1;
break;
case ValidationType.installed:
break;
} }
if (result.statusInfo != null) if (result.statusInfo != null)
...@@ -238,7 +252,8 @@ abstract class Workflow { ...@@ -238,7 +252,8 @@ abstract class Workflow {
enum ValidationType { enum ValidationType {
missing, missing,
partial, partial,
installed notAvailable,
installed,
} }
abstract class DoctorValidator { abstract class DoctorValidator {
...@@ -286,6 +301,7 @@ class GroupedValidator extends DoctorValidator { ...@@ -286,6 +301,7 @@ class GroupedValidator extends DoctorValidator {
mergedType = ValidationType.partial; mergedType = ValidationType.partial;
} }
break; break;
case ValidationType.notAvailable:
case ValidationType.partial: case ValidationType.partial:
mergedType = ValidationType.partial; mergedType = ValidationType.partial;
break; break;
...@@ -322,6 +338,7 @@ class ValidationResult { ...@@ -322,6 +338,7 @@ class ValidationResult {
return '[✗]'; return '[✗]';
case ValidationType.installed: case ValidationType.installed:
return '[✓]'; return '[✓]';
case ValidationType.notAvailable:
case ValidationType.partial: case ValidationType.partial:
return '[!]'; return '[!]';
} }
...@@ -600,7 +617,7 @@ class IntelliJValidatorOnMac extends IntelliJValidator { ...@@ -600,7 +617,7 @@ class IntelliJValidatorOnMac extends IntelliJValidator {
} }
class DeviceValidator extends DoctorValidator { class DeviceValidator extends DoctorValidator {
DeviceValidator() : super('Connected devices'); DeviceValidator() : super('Connected device');
@override @override
Future<ValidationResult> validate() async { Future<ValidationResult> validate() async {
...@@ -619,7 +636,7 @@ class DeviceValidator extends DoctorValidator { ...@@ -619,7 +636,7 @@ class DeviceValidator extends DoctorValidator {
} }
if (devices.isEmpty) { if (devices.isEmpty) {
return ValidationResult(ValidationType.partial, messages); return ValidationResult(ValidationType.notAvailable, messages);
} else { } else {
return ValidationResult(ValidationType.installed, messages, statusInfo: '${devices.length} available'); return ValidationResult(ValidationType.installed, messages, statusInfo: '${devices.length} available');
} }
......
...@@ -148,13 +148,16 @@ void main() { ...@@ -148,13 +148,16 @@ void main() {
'[✗] Missing Validator\n' '[✗] Missing Validator\n'
' ✗ A useful error message\n' ' ✗ A useful error message\n'
' ! A hint message\n' ' ! A hint message\n'
'[!] Not Available Validator\n'
' ✗ A useful error message\n'
' ! A hint message\n'
'[!] Partial Validator with only a Hint\n' '[!] Partial Validator with only a Hint\n'
' ! There is a hint here\n' ' ! There is a hint here\n'
'[!] Partial Validator with Errors\n' '[!] Partial Validator with Errors\n'
' ✗ A error message indicating partial installation\n' ' ✗ A error message indicating partial installation\n'
' ! Maybe a hint will help the user\n' ' ! Maybe a hint will help the user\n'
'\n' '\n'
'! Doctor found issues in 3 categories.\n' '! Doctor found issues in 4 categories.\n'
)); ));
}); });
...@@ -170,6 +173,11 @@ void main() { ...@@ -170,6 +173,11 @@ void main() {
' • A message that is not an error\n' ' • A message that is not an error\n'
' ! A hint message\n' ' ! A hint message\n'
'\n' '\n'
'[!] Not Available Validator\n'
' ✗ A useful error message\n'
' • A message that is not an error\n'
' ! A hint message\n'
'\n'
'[!] Partial Validator with only a Hint\n' '[!] Partial Validator with only a Hint\n'
' ! There is a hint here\n' ' ! There is a hint here\n'
' • But there is no error\n' ' • But there is no error\n'
...@@ -179,7 +187,7 @@ void main() { ...@@ -179,7 +187,7 @@ void main() {
' ! Maybe a hint will help the user\n' ' ! Maybe a hint will help the user\n'
' • An extra message with some verbose details\n' ' • An extra message with some verbose details\n'
'\n' '\n'
'! Doctor found issues in 3 categories.\n' '! Doctor found issues in 4 categories.\n'
)); ));
}); });
}); });
...@@ -301,6 +309,19 @@ class MissingValidator extends DoctorValidator { ...@@ -301,6 +309,19 @@ class MissingValidator extends DoctorValidator {
} }
} }
class NotAvailableValidator extends DoctorValidator {
NotAvailableValidator(): super('Not Available Validator');
@override
Future<ValidationResult> validate() async {
final List<ValidationMessage> messages = <ValidationMessage>[];
messages.add(ValidationMessage.error('A useful error message'));
messages.add(ValidationMessage('A message that is not an error'));
messages.add(ValidationMessage.hint('A hint message'));
return ValidationResult(ValidationType.notAvailable, messages);
}
}
class PartialValidatorWithErrors extends DoctorValidator { class PartialValidatorWithErrors extends DoctorValidator {
PartialValidatorWithErrors() : super('Partial Validator with Errors'); PartialValidatorWithErrors() : super('Partial Validator with Errors');
...@@ -336,6 +357,7 @@ class FakeDoctor extends Doctor { ...@@ -336,6 +357,7 @@ class FakeDoctor extends Doctor {
_validators = <DoctorValidator>[]; _validators = <DoctorValidator>[];
_validators.add(PassingValidator('Passing Validator')); _validators.add(PassingValidator('Passing Validator'));
_validators.add(MissingValidator()); _validators.add(MissingValidator());
_validators.add(NotAvailableValidator());
_validators.add(PartialValidatorWithHintsOnly()); _validators.add(PartialValidatorWithHintsOnly());
_validators.add(PartialValidatorWithErrors()); _validators.add(PartialValidatorWithErrors());
} }
......
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