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) {
final ValidationResult result = await validator.validate();
buffer.write('${result.leadingBox} ${validator.title} is ');
if (result.type == ValidationType.missing)
buffer.write('not installed.');
else if (result.type == ValidationType.partial)
buffer.write('partially installed; more components are available.');
else
buffer.write('fully installed.');
switch (result.type) {
case ValidationType.missing:
buffer.write('not installed.');
break;
case ValidationType.partial:
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)
buffer.write(' (${result.statusInfo})');
@ -171,11 +179,17 @@ class Doctor {
}
status.stop();
if (result.type == ValidationType.missing) {
doctorResult = false;
}
if (result.type != ValidationType.installed) {
issues += 1;
switch (result.type) {
case ValidationType.missing:
doctorResult = false;
issues += 1;
break;
case ValidationType.partial:
case ValidationType.notAvailable:
issues += 1;
break;
case ValidationType.installed:
break;
}
if (result.statusInfo != null)
@ -238,7 +252,8 @@ abstract class Workflow {
enum ValidationType {
missing,
partial,
installed
notAvailable,
installed,
}
abstract class DoctorValidator {
@ -286,6 +301,7 @@ class GroupedValidator extends DoctorValidator {
mergedType = ValidationType.partial;
}
break;
case ValidationType.notAvailable:
case ValidationType.partial:
mergedType = ValidationType.partial;
break;
@ -322,6 +338,7 @@ class ValidationResult {
return '[✗]';
case ValidationType.installed:
return '[✓]';
case ValidationType.notAvailable:
case ValidationType.partial:
return '[!]';
}
@ -600,7 +617,7 @@ class IntelliJValidatorOnMac extends IntelliJValidator {
}
class DeviceValidator extends DoctorValidator {
DeviceValidator() : super('Connected devices');
DeviceValidator() : super('Connected device');
@override
Future<ValidationResult> validate() async {
@ -619,7 +636,7 @@ class DeviceValidator extends DoctorValidator {
}
if (devices.isEmpty) {
return ValidationResult(ValidationType.partial, messages);
return ValidationResult(ValidationType.notAvailable, messages);
} else {
return ValidationResult(ValidationType.installed, messages, statusInfo: '${devices.length} available');
}

View file

@ -148,13 +148,16 @@ void main() {
'[✗] Missing Validator\n'
' ✗ A useful error 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'
' ! There is a hint here\n'
'[!] Partial Validator with Errors\n'
' ✗ A error message indicating partial installation\n'
' ! Maybe a hint will help the user\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 hint message\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'
' ! There is a hint here\n'
' • But there is no error\n'
@ -179,7 +187,7 @@ void main() {
' ! Maybe a hint will help the user\n'
' • An extra message with some verbose details\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 {
PartialValidatorWithErrors() : super('Partial Validator with Errors');
@ -336,6 +357,7 @@ class FakeDoctor extends Doctor {
_validators = <DoctorValidator>[];
_validators.add(PassingValidator('Passing Validator'));
_validators.add(MissingValidator());
_validators.add(NotAvailableValidator());
_validators.add(PartialValidatorWithHintsOnly());
_validators.add(PartialValidatorWithErrors());
}