| // Copyright (c) 2014, 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.=> defineTests(); |
| |
| /// This tests the benchmarks in benchmark/benchmark.test, and ensures that our |
| /// benchmarks can run. |
| library; |
| |
| import 'dart:convert'; |
| import 'dart:io'; |
| |
| import 'package:analyzer_utilities/package_root.dart'; |
| import 'package:path/path.dart' as path; |
| import 'package:test/test.dart'; |
| |
| void main() => defineTests(); |
| |
| String get _serverSourcePath { |
| return path.join(packageRoot, 'analysis_server'); |
| } |
| |
| void defineTests() { |
| group('benchmarks', () { |
| var benchmarks = _listBenchmarks(); |
| |
| test('can list', () { |
| expect(benchmarks, isNotEmpty); |
| }); |
| |
| const benchmarkIdsToSkip = { |
| 'analysis-flutter-analyze', |
| 'das-flutter', |
| 'lsp-flutter', |
| }; |
| |
| // Since these benchmarks can take a while, allow skipping with an env |
| // variable. |
| var runBenchmarks = |
| Platform.environment['TEST_SERVER_BENCHMARKS'] != 'false'; |
| var skipReason = runBenchmarks |
| ? null |
| : 'Skipped by TEST_SERVER_BENCHMARKS environment variable'; |
| |
| for (var benchmarkId in benchmarks) { |
| if (benchmarkIdsToSkip.contains(benchmarkId)) { |
| continue; |
| } |
| |
| test(benchmarkId, () { |
| var r = Process.runSync( |
| Platform.resolvedExecutable, |
| [ |
| path.join('benchmark', 'benchmarks.dart'), |
| 'run', |
| '--repeat=1', |
| '--quick', |
| benchmarkId |
| ], |
| workingDirectory: _serverSourcePath, |
| ); |
| expect(r.exitCode, 0, |
| reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}'); |
| }, skip: skipReason); |
| } |
| }); |
| } |
| |
| List<String> _listBenchmarks() { |
| var result = Process.runSync( |
| Platform.resolvedExecutable, |
| [path.join('benchmark', 'benchmarks.dart'), 'list', '--machine'], |
| workingDirectory: _serverSourcePath, |
| ); |
| var output = json.decode(result.stdout as String) as Map<Object?, Object?>; |
| var benchmarks = (output['benchmarks'] as List).cast<Map<Object?, Object?>>(); |
| return benchmarks.map((b) => b['id']).cast<String>().toList(); |
| } |