blob: 3b052f52e1790bf6288738121d7e841048c14ffc [file] [log] [blame]
// Copyright (c) 2018, 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.
// @dart = 2.7
import 'dart:io';
import 'package:async_helper/async_helper.dart';
import 'package:compiler/src/commandline_options.dart';
import 'package:compiler/src/serialization/strategies.dart';
import 'package:expect/expect.dart';
import 'serialization_test_helper.dart';
main(List<String> args) {
asyncTest(() async {
Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
Directory libDir = new Directory.fromUri(Platform.script.resolve('libs'));
await checkTests(dataDir, options: [], args: args, libDirectory: libDir);
});
}
Future checkTests(Directory dataDir,
{List<String> options: const <String>[],
List<String> args: const <String>[],
Directory libDirectory: null,
bool forUserLibrariesOnly: true,
int shards: 1,
int shardIndex: 0,
void onTest(Uri uri)}) async {
args = args.toList();
bool shouldContinue = args.remove('-c');
bool continued = false;
bool hasFailures = false;
SerializationStrategy strategy = const BytesInMemorySerializationStrategy();
if (args.remove('-d')) {
strategy = const ObjectsInMemorySerializationStrategy();
}
var relativeDir = dataDir.uri.path.replaceAll(Uri.base.path, '');
print('Data dir: ${relativeDir}');
List<FileSystemEntity> entities = dataDir.listSync();
if (shards > 1) {
int start = entities.length * shardIndex ~/ shards;
int end = entities.length * (shardIndex + 1) ~/ shards;
entities = entities.sublist(start, end);
}
int testCount = 0;
for (FileSystemEntity entity in entities) {
String name = entity.uri.pathSegments.last;
if (args.isNotEmpty && !args.contains(name) && !continued) continue;
if (shouldContinue) continued = true;
testCount++;
List<String> testOptions = options.toList();
testOptions.add(Flags.dumpInfo);
if (onTest != null) {
onTest(entity.uri);
}
print('----------------------------------------------------------------');
print('Test file: ${entity.uri}');
// Pretend this is a dart2js_native test to allow use of 'native' keyword
// and import of private libraries.
String commonTestPath = 'sdk/tests/compiler';
Uri entryPoint =
Uri.parse('memory:$commonTestPath/dart2js_native/main.dart');
String mainCode = await new File.fromUri(entity.uri).readAsString();
Map<String, String> memorySourceFiles = {entryPoint.path: mainCode};
if (libDirectory != null) {
print('Supporting libraries:');
String filePrefix = name.substring(0, name.lastIndexOf('.'));
await for (FileSystemEntity libEntity in libDirectory.list()) {
String libFileName = libEntity.uri.pathSegments.last;
if (libFileName.startsWith(filePrefix)) {
print(' - libs/$libFileName');
Uri libFileUri =
Uri.parse('memory:$commonTestPath/libs/$libFileName');
String libCode = await new File.fromUri(libEntity.uri).readAsString();
memorySourceFiles[libFileUri.path] = libCode;
}
}
}
await runTest(
entryPoint: entryPoint,
memorySourceFiles: memorySourceFiles,
options: testOptions,
strategy: strategy);
}
Expect.isFalse(hasFailures, 'Errors found.');
Expect.isTrue(testCount > 0, "No files were tested.");
}