efe0ddccab
Change-Id: I5eacb92ea6ce00d83b3440a473cca8dad0892a87 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/197165 Reviewed-by: Dmitry Stefantsov <dmitryas@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
53 lines
1.6 KiB
Dart
53 lines
1.6 KiB
Dart
// Copyright (c) 2016, 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.
|
|
|
|
library kernel.batch_util;
|
|
|
|
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
enum CompilerOutcome {
|
|
Ok,
|
|
Fail,
|
|
}
|
|
|
|
typedef Future<CompilerOutcome> BatchCallback(List<String> arguments);
|
|
|
|
/// Runs the given [callback] in the batch mode for use by the test framework in
|
|
/// `dart-lang/sdk`.
|
|
///
|
|
/// The [callback] should behave as a main method, except it should return a
|
|
/// [CompilerOutcome] for reporting its outcome to the testing framework.
|
|
Future runBatch(BatchCallback callback) async {
|
|
int totalTests = 0;
|
|
int testsFailed = 0;
|
|
Stopwatch watch = new Stopwatch()..start();
|
|
print('>>> BATCH START');
|
|
Stream input = stdin.transform(utf8.decoder).transform(new LineSplitter());
|
|
await for (String line in input) {
|
|
if (line.isEmpty) {
|
|
int time = watch.elapsedMilliseconds;
|
|
print('>>> BATCH END '
|
|
'(${totalTests - testsFailed})/$totalTests ${time}ms');
|
|
break;
|
|
}
|
|
++totalTests;
|
|
List<String> arguments = line.split(new RegExp(r'\s+'));
|
|
try {
|
|
CompilerOutcome outcome = await callback(arguments);
|
|
stderr.writeln('>>> EOF STDERR');
|
|
if (outcome == CompilerOutcome.Ok) {
|
|
print('>>> TEST PASS ${watch.elapsedMilliseconds}ms');
|
|
} else {
|
|
print('>>> TEST FAIL ${watch.elapsedMilliseconds}ms');
|
|
}
|
|
} catch (e, stackTrace) {
|
|
stderr.writeln(e);
|
|
stderr.writeln(stackTrace);
|
|
stderr.writeln('>>> EOF STDERR');
|
|
print('>>> TEST CRASH');
|
|
}
|
|
}
|
|
}
|