| // Copyright (c) 2024, 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. |
| |
| @TestOn('vm') |
| library; |
| |
| import 'dart:io'; |
| |
| import 'package:path/path.dart' as p; |
| import 'package:test/test.dart'; |
| |
| // Used for debugging the test. |
| const keepTempDir = false; |
| |
| void main() { |
| test("'dart fix' integration", () { |
| // create temp dir |
| final tempDir = Directory.systemTemp.createTempSync('test'); |
| |
| var sdkVersion = Platform.version; |
| if (sdkVersion.contains(' ')) { |
| sdkVersion = sdkVersion.substring(0, sdkVersion.indexOf(' ')); |
| } |
| |
| try { |
| // set up project |
| // Convert the current path to a POSIX path to avoid 'path_not_posix' lint. |
| writeFile(tempDir, 'pubspec.yaml', ''' |
| name: test_project |
| environment: |
| sdk: '^$sdkVersion' |
| dependencies: |
| web: |
| path: ${p.current.replaceAll(r'\', '/')} |
| '''); |
| final sourceFile = File(p.join('test_fixes', 'renames.dart')); |
| writeFile( |
| tempDir, |
| p.join('lib', sourceFile.name), |
| sourceFile.readAsStringSync(), |
| ); |
| |
| // run pub get |
| pubGet(tempDir); |
| |
| // dart fix |
| dartFix(tempDir); |
| |
| // verify no analysis issues |
| dartAnalyze(tempDir); |
| } finally { |
| // ignore: dead_code |
| if (keepTempDir) { |
| print('dart fix test temp dir: ${tempDir.path}'); |
| } else { |
| tempDir.deleteSync(recursive: true); |
| } |
| } |
| }); |
| } |
| |
| void writeFile(Directory dir, String filePath, String contents) { |
| final file = File(p.join(dir.path, filePath)); |
| file.parent.createSync(); |
| file.writeAsStringSync(contents); |
| } |
| |
| void pubGet(Directory dir) { |
| exec('pub', ['get'], cwd: dir); |
| } |
| |
| void dartFix(Directory dir) { |
| exec('fix', ['--apply'], cwd: dir); |
| } |
| |
| void dartAnalyze(Directory dir) { |
| exec('analyze', [], cwd: dir); |
| } |
| |
| void exec(String command, List<String> args, {required Directory cwd}) { |
| printOnFailure('dart $command ${args.join(', ')}'); |
| |
| final result = Process.runSync( |
| Platform.resolvedExecutable, |
| [command, ...args], |
| workingDirectory: cwd.path, |
| ); |
| |
| var out = result.stdout as String; |
| if (out.isNotEmpty) printOnFailure(out); |
| out = result.stderr as String; |
| if (out.isNotEmpty) printOnFailure(out); |
| |
| if (result.exitCode != 0) { |
| fail('dart $command: exitCode ${result.exitCode}'); |
| } |
| } |
| |
| extension on File { |
| String get name => p.basename(path); |
| } |