// 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:file/file.dart'; import 'package:file/memory.dart'; import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/fuchsia/fuchsia_dev_finder.dart'; import 'package:flutter_tools/src/fuchsia/fuchsia_sdk.dart'; import 'package:mockito/mockito.dart'; import 'package:process/process.dart'; import '../../src/common.dart'; import '../../src/context.dart'; void main() { MockFuchsiaArtifacts mockFuchsiaArtifacts; BufferLogger logger; MemoryFileSystem memoryFileSystem; File deviceFinder; setUp(() { mockFuchsiaArtifacts = MockFuchsiaArtifacts(); memoryFileSystem = MemoryFileSystem.test(); logger = BufferLogger.test(); deviceFinder = memoryFileSystem.file('device-finder'); when(mockFuchsiaArtifacts.devFinder).thenReturn(deviceFinder); }); group('device-finder list', () { testWithoutContext('device-finder not found', () { final FuchsiaDevFinder fuchsiaDevFinder = FuchsiaDevFinder( fuchsiaArtifacts: mockFuchsiaArtifacts, logger: logger, processManager: FakeProcessManager.any(), ); expect(() async => await fuchsiaDevFinder.list(), throwsToolExit(message: 'Fuchsia device-finder tool not found.')); }); testWithoutContext('no devices', () async { deviceFinder.createSync(); final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ FakeCommand( command: <String>[ deviceFinder.path, 'list', '-full' ], exitCode: 1, stderr: 'list.go:72: no devices found', ), ]); final FuchsiaDevFinder fuchsiaDevFinder = FuchsiaDevFinder( fuchsiaArtifacts: mockFuchsiaArtifacts, logger: logger, processManager: processManager, ); expect(await fuchsiaDevFinder.list(), isNull); expect(logger.errorText, isEmpty); }); testWithoutContext('error', () async { deviceFinder.createSync(); final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ FakeCommand( command: <String>[ deviceFinder.path, 'list', '-full' ], exitCode: 1, stderr: 'unexpected error', ), ]); final FuchsiaDevFinder fuchsiaDevFinder = FuchsiaDevFinder( fuchsiaArtifacts: mockFuchsiaArtifacts, logger: logger, processManager: processManager, ); expect(await fuchsiaDevFinder.list(), isNull); expect(logger.errorText, contains('unexpected error')); }); testWithoutContext('devices found', () async { deviceFinder.createSync(); final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ FakeCommand( command: <String>[ deviceFinder.path, 'list', '-full' ], exitCode: 0, stdout: 'device1\ndevice2', ), ]); final FuchsiaDevFinder fuchsiaDevFinder = FuchsiaDevFinder( fuchsiaArtifacts: mockFuchsiaArtifacts, logger: logger, processManager: processManager, ); expect(await fuchsiaDevFinder.list(), <String>['device1', 'device2']); expect(logger.errorText, isEmpty); }); testWithoutContext('timeout', () async { deviceFinder.createSync(); final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ FakeCommand( command: <String>[ deviceFinder.path, 'list', '-full', '-timeout', '2000ms', ], exitCode: 0, stdout: 'device1', ), ]); final FuchsiaDevFinder fuchsiaDevFinder = FuchsiaDevFinder( fuchsiaArtifacts: mockFuchsiaArtifacts, logger: logger, processManager: processManager, ); expect(await fuchsiaDevFinder.list(timeout: const Duration(seconds: 2)), <String>['device1']); }); }); } class MockFuchsiaArtifacts extends Mock implements FuchsiaArtifacts {}