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

This commit is contained in:
Greg Spencer 2018-09-26 09:33:08 -07:00 committed by Dan Field
parent f16d005d66
commit 306bcbde8a
2 changed files with 55 additions and 16 deletions

View file

@ -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) {
buffer.write('not installed.'); case ValidationType.missing:
else if (result.type == ValidationType.partial) buffer.write('not installed.');
buffer.write('partially installed; more components are available.'); break;
else case ValidationType.partial:
buffer.write('fully installed.'); buffer.write('partially installed; more components are available.');
break;
case ValidationType.notAvailable:
buffer.write('not available.');
break;
case ValidationType.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 {
} }
status.stop(); status.stop();
if (result.type == ValidationType.missing) { switch (result.type) {
doctorResult = false; case ValidationType.missing:
} 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 {
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 {
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 {
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 {
} }
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 {
} }
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');
} }

View file

@ -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() {
' • 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() {
' ! 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 {
} }
} }
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 {
_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());
} }