// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. /// A set of integration tests for `dart migrate`. import 'package:test/test.dart'; import '../utils.dart'; void main() { group('migrate', defineMigrateTests, timeout: longTimeout); } void defineMigrateTests() { final runPubGet = contains('Run `dart pub get`'); final setLowerSdkConstraint = contains('Set the lower SDK constraint'); TestProject p; tearDown(() => p?.dispose()); test('--help', () { p = project(); var result = p.runSync(['migrate', '--help']); expect(result.exitCode, 0); expect(result.stderr, isEmpty); expect( result.stdout, contains('Perform null safety migration on a project.')); expect(result.stdout, contains('Usage: dart migrate [arguments] [project or directory]')); }); test('directory implicit', () { p = project(mainSrc: dartVersionFilePrefix2_9 + 'int get foo => 1;\n'); var result = p.runSync(['migrate', '--no-web-preview'], workingDir: p.dirPath); expect(result.exitCode, 0); expect(result.stderr, isEmpty); expect(result.stdout, contains('Generating migration suggestions')); }); test('directory explicit', () { p = project(mainSrc: dartVersionFilePrefix2_9 + 'int get foo => 1;\n'); var result = p.runSync(['migrate', '--no-web-preview', p.dirPath]); expect(result.exitCode, 0); expect(result.stderr, isEmpty); expect(result.stdout, contains('Generating migration suggestions')); }); test('bad directory', () { p = project(mainSrc: 'int get foo => 1;\n'); var result = p.runSync(['migrate', 'foo_bar_dir']); expect(result.exitCode, 1); expect(result.stderr, contains('foo_bar_dir does not exist')); expect(result.stdout, isEmpty); }); test('pub get needs running', () { p = project(mainSrc: 'import "package:foo/foo.dart";\n'); var result = p.runSync(['migrate', p.dirPath]); expect(result.exitCode, 1); expect(result.stderr, isEmpty); expect(result.stdout, runPubGet); expect(result.stdout, isNot(setLowerSdkConstraint)); }); test('non-pub-related error', () { p = project(mainSrc: 'var missing = "semicolon"\n'); var result = p.runSync(['migrate', p.dirPath]); expect(result.exitCode, 1); expect(result.stderr, isEmpty); expect(result.stdout, runPubGet); expect(result.stdout, setLowerSdkConstraint); }); }