f8b363a335
Change-Id: I24016d9a827e0506b2d5a6b6eed3356afaf90dbd Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/500602 Reviewed-by: Bob Nystrom <rnystrom@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
164 lines
4.4 KiB
Dart
164 lines
4.4 KiB
Dart
// Copyright (c) 2025, 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.
|
|
|
|
import 'dart:io';
|
|
import 'package:path/path.dart' as p;
|
|
import 'package:test_runner/src/utils.dart';
|
|
|
|
void main() async {
|
|
const testNamePartsCfe = [
|
|
'language',
|
|
'compile_time_constant',
|
|
'compile_time_constant_test',
|
|
];
|
|
const testNamePartsWeb = ['web', 'extension_type_assert_error_test'];
|
|
const expectedLineCfe = 'Running CFE on 1 file...';
|
|
final expectedUpdateTextCfe = '${testNamePartsCfe.last}.dart (2 errors)';
|
|
final expectedLineCfeWeb =
|
|
'Running dart2js on ${toFileNameParts(testNamePartsCfe).join('/')}...';
|
|
|
|
final expectedLineWeb =
|
|
'Running dart2js on ${toFileNameParts(testNamePartsWeb).join('/')}...';
|
|
final expectedUpdateTextWeb = '${testNamePartsWeb.last}.dart (1 error)';
|
|
|
|
await doTest(
|
|
toFileNameParts(testNamePartsCfe),
|
|
testNamePartsCfe,
|
|
'--update=cfe',
|
|
[expectedLineCfe],
|
|
expectedUpdateTextCfe,
|
|
);
|
|
await doTest(
|
|
toFileNameParts(testNamePartsCfe),
|
|
testNamePartsCfe,
|
|
'--update=cfe,web',
|
|
[expectedLineCfe, expectedLineCfeWeb],
|
|
expectedUpdateTextCfe,
|
|
runAll: false,
|
|
);
|
|
await doTest(
|
|
toFileNameParts(testNamePartsWeb),
|
|
testNamePartsWeb,
|
|
'--update=web',
|
|
[expectedLineWeb],
|
|
expectedUpdateTextWeb,
|
|
runAll: false,
|
|
);
|
|
await doTest(
|
|
toFileNameParts(testNamePartsWeb),
|
|
testNamePartsWeb,
|
|
'--update=web,cfe',
|
|
[expectedLineCfe, expectedLineWeb],
|
|
expectedUpdateTextWeb,
|
|
runAll: false,
|
|
);
|
|
}
|
|
|
|
List<String> toFileNameParts(List<String> testNameParts) => [
|
|
'tests',
|
|
...testNameParts.take(testNameParts.length - 1),
|
|
'${testNameParts.last}.dart',
|
|
];
|
|
|
|
String toFileName(List<String> fileNameParts) => p.joinAll(fileNameParts);
|
|
|
|
Future<void> doTest(
|
|
List<String> fileNameParts,
|
|
List<String> testNameParts,
|
|
String target,
|
|
List<String> expectedLines,
|
|
String expectedUpdateText, {
|
|
bool runAll = true,
|
|
}) async {
|
|
var testFile = File(toFileName(fileNameParts));
|
|
var testContent = testFile.readAsStringSync();
|
|
try {
|
|
var errorFound = false;
|
|
|
|
var testName = testNameParts.join('/');
|
|
errorFound |= await run(
|
|
testName,
|
|
target,
|
|
expectedLines,
|
|
expectedUpdateText,
|
|
);
|
|
|
|
if (runAll) {
|
|
var relativeNativePath = p.joinAll(fileNameParts);
|
|
errorFound |= await run(
|
|
relativeNativePath,
|
|
target,
|
|
expectedLines,
|
|
expectedUpdateText,
|
|
);
|
|
|
|
var relativeUriPath = fileNameParts.join('/');
|
|
errorFound |= await run(
|
|
relativeUriPath,
|
|
target,
|
|
expectedLines,
|
|
expectedUpdateText,
|
|
);
|
|
|
|
var absoluteNativePath = File(relativeNativePath).absolute.path;
|
|
errorFound |= await run(
|
|
absoluteNativePath,
|
|
target,
|
|
expectedLines,
|
|
expectedUpdateText,
|
|
);
|
|
}
|
|
|
|
if (errorFound) {
|
|
print('----------------------------------------------------------------');
|
|
throw 'Error found!';
|
|
}
|
|
} finally {
|
|
// Restore original test content.
|
|
testFile.writeAsStringSync(testContent);
|
|
}
|
|
}
|
|
|
|
Future<bool> run(
|
|
String input,
|
|
String target,
|
|
List<String> expectedLines,
|
|
String expectedUpdateText,
|
|
) async {
|
|
const commonArguments = [
|
|
'run',
|
|
'pkg/test_runner/tool/update_static_error_tests.dart',
|
|
];
|
|
|
|
var executable = Platform.resolvedExecutable;
|
|
var arguments = [...commonArguments, target, input];
|
|
print('--------------------------------------------------------------------');
|
|
print('Running: $executable ${arguments.join(' ')}');
|
|
var process = await Process.start(executable, runInShell: true, arguments);
|
|
var lines = <String>[];
|
|
process.stdout.forEach((e) => lines.add(decodeUtf8(e)));
|
|
process.stderr.forEach((e) => lines.add(decodeUtf8(e)));
|
|
var exitCode = await process.exitCode;
|
|
var output = lines.join();
|
|
print(output);
|
|
print('Exit code: $exitCode');
|
|
|
|
var hasError = false;
|
|
for (var expectedLine in expectedLines) {
|
|
if (!output.contains(expectedLine)) {
|
|
print('Error: Expected output: $expectedLine');
|
|
hasError = true;
|
|
}
|
|
}
|
|
if (!output.contains(expectedUpdateText)) {
|
|
print('Error: Expected update: $expectedUpdateText');
|
|
hasError = true;
|
|
}
|
|
if (exitCode != 0) {
|
|
print('Error: Expected exit code: 0');
|
|
hasError = true;
|
|
}
|
|
return hasError;
|
|
}
|