Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Unified Diff: pkg/analysis_server/test/analysis_server_test.dart

Issue 246603005: Use AnalysisServer.running only to track whether server has been shut down. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/test/analysis_server_test.dart
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index eeaebdf09a15f0439405c69b59304f46fa8b3a0e..a5a5b346f8e70a964b08659be4d3d641fa34fb29 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -6,6 +6,10 @@ library test.analysis_server;
import 'dart:async';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source_io.dart';
+import 'package:analyzer/src/generated/java_io.dart';
+import 'package:analyzer/src/generated/error.dart';
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/domain_server.dart';
import 'package:analysis_server/src/protocol.dart';
@@ -16,20 +20,85 @@ import 'mocks.dart';
main() {
group('AnalysisServer', () {
setUp(AnalysisServerTest.setUp);
+ test('addContextToWorkQueue_twice',
+ AnalysisServerTest.addContextToWorkQueue_twice);
+ test('addContextToWorkQueue_whenNotRunning',
+ AnalysisServerTest.addContextToWorkQueue_whenNotRunning);
+ test('addContextToWorkQueue_whenRunning',
+ AnalysisServerTest.addContextToWorkQueue_whenRunning);
test('createContext', AnalysisServerTest.createContext);
test('echo', AnalysisServerTest.echo);
+ test('performTask_whenNotRunning',
+ AnalysisServerTest.performTask_whenNotRunning);
test('shutdown', AnalysisServerTest.shutdown);
test('unknownRequest', AnalysisServerTest.unknownRequest);
});
}
+class MockAnalysisContext_withPerformAnalysisTask extends MockAnalysisContext {
+ List<AnalysisResult> results = [];
+
+ @override
+ AnalysisResult performAnalysisTask() => results.removeAt(0);
+}
+
class AnalysisServerTest {
static MockServerChannel channel;
static AnalysisServer server;
+ static MockAnalysisLogger logger;
static void setUp() {
channel = new MockServerChannel();
server = new AnalysisServer(channel);
+ logger = new MockAnalysisLogger();
+ AnalysisEngine.instance.logger = logger;
+ }
+
+ static Future addContextToWorkQueue_whenNotRunning() {
+ server.running = false;
+ MockAnalysisContext context = new MockAnalysisContext();
+ server.addContextToWorkQueue(context);
+ // Pump the event queue to make sure the server doesn't try to do any
+ // analysis.
+ return pumpEventQueue();
+ }
+
+ static Future addContextToWorkQueue_whenRunning() {
+ MockAnalysisContext_withPerformAnalysisTask context =
+ new MockAnalysisContext_withPerformAnalysisTask();
+ server.addContextToWorkQueue(context);
+ Source source = new FileBasedSource.con1(new JavaFile('/foo.dart'));
+ ChangeNoticeImpl changeNoticeImpl = new ChangeNoticeImpl(source);
+ LineInfo lineInfo = new LineInfo([0]);
+ AnalysisError analysisError = new AnalysisError.con1(source,
+ CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER, []);
+ changeNoticeImpl.setErrors([analysisError], lineInfo);
+ context.results.add(new AnalysisResult([changeNoticeImpl], 0, 'myClass', 0)
+ );
+ context.results.add(new AnalysisResult(null, 0, null, 0));
+ return pumpEventQueue().then((_) {
+ expect(context.results, isEmpty);
+ expect(channel.notificationsReceived, hasLength(2));
+ expect(channel.notificationsReceived[0].event, equals('server.connected')
+ );
+ expect(channel.notificationsReceived[1].event, equals('context.errors'));
+ expect(channel.notificationsReceived[1].params['source'], equals(
+ '102file:///foo.dart')); // Issue 18739
+ List<AnalysisError> errors =
+ channel.notificationsReceived[1].params['errors'];
+ expect(errors, hasLength(1));
+ expect(errors[0], equals(analysisError));
+ });
+ }
+
+ static Future addContextToWorkQueue_twice() {
+ // The context should only be asked to perform its analysis task once.
+ MockAnalysisContext_withPerformAnalysisTask context =
+ new MockAnalysisContext_withPerformAnalysisTask();
+ server.addContextToWorkQueue(context);
+ server.addContextToWorkQueue(context);
+ context.results.add(new AnalysisResult(null, 0, null, 0));
+ return pumpEventQueue().then((_) => expect(context.results, isEmpty));
}
static Future createContext() {
@@ -54,6 +123,18 @@ class AnalysisServerTest {
});
}
+ static Future performTask_whenNotRunning() {
+ // If the server is shut down while there is analysis still pending,
+ // performTask() should notice that the server is no longer running and
+ // do no analysis.
+ MockAnalysisContext context = new MockAnalysisContext();
+ server.addContextToWorkQueue(context);
+ server.running = false;
+ // Pump the event queue to make sure the server doesn't try to do any
+ // analysis.
+ return pumpEventQueue();
+ }
+
static Future shutdown() {
server.handlers = [new ServerDomainHandler(server)];
var request = new Request('my28', ServerDomainHandler.SHUTDOWN_METHOD);

Powered by Google App Engine
This is Rietveld 408576698