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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library test.analysis_server; 5 library test.analysis_server;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analyzer/src/generated/engine.dart';
10 import 'package:analyzer/src/generated/source_io.dart';
11 import 'package:analyzer/src/generated/java_io.dart';
12 import 'package:analyzer/src/generated/error.dart';
9 import 'package:analysis_server/src/analysis_server.dart'; 13 import 'package:analysis_server/src/analysis_server.dart';
10 import 'package:analysis_server/src/domain_server.dart'; 14 import 'package:analysis_server/src/domain_server.dart';
11 import 'package:analysis_server/src/protocol.dart'; 15 import 'package:analysis_server/src/protocol.dart';
12 import 'package:unittest/unittest.dart'; 16 import 'package:unittest/unittest.dart';
13 17
14 import 'mocks.dart'; 18 import 'mocks.dart';
15 19
16 main() { 20 main() {
17 group('AnalysisServer', () { 21 group('AnalysisServer', () {
18 setUp(AnalysisServerTest.setUp); 22 setUp(AnalysisServerTest.setUp);
23 test('addContextToWorkQueue_twice',
24 AnalysisServerTest.addContextToWorkQueue_twice);
25 test('addContextToWorkQueue_whenNotRunning',
26 AnalysisServerTest.addContextToWorkQueue_whenNotRunning);
27 test('addContextToWorkQueue_whenRunning',
28 AnalysisServerTest.addContextToWorkQueue_whenRunning);
19 test('createContext', AnalysisServerTest.createContext); 29 test('createContext', AnalysisServerTest.createContext);
20 test('echo', AnalysisServerTest.echo); 30 test('echo', AnalysisServerTest.echo);
31 test('performTask_whenNotRunning',
32 AnalysisServerTest.performTask_whenNotRunning);
21 test('shutdown', AnalysisServerTest.shutdown); 33 test('shutdown', AnalysisServerTest.shutdown);
22 test('unknownRequest', AnalysisServerTest.unknownRequest); 34 test('unknownRequest', AnalysisServerTest.unknownRequest);
23 }); 35 });
24 } 36 }
25 37
38 class MockAnalysisContext_withPerformAnalysisTask extends MockAnalysisContext {
39 List<AnalysisResult> results = [];
40
41 @override
42 AnalysisResult performAnalysisTask() => results.removeAt(0);
43 }
44
26 class AnalysisServerTest { 45 class AnalysisServerTest {
27 static MockServerChannel channel; 46 static MockServerChannel channel;
28 static AnalysisServer server; 47 static AnalysisServer server;
48 static MockAnalysisLogger logger;
29 49
30 static void setUp() { 50 static void setUp() {
31 channel = new MockServerChannel(); 51 channel = new MockServerChannel();
32 server = new AnalysisServer(channel); 52 server = new AnalysisServer(channel);
53 logger = new MockAnalysisLogger();
54 AnalysisEngine.instance.logger = logger;
55 }
56
57 static Future addContextToWorkQueue_whenNotRunning() {
58 server.running = false;
59 MockAnalysisContext context = new MockAnalysisContext();
60 server.addContextToWorkQueue(context);
61 // Pump the event queue to make sure the server doesn't try to do any
62 // analysis.
63 return pumpEventQueue();
64 }
65
66 static Future addContextToWorkQueue_whenRunning() {
67 MockAnalysisContext_withPerformAnalysisTask context =
68 new MockAnalysisContext_withPerformAnalysisTask();
69 server.addContextToWorkQueue(context);
70 Source source = new FileBasedSource.con1(new JavaFile('/foo.dart'));
71 ChangeNoticeImpl changeNoticeImpl = new ChangeNoticeImpl(source);
72 LineInfo lineInfo = new LineInfo([0]);
73 AnalysisError analysisError = new AnalysisError.con1(source,
74 CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER, []);
75 changeNoticeImpl.setErrors([analysisError], lineInfo);
76 context.results.add(new AnalysisResult([changeNoticeImpl], 0, 'myClass', 0)
77 );
78 context.results.add(new AnalysisResult(null, 0, null, 0));
79 return pumpEventQueue().then((_) {
80 expect(context.results, isEmpty);
81 expect(channel.notificationsReceived, hasLength(2));
82 expect(channel.notificationsReceived[0].event, equals('server.connected')
83 );
84 expect(channel.notificationsReceived[1].event, equals('context.errors'));
85 expect(channel.notificationsReceived[1].params['source'], equals(
86 '102file:///foo.dart')); // Issue 18739
87 List<AnalysisError> errors =
88 channel.notificationsReceived[1].params['errors'];
89 expect(errors, hasLength(1));
90 expect(errors[0], equals(analysisError));
91 });
92 }
93
94 static Future addContextToWorkQueue_twice() {
95 // The context should only be asked to perform its analysis task once.
96 MockAnalysisContext_withPerformAnalysisTask context =
97 new MockAnalysisContext_withPerformAnalysisTask();
98 server.addContextToWorkQueue(context);
99 server.addContextToWorkQueue(context);
100 context.results.add(new AnalysisResult(null, 0, null, 0));
101 return pumpEventQueue().then((_) => expect(context.results, isEmpty));
33 } 102 }
34 103
35 static Future createContext() { 104 static Future createContext() {
36 server.handlers = [new ServerDomainHandler(server)]; 105 server.handlers = [new ServerDomainHandler(server)];
37 var request = new Request('my27', ServerDomainHandler.CREATE_CONTEXT_METHOD) ; 106 var request = new Request('my27', ServerDomainHandler.CREATE_CONTEXT_METHOD) ;
38 request.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, sdkPath); 107 request.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, sdkPath);
39 request.setParameter(ServerDomainHandler.CONTEXT_ID_PARAM, 'ctx'); 108 request.setParameter(ServerDomainHandler.CONTEXT_ID_PARAM, 'ctx');
40 return channel.sendRequest(request) 109 return channel.sendRequest(request)
41 .then((Response response) { 110 .then((Response response) {
42 expect(response.id, equals('my27')); 111 expect(response.id, equals('my27'));
43 expect(response.error, isNull); 112 expect(response.error, isNull);
44 }); 113 });
45 } 114 }
46 115
47 static Future echo() { 116 static Future echo() {
48 server.handlers = [new EchoHandler()]; 117 server.handlers = [new EchoHandler()];
49 var request = new Request('my22', 'echo'); 118 var request = new Request('my22', 'echo');
50 return channel.sendRequest(request) 119 return channel.sendRequest(request)
51 .then((Response response) { 120 .then((Response response) {
52 expect(response.id, equals('my22')); 121 expect(response.id, equals('my22'));
53 expect(response.error, isNull); 122 expect(response.error, isNull);
54 }); 123 });
55 } 124 }
56 125
126 static Future performTask_whenNotRunning() {
127 // If the server is shut down while there is analysis still pending,
128 // performTask() should notice that the server is no longer running and
129 // do no analysis.
130 MockAnalysisContext context = new MockAnalysisContext();
131 server.addContextToWorkQueue(context);
132 server.running = false;
133 // Pump the event queue to make sure the server doesn't try to do any
134 // analysis.
135 return pumpEventQueue();
136 }
137
57 static Future shutdown() { 138 static Future shutdown() {
58 server.handlers = [new ServerDomainHandler(server)]; 139 server.handlers = [new ServerDomainHandler(server)];
59 var request = new Request('my28', ServerDomainHandler.SHUTDOWN_METHOD); 140 var request = new Request('my28', ServerDomainHandler.SHUTDOWN_METHOD);
60 request.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, ''); 141 request.setParameter(ServerDomainHandler.SDK_DIRECTORY_PARAM, '');
61 return channel.sendRequest(request) 142 return channel.sendRequest(request)
62 .then((Response response) { 143 .then((Response response) {
63 expect(response.id, equals('my28')); 144 expect(response.id, equals('my28'));
64 expect(response.error, isNull); 145 expect(response.error, isNull);
65 }); 146 });
66 } 147 }
(...skipping 14 matching lines...) Expand all
81 @override 162 @override
82 Response handleRequest(Request request) { 163 Response handleRequest(Request request) {
83 if (request.method == 'echo') { 164 if (request.method == 'echo') {
84 var response = new Response(request.id); 165 var response = new Response(request.id);
85 response.setResult('echo', true); 166 response.setResult('echo', true);
86 return response; 167 return response;
87 } 168 }
88 return null; 169 return null;
89 } 170 }
90 } 171 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698