Index: pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart |
diff --git a/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart b/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart |
index fd50e1364040614ff0158e9da8141002c7754bcd..fd29981882f4b588a43e42e539cb56b19190987a 100644 |
--- a/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart |
+++ b/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart |
@@ -7,43 +7,76 @@ library server.performance.analysis.timing; |
import 'dart:async'; |
import 'dart:io'; |
+import 'package:analysis_server/src/protocol.dart'; |
import 'package:args/args.dart'; |
import 'package:test_reflective_loader/test_reflective_loader.dart'; |
+import 'package:unittest/unittest.dart'; |
import '../../test/utils.dart'; |
import 'performance_tests.dart'; |
-const String SOURCE_OPTION = 'source'; |
- |
/** |
- * Pass in the directory of the source to be analyzed as option --source |
+ * Pass in the directory of the source to be analyzed as option `--source`, |
+ * optionally specify a priority file with `--priority` and the specific |
+ * test to run with `--test`. If no test is specified, the default is |
+ * `analysis`. |
*/ |
-main(List<String> arguements) { |
+main(List<String> arguments) { |
initializeTestEnvironment(); |
ArgParser parser = _createArgParser(); |
- var args = parser.parse(arguements); |
+ var args = parser.parse(arguments); |
if (args[SOURCE_OPTION] == null) { |
print('path to source directory must be specified'); |
exit(1); |
} |
source = args[SOURCE_OPTION]; |
- defineReflectiveTests(AnalysisTimingIntegrationTest); |
+ priorityFile = args[PRIORITY_FILE_OPTION]; |
+ testName = args[TEST_NAME_OPTION] ?? DEFAULT_TEST; |
+ |
+ switch (testName) { |
+ case 'analysis': |
+ defineReflectiveTests(AnalysisTimingIntegrationTest); |
+ break; |
+ case 'navigation': |
+ defineReflectiveTests(NavigationTimingIntegrationTest); |
+ break; |
+ default: |
+ print('unrecognized test name $testName'); |
+ exit(1); |
+ } |
} |
+const DEFAULT_TEST = 'analysis'; |
+const PRIORITY_FILE_OPTION = 'priority'; |
+const SOURCE_OPTION = 'source'; |
+const TEST_NAME_OPTION = 'test'; |
+ |
+String priorityFile; |
String source; |
+String testName; |
+ |
+ArgParser _createArgParser() => new ArgParser() |
+ ..addOption(TEST_NAME_OPTION, help: 'test name (defaults to `analysis`)') |
+ ..addOption(SOURCE_OPTION, help: 'full path to source directory for analysis') |
+ ..addOption(PRIORITY_FILE_OPTION, |
+ help: '(optional) full path to a priority file'); |
+ |
+class AbstractTimingTest extends AbstractAnalysisServerPerformanceTest { |
+ @override |
+ Future setUp() => super.setUp().then((_) { |
+ sourceDirectory = new Directory(source); |
+ subscribeToStatusNotifications(); |
+ }); |
+} |
@reflectiveTest |
-class AnalysisTimingIntegrationTest |
- extends AbstractAnalysisServerPerformanceTest { |
+class AnalysisTimingIntegrationTest extends AbstractTimingTest { |
test_detect_analysis_done() { |
- sourceDirectory = new Directory(source); |
- subscribeToStatusNotifications(); |
- return _runAndTimeAnalysis(); |
- } |
- |
- Future _runAndTimeAnalysis() { |
stopwatch.start(); |
setAnalysisRoot(); |
+ if (priorityFile != null) { |
+ sendAnalysisSetPriorityFiles([priorityFile]); |
+ } |
return analysisFinished.then((_) { |
print('analysis completed in ${stopwatch.elapsed}'); |
stopwatch.reset(); |
@@ -51,9 +84,27 @@ class AnalysisTimingIntegrationTest |
} |
} |
-ArgParser _createArgParser() { |
- ArgParser parser = new ArgParser(); |
- parser.addOption('source', |
- help: 'full path to source directory for analysis'); |
- return parser; |
+@reflectiveTest |
+class NavigationTimingIntegrationTest extends AbstractTimingTest { |
+ Future test_detect_navigation_done() { |
+ expect(priorityFile, isNotNull); |
+ stopwatch.start(); |
+ |
+ Duration elapsed; |
+ onAnalysisNavigation.listen((AnalysisNavigationParams params) { |
+ elapsed = stopwatch.elapsed; |
+ }); |
+ |
+ setAnalysisRoot(); |
+ sendAnalysisSetSubscriptions({ |
+ AnalysisService.NAVIGATION: [priorityFile] |
+ }); |
+ |
+ sendAnalysisSetPriorityFiles([priorityFile]); |
+ |
+ return analysisFinished.then((_) { |
+ print('navigation completed in ${elapsed}'); |
+ stopwatch.reset(); |
+ }); |
+ } |
} |