| // 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_testing/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(); | |
| } |