// 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:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/process.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'; void main() { late BufferLogger logger; late FileSystem fileSystem; late Directory projectRoot; late String projectRootPath; late ProcessUtils processUtils; late MigrateUtils utils; setUpAll(() async { fileSystem = globals.localFileSystem; logger = BufferLogger.test(); utils = MigrateUtils( logger: logger, fileSystem: fileSystem, platform: globals.platform, processManager: globals.processManager, ); processUtils = ProcessUtils(processManager: globals.processManager, logger: logger); }); group('git', () { setUp(() async { projectRoot = fileSystem.systemTempDirectory.createTempSync('flutter_migrate_command_test'); projectRoot.createSync(recursive: true); projectRootPath = projectRoot.path; }); tearDown(() async { tryToDelete(projectRoot); }); testWithoutContext('isGitRepo', () async { expect(projectRoot.existsSync(), true); expect(projectRoot.childDirectory('.git').existsSync(), false); expect(await gitRepoExists(projectRootPath, logger, utils), false); expect(logger.statusText, contains('Project is not a git repo. Please initialize a git repo and try again.')); await utils.gitInit(projectRootPath); expect(projectRoot.childDirectory('.git').existsSync(), true); expect(await gitRepoExists(projectRootPath, logger, utils), true); }); testWithoutContext('printCommandText produces formatted output', () async { printCommandText('some command --help', logger); expect(logger.statusText, contains(r' $ some command --help')); }); testWithoutContext('hasUncommittedChanges false on clean repo', () async { expect(projectRoot.existsSync(), true); expect(projectRoot.childDirectory('.git').existsSync(), false); await utils.gitInit(projectRootPath); expect(projectRoot.childDirectory('.git').existsSync(), true); projectRoot.childFile('.gitignore') ..createSync() ..writeAsStringSync('ignored_file.dart', flush: true); await processUtils.run(<String>['git', 'add', '.'], workingDirectory: projectRootPath); await processUtils.run(<String>['git', 'commit', '-m', 'Initial commit'], workingDirectory: projectRootPath); expect(await hasUncommittedChanges(projectRootPath, logger, utils), false); }); testWithoutContext('hasUncommittedChanges true on dirty repo', () async { expect(projectRoot.existsSync(), true); expect(projectRoot.childDirectory('.git').existsSync(), false); await utils.gitInit(projectRootPath); expect(projectRoot.childDirectory('.git').existsSync(), true); projectRoot.childFile('some_file.dart') ..createSync() ..writeAsStringSync('void main() {}', flush: true); expect(await hasUncommittedChanges(projectRootPath, logger, utils), true); }); }); }