33ecec5d4f
In package:test function expect() does not want to be used outside of test() methods. So, we need a partial copy for using it in integration tesitng code, and performance benchmarks. R=paulberry@google.com, brianwilkerson@google.com BUG= Review URL: https://codereview.chromium.org/2413573003 .
79 lines
2.3 KiB
Dart
79 lines
2.3 KiB
Dart
// Copyright (c) 2015, 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 server.performance;
|
|
|
|
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import 'package:analysis_server/plugin/protocol/protocol.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import '../../test/integration/integration_tests.dart';
|
|
|
|
/**
|
|
* Base class for analysis server performance tests.
|
|
*/
|
|
abstract class AbstractAnalysisServerPerformanceTest
|
|
extends AbstractAnalysisServerIntegrationTest {
|
|
/**
|
|
* Stopwatch for timing results;
|
|
*/
|
|
Stopwatch stopwatch = new Stopwatch();
|
|
|
|
/**
|
|
* Send the server an 'analysis.setAnalysisRoots' command directing it to
|
|
* analyze [sourceDirectory].
|
|
*/
|
|
Future setAnalysisRoot() =>
|
|
sendAnalysisSetAnalysisRoots([sourceDirectory.path], []);
|
|
|
|
/**
|
|
* The server is automatically started before every test.
|
|
*/
|
|
@override
|
|
Future setUp() {
|
|
onAnalysisErrors.listen((AnalysisErrorsParams params) {
|
|
currentAnalysisErrors[params.file] = params.errors;
|
|
});
|
|
onServerError.listen((ServerErrorParams params) {
|
|
// A server error should never happen during an integration test.
|
|
fail('${params.message}\n${params.stackTrace}');
|
|
});
|
|
Completer serverConnected = new Completer();
|
|
onServerConnected.listen((_) {
|
|
outOfTestExpect(serverConnected.isCompleted, isFalse);
|
|
serverConnected.complete();
|
|
});
|
|
return startServer(checked: false).then((_) {
|
|
server.listenToOutput(dispatchNotification);
|
|
server.exitCode.then((_) {
|
|
skipShutdown = true;
|
|
});
|
|
return serverConnected.future;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* After every test, the server is stopped.
|
|
*/
|
|
Future shutdown() async => await shutdownIfNeeded();
|
|
|
|
/**
|
|
* Enable [ServerService.STATUS] notifications so that [analysisFinished]
|
|
* can be used.
|
|
*/
|
|
Future subscribeToStatusNotifications() async {
|
|
await sendServerSetSubscriptions([ServerService.STATUS]);
|
|
}
|
|
}
|
|
|
|
class AbstractTimingTest extends AbstractAnalysisServerPerformanceTest {
|
|
Future init(String source) async {
|
|
await super.setUp();
|
|
sourceDirectory = new Directory(source);
|
|
return subscribeToStatusNotifications();
|
|
}
|
|
}
|