Make testBenchmarks() synchronous. (#1499)
This avoids calling group() after an async pause, which breaks running
short_format_test.dart and tall_format_test.dart outside of the test
runner.
diff --git a/benchmark/run.dart b/benchmark/run.dart
index 6e8a1a9..d4b4157 100644
--- a/benchmark/run.dart
+++ b/benchmark/run.dart
@@ -16,6 +16,7 @@
import 'package:dart_style/src/profile.dart';
import 'package:dart_style/src/short/source_visitor.dart';
import 'package:dart_style/src/testing/benchmark.dart';
+import 'package:dart_style/src/testing/test_file.dart';
import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
@@ -71,9 +72,7 @@
}
}
- if (_runWarmupTrials) {
- await _warmUp();
- }
+ if (_runWarmupTrials) _warmUp();
var results = <(Benchmark, List<double>)>[];
for (var benchmark in benchmarks) {
@@ -110,8 +109,8 @@
/// Since the benchmarks are run on the VM, JIT warm-up has a large impact on
/// performance. Warming up the VM gives it time for the optimized compiler to
/// kick in.
-Future<void> _warmUp() async {
- var benchmark = await Benchmark.read('benchmark/case/large.unit');
+void _warmUp() {
+ var benchmark = Benchmark.read('benchmark/case/large.unit');
_runTrials('Warming up', benchmark, _warmUpTrials);
}
@@ -209,16 +208,14 @@
var benchmarks = switch (argResults.rest) {
// Find all the benchmarks.
- ['all'] => await Benchmark.findAll(),
+ ['all'] => Benchmark.findAll(await findPackageDirectory()),
// Default to the large benchmark.
- [] => [
- await Benchmark.read(p.join(_benchmarkDirectory, 'case/large.unit'))
- ],
+ [] => [Benchmark.read(p.join(_benchmarkDirectory, 'case/large.unit'))],
// The user-specified list of paths.
[...var paths] when paths.isNotEmpty => [
- for (var path in paths) await Benchmark.read(path)
+ for (var path in paths) Benchmark.read(path)
],
_ => _usage(argParser, exitCode: 64),
};
diff --git a/lib/src/testing/benchmark.dart b/lib/src/testing/benchmark.dart
index e86d9d7..92f07fb 100644
--- a/lib/src/testing/benchmark.dart
+++ b/lib/src/testing/benchmark.dart
@@ -6,18 +6,15 @@
import 'package:path/path.dart' as p;
-import 'test_file.dart';
-
class Benchmark {
- /// Finds all of the benchmarks in the `benchmark/cases` directory.
- static Future<List<Benchmark>> findAll() async {
- var casesDirectory =
- Directory(p.join(await findPackageDirectory(), 'benchmark/case'));
+ /// Finds all of the benchmarks in the `benchmark/cases` directory, relative
+ /// to [packageDirectory].
+ static List<Benchmark> findAll(String packageDirectory) {
+ var casesDirectory = Directory(p.join(packageDirectory, 'benchmark/case'));
var benchmarks = [
for (var entry in casesDirectory.listSync())
- if (p.extension(entry.path) case '.unit' || '.stmt')
- await read(entry.path)
+ if (p.extension(entry.path) case '.unit' || '.stmt') read(entry.path)
];
benchmarks.sort((a, b) => a.name.compareTo(b.name));
@@ -30,8 +27,8 @@
/// This should point to a `.unit` or `.stmt` file that has a corresponding
/// `.expect` and `expect_short` file in the same directory with those
/// expectations.
- static Future<Benchmark> read(String path) async {
- var inputLines = await File(path).readAsLines();
+ static Benchmark read(String path) {
+ var inputLines = File(path).readAsLinesSync();
// The first line may have a "|" to indicate the page width.
var pageWidth = 80;
@@ -43,8 +40,8 @@
var input = inputLines.join('\n');
var shortOutput =
- await File(p.setExtension(path, '.expect_short')).readAsString();
- var tallOutput = await File(p.setExtension(path, '.expect')).readAsString();
+ File(p.setExtension(path, '.expect_short')).readAsStringSync();
+ var tallOutput = File(p.setExtension(path, '.expect')).readAsStringSync();
return Benchmark(
name: p.basenameWithoutExtension(path),
diff --git a/test/utils.dart b/test/utils.dart
index c5b41b0..0f7007c 100644
--- a/test/utils.dart
+++ b/test/utils.dart
@@ -142,7 +142,7 @@
/// Format all of the benchmarks and ensure they produce their expected outputs.
Future<void> testBenchmarks({required bool useTallStyle}) async {
- var benchmarks = await Benchmark.findAll();
+ var benchmarks = Benchmark.findAll(await findPackageDirectory());
group('Benchmarks', () {
for (var benchmark in benchmarks) {