// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter_tools/src/doctor.dart'; import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:mockito/mockito.dart'; import '../../src/common.dart'; void main() { testWithoutContext('DoctorResultEvent sends usage event for each sub validator', () async { final Usage usage = MockUsage(); final GroupedValidator groupedValidator = FakeGroupedValidator([ FakeDoctorValidator('a'), FakeDoctorValidator('b'), FakeDoctorValidator('c'), ]); final ValidationResult result = await groupedValidator.validate(); final DoctorResultEvent doctorResultEvent = DoctorResultEvent( validator: groupedValidator, result: result, flutterUsage: usage, ); expect(doctorResultEvent.send, returnsNormally); verify(usage.sendEvent('doctor-result', any, label: anyNamed('label'))).called(3); }); testWithoutContext('DoctorResultEvent does not crash if a synthetic crash result was used instead' ' of validation. This happens when a grouped validator throws an exception, causing subResults to never ' ' be instantiated.', () async { final Usage usage = MockUsage(); final GroupedValidator groupedValidator = FakeGroupedValidator([ FakeDoctorValidator('a'), FakeDoctorValidator('b'), FakeDoctorValidator('c'), ]); final ValidationResult result = ValidationResult.crash(Object()); final DoctorResultEvent doctorResultEvent = DoctorResultEvent( validator: groupedValidator, result: result, flutterUsage: usage, ); expect(doctorResultEvent.send, returnsNormally); verify(usage.sendEvent('doctor-result', any, label: anyNamed('label'))).called(1); }); } class FakeGroupedValidator extends GroupedValidator { FakeGroupedValidator(List subValidators) : super(subValidators); } class FakeDoctorValidator extends DoctorValidator { FakeDoctorValidator(String title) : super(title); @override Future validate() async { return ValidationResult.crash(Object()); } } class MockUsage extends Mock implements Usage {}