| // 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/base/file_system.dart'; |
| import 'package:flutter_tools/src/base/logger.dart'; |
| import 'package:flutter_tools/src/base/platform.dart'; |
| import 'package:flutter_tools/src/base/terminal.dart'; |
| import 'package:flutter_tools/src/cache.dart'; |
| import 'package:flutter_tools/src/commands/migrate.dart'; |
| import 'package:flutter_tools/src/globals.dart' as globals; |
| import 'package:flutter_tools/src/migrate/migrate_utils.dart'; |
| |
| import '../../src/common.dart'; |
| import '../../src/context.dart'; |
| import '../../src/test_flutter_command_runner.dart'; |
| |
| void main() { |
| late FileSystem fileSystem; |
| late BufferLogger logger; |
| late Platform platform; |
| late Terminal terminal; |
| late ProcessManager processManager; |
| late Directory appDir; |
| |
| setUp(() { |
| fileSystem = globals.localFileSystem; |
| appDir = fileSystem.systemTempDirectory.createTempSync('apptestdir'); |
| logger = BufferLogger.test(); |
| platform = FakePlatform(); |
| terminal = Terminal.test(); |
| processManager = globals.processManager; |
| }); |
| |
| setUpAll(() { |
| Cache.disableLocking(); |
| }); |
| |
| tearDown(() async { |
| tryToDelete(appDir); |
| }); |
| |
| testUsingContext('abandon deletes staging directory', () async { |
| final MigrateCommand command = MigrateCommand( |
| verbose: true, |
| logger: logger, |
| fileSystem: fileSystem, |
| terminal: terminal, |
| platform: platform, |
| processManager: processManager, |
| ); |
| final Directory stagingDir = appDir.childDirectory(kDefaultMigrateStagingDirectoryName); |
| appDir.childFile('lib/main.dart').createSync(recursive: true); |
| final File pubspecOriginal = appDir.childFile('pubspec.yaml'); |
| pubspecOriginal.createSync(); |
| pubspecOriginal.writeAsStringSync(''' |
| name: originalname |
| description: A new Flutter project. |
| version: 1.0.0+1 |
| environment: |
| sdk: '>=2.18.0-58.0.dev <3.0.0' |
| dependencies: |
| flutter: |
| sdk: flutter |
| dev_dependencies: |
| flutter_test: |
| sdk: flutter |
| flutter: |
| uses-material-design: true''', flush: true); |
| |
| expect(stagingDir.existsSync(), false); |
| await createTestCommandRunner(command).run( |
| <String>[ |
| 'migrate', |
| 'abandon', |
| '--staging-directory=${stagingDir.path}', |
| '--project-directory=${appDir.path}', |
| ] |
| ); |
| expect(logger.errorText, contains('Provided staging directory')); |
| expect(logger.errorText, contains('migrate_staging_dir` does not exist or is not valid.')); |
| |
| logger.clear(); |
| await createTestCommandRunner(command).run( |
| <String>[ |
| 'migrate', |
| 'abandon', |
| '--project-directory=${appDir.path}', |
| ] |
| ); |
| expect(logger.statusText, contains('No migration in progress. Start a new migration with:')); |
| |
| final File pubspecModified = stagingDir.childFile('pubspec.yaml'); |
| pubspecModified.createSync(recursive: true); |
| pubspecModified.writeAsStringSync(''' |
| name: newname |
| description: new description of the test project |
| version: 1.0.0+1 |
| environment: |
| sdk: '>=2.18.0-58.0.dev <3.0.0' |
| dependencies: |
| flutter: |
| sdk: flutter |
| dev_dependencies: |
| flutter_test: |
| sdk: flutter |
| flutter: |
| uses-material-design: false |
| EXTRALINE''', flush: true); |
| |
| final File addedFile = stagingDir.childFile('added.file'); |
| addedFile.createSync(recursive: true); |
| addedFile.writeAsStringSync('new file contents'); |
| |
| final File manifestFile = stagingDir.childFile('.migrate_manifest'); |
| manifestFile.createSync(recursive: true); |
| manifestFile.writeAsStringSync(''' |
| merged_files: |
| - pubspec.yaml |
| conflict_files: |
| added_files: |
| - added.file |
| deleted_files: |
| '''); |
| |
| expect(appDir.childFile('lib/main.dart').existsSync(), true); |
| |
| expect(stagingDir.existsSync(), true); |
| logger.clear(); |
| await createTestCommandRunner(command).run( |
| <String>[ |
| 'migrate', |
| 'abandon', |
| '--staging-directory=${stagingDir.path}', |
| '--project-directory=${appDir.path}', |
| '--force', |
| ] |
| ); |
| expect(logger.statusText, contains('Abandon complete. Start a new migration with:')); |
| expect(stagingDir.existsSync(), false); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => fileSystem, |
| ProcessManager: () => processManager, |
| Platform: () => platform, |
| }); |
| } |