blob: 82bc4973d6fedeb67b5aecbb7b4a28e8ef55bf4c [file] [log] [blame]
// 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);
}