// 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:args/command_runner.dart'; import 'package:conductor_core/src/clean.dart'; import 'package:conductor_core/src/repository.dart'; import 'package:file/file.dart'; import 'package:file/memory.dart'; import 'package:platform/platform.dart'; import './common.dart'; void main() { group( 'clean command', () { const String flutterRoot = '/flutter'; const String checkoutsParentDirectory = '$flutterRoot/dev/tools/'; const String stateFilePath = '/state-file.json'; late MemoryFileSystem fileSystem; late FakePlatform platform; late TestStdio stdio; late FakeProcessManager processManager; late CommandRunner runner; setUp(() { stdio = TestStdio(); fileSystem = MemoryFileSystem.test(); final String operatingSystem = const LocalPlatform().operatingSystem; final String pathSeparator = operatingSystem == 'windows' ? r'\' : '/'; processManager = FakeProcessManager.empty(); platform = FakePlatform( environment: {'HOME': '/path/to/user/home'}, pathSeparator: pathSeparator, ); final Checkouts checkouts = Checkouts( fileSystem: fileSystem, parentDirectory: fileSystem.directory(checkoutsParentDirectory), platform: platform, processManager: processManager, stdio: stdio, ); final CleanCommand command = CleanCommand(checkouts: checkouts); runner = CommandRunner('clean-test', '')..addCommand(command); }); test('throws if no state file found', () async { await expectLater( () async => runner.run(['clean', '--$kStateOption', stateFilePath, '--$kYesFlag']), throwsExceptionWith('No persistent state file found at $stateFilePath'), ); }); test('deletes an empty state file', () async { final File stateFile = fileSystem.file(stateFilePath); stateFile.writeAsStringSync(''); await runner.run(['clean', '--$kStateOption', stateFile.path, '--$kYesFlag']); expect(stateFile.existsSync(), false); }); test('deletes a state file with content', () async { final File stateFile = fileSystem.file(stateFilePath); stateFile.writeAsStringSync('{status: pending}'); await runner.run(['clean', '--$kStateOption', stateFile.path, '--$kYesFlag']); expect(stateFile.existsSync(), false); }); }, onPlatform: { 'windows': const Skip('Flutter Conductor only supported on macos/linux'), }, ); }