// Copyright 2019 The Chromium 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/linux/linux_doctor.dart'; import 'package:mockito/mockito.dart'; import 'package:process/process.dart'; import '../../src/common.dart'; import '../../src/context.dart'; import '../../src/mocks.dart'; void main() { group(LinuxDoctorValidator, () { ProcessManager processManager; LinuxDoctorValidator linuxDoctorValidator; setUp(() { processManager = MockProcessManager(); linuxDoctorValidator = LinuxDoctorValidator(); }); testUsingContext('Returns full validation when clang++ and make are availibe', () async { when(processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async { return FakeProcessResult( stdout: 'clang version 4.0.1-10 (tags/RELEASE_401/final)\njunk', exitCode: 0, ); }); when(processManager.run(<String>[ 'make', '--version', ])).thenAnswer((_) async { return FakeProcessResult( stdout: 'GNU Make 4.1\njunk', exitCode: 0, ); }); final ValidationResult result = await linuxDoctorValidator.validate(); expect(result.type, ValidationType.installed); expect(result.messages, <ValidationMessage>[ ValidationMessage('clang++ 4.0.1'), ValidationMessage('GNU Make 4.1'), ]); }, overrides: <Type, Generator>{ ProcessManager: () => processManager, }); testUsingContext('Returns partial validation when clang++ version is too old', () async { when(processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async { return FakeProcessResult( stdout: 'clang version 2.0.1-10 (tags/RELEASE_401/final)\njunk', exitCode: 0, ); }); when(processManager.run(<String>[ 'make', '--version', ])).thenAnswer((_) async { return FakeProcessResult( stdout: 'GNU Make 4.1\njunk', exitCode: 0, ); }); final ValidationResult result = await linuxDoctorValidator.validate(); expect(result.type, ValidationType.partial); expect(result.messages, <ValidationMessage>[ ValidationMessage.error('clang++ 2.0.1 is below minimum version of 3.4.0'), ValidationMessage('GNU Make 4.1'), ]); }, overrides: <Type, Generator>{ ProcessManager: () => processManager, }); testUsingContext('Returns mising validation when make is not availible', () async { when(processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async { return FakeProcessResult( stdout: 'clang version 4.0.1-10 (tags/RELEASE_401/final)\njunk', exitCode: 0, ); }); when(processManager.run(<String>[ 'make', '--version', ])).thenAnswer((_) async { return FakeProcessResult( stdout: '', exitCode: 1, ); }); final ValidationResult result = await linuxDoctorValidator.validate(); expect(result.type, ValidationType.missing); expect(result.messages, <ValidationMessage>[ ValidationMessage('clang++ 4.0.1'), ValidationMessage.error('make is not installed'), ]); }, overrides: <Type, Generator>{ ProcessManager: () => processManager, }); testUsingContext('Returns mising validation when clang++ is not availible', () async { when(processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async { return FakeProcessResult( stdout: '', exitCode: 1, ); }); when(processManager.run(<String>[ 'make', '--version', ])).thenAnswer((_) async { return FakeProcessResult( stdout: 'GNU Make 4.1\njunk', exitCode: 0, ); }); final ValidationResult result = await linuxDoctorValidator.validate(); expect(result.type, ValidationType.missing); expect(result.messages, <ValidationMessage>[ ValidationMessage.error('clang++ is not installed'), ValidationMessage('GNU Make 4.1'), ]); }, overrides: <Type, Generator>{ ProcessManager: () => processManager, }); testUsingContext('Returns missing validation when clang and make are not availible', () async { when(processManager.run(<String>['clang++', '--version'])).thenAnswer((_) async { return FakeProcessResult( stdout: '', exitCode: 1, ); }); when(processManager.run(<String>[ 'make', '--version', ])).thenAnswer((_) async { return FakeProcessResult( stdout: '', exitCode: 1, ); }); final ValidationResult result = await linuxDoctorValidator.validate(); expect(result.type, ValidationType.missing); }, overrides: <Type, Generator>{ ProcessManager: () => processManager, }); }); } class MockProcessManager extends Mock implements ProcessManager {}