in tool/fuzz_driver.dart [45:116]
Future<void> main(List<String> args) async {
if (args.isEmpty) {
print('''
Usage: slow_test path_to_test_collection
[seed = 0]
[mutations per iteration = 2]
[iterations = 5]
[name of command to test = ALL]
[dump server communications = false]''');
io.exit(1);
}
// TODO: Replace this with args package.
var seed = 0;
final testCollectionRoot = args[0];
if (args.length >= 2) seed = int.parse(args[1]);
if (args.length >= 3) maxMutations = int.parse(args[2]);
if (args.length >= 4) iterations = int.parse(args[3]);
if (args.length >= 5) commandToRun = args[4];
if (args.length >= 6) dumpServerComms = args[5].toLowerCase() == 'true';
// Load the list of files.
var fileEntities = <io.FileSystemEntity>[];
if (io.FileSystemEntity.isDirectorySync(testCollectionRoot)) {
final dir = io.Directory(testCollectionRoot);
fileEntities = dir.listSync(recursive: true);
} else {
fileEntities = [io.File(testCollectionRoot)];
}
analysis_server.dumpServerMessages = false;
var counter = 0;
final sw = Stopwatch()..start();
print('About to setuptools');
final sdk = Sdk.create(stableChannel);
print(sdk.dartSdkPath);
// Warm up the services.
await setupTools(sdk);
print('Setup tools done');
// Main testing loop.
for (final fse in fileEntities) {
counter++;
if (!fse.path.endsWith('.dart')) continue;
try {
print('Seed: $seed, '
'${((counter / fileEntities.length) * 100).toStringAsFixed(2)}%, '
'Elapsed: ${sw.elapsed}');
random = Random(seed);
seed++;
await testPath(fse.path, analysisServer!, compiler);
} catch (e) {
print(e);
print('FAILED: ${fse.path}');
// Try and re-cycle the services for the next test after the crash
await setupTools(sdk);
}
}
print('Shutting down');
await analysisServer!.shutdown();
await commonServerImpl.shutdown();
}