// Copyright 2013 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:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:file/memory.dart'; import 'package:flutter_plugin_tools/src/common/core.dart'; import 'package:flutter_plugin_tools/src/fix_command.dart'; import 'package:test/test.dart'; import 'mocks.dart'; import 'util.dart'; void main() { late FileSystem fileSystem; late MockPlatform mockPlatform; late Directory packagesDir; late RecordingProcessRunner processRunner; late CommandRunner runner; setUp(() { fileSystem = MemoryFileSystem(); mockPlatform = MockPlatform(); packagesDir = createPackagesDirectory(fileSystem: fileSystem); processRunner = RecordingProcessRunner(); final FixCommand command = FixCommand( packagesDir, processRunner: processRunner, platform: mockPlatform, ); runner = CommandRunner('fix_command', 'Test for fix_command'); runner.addCommand(command); }); test('runs fix in top-level packages and subpackages', () async { final RepositoryPackage package = createFakePackage('a', packagesDir); final RepositoryPackage plugin = createFakePlugin('b', packagesDir); await runCapturingPrint(runner, ['fix']); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall('dart', const ['fix', '--apply'], package.path), ProcessCall('dart', const ['fix', '--apply'], package.getExamples().first.path), ProcessCall('dart', const ['fix', '--apply'], plugin.path), ProcessCall('dart', const ['fix', '--apply'], plugin.getExamples().first.path), ])); }); test('fails if "dart fix" fails', () async { createFakePlugin('foo', packagesDir); processRunner.mockProcessesForExecutable['dart'] = [ FakeProcessInfo(MockProcess(exitCode: 1), ['fix']), ]; Error? commandError; final List output = await runCapturingPrint(runner, ['fix'], errorHandler: (Error e) { commandError = e; }); expect(commandError, isA()); expect( output, containsAllInOrder([ contains('Unable to automatically fix package.'), ]), ); }); }