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

Side by Side Diff: pkg/analysis_server/test/domain_execution_test.dart

Issue 544273003: Initial support for execution domain (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixed formatting Created 6 years, 3 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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library test.domain.execution;
6
7 import 'package:analyzer/file_system/physical_file_system.dart';
8 import 'package:analysis_server/src/analysis_server.dart';
9 import 'package:analysis_server/src/constants.dart';
10 import 'package:analysis_server/src/domain_execution.dart';
11 import 'package:analysis_server/src/protocol.dart';
12 import 'mock_sdk.dart';
13 import 'package:unittest/unittest.dart';
14
15 import 'mocks.dart';
16 import 'operation/operation_queue_test.dart';
17 import 'package:typed_mock/typed_mock.dart';
18 import 'package:analyzer/src/generated/engine.dart';
19 import 'package:analyzer/src/generated/source.dart';
20
21 main() {
22 group('ExecutionDomainHandler', () {
23 AnalysisServer server;
24 ExecutionDomainHandler handler;
25
26 setUp(() {
27 server = new AnalysisServer(
28 new MockServerChannel(),
29 PhysicalResourceProvider.INSTANCE,
30 new MockPackageMapProvider(),
31 null,
32 new MockSdk());
33 handler = new ExecutionDomainHandler(server);
34 });
35
36 group('createContext/deleteContext', () {
37 test('create/delete multiple contexts', () {
38 Request request =
39 new ExecutionCreateContextParams('/a/b.dart').toRequest('0');
40 Response response = handler.handleRequest(request);
41 expect(response, isResponseSuccess('0'));
42 ExecutionCreateContextResult result =
43 new ExecutionCreateContextResult.fromResponse(response);
44 String id0 = result.id;
45
46 request = new ExecutionCreateContextParams('/c/d.dart').toRequest('1');
47 response = handler.handleRequest(request);
48 expect(response, isResponseSuccess('1'));
49 result = new ExecutionCreateContextResult.fromResponse(response);
50 String id1 = result.id;
51
52 expect(id0 == id1, isFalse);
53
54 request = new ExecutionDeleteContextParams(id0).toRequest('2');
55 response = handler.handleRequest(request);
56 expect(response, isResponseSuccess('2'));
57
58 request = new ExecutionDeleteContextParams(id1).toRequest('3');
59 response = handler.handleRequest(request);
60 expect(response, isResponseSuccess('3'));
61 });
62
63 test('delete non-existent context', () {
64 Request request = new ExecutionDeleteContextParams('13').toRequest('0');
65 Response response = handler.handleRequest(request);
66 // TODO(brianwilkerson) It isn't currently specified to be an error if a
67 // client attempts to delete a context that doesn't exist. Should it be?
68 // expect(response, isResponseFailure('0'));
69 expect(response, isResponseSuccess('0'));
70 });
71 });
72
73 group('mapUri', () {
74 String contextId;
75
76 setUp(() {
77 Request request =
78 new ExecutionCreateContextParams('/a/b.dart').toRequest('0');
79 Response response = handler.handleRequest(request);
80 expect(response, isResponseSuccess('0'));
81 ExecutionCreateContextResult result =
82 new ExecutionCreateContextResult.fromResponse(response);
83 contextId = result.id;
84 });
85
86 tearDown(() {
87 Request request =
88 new ExecutionDeleteContextParams(contextId).toRequest('1');
89 Response response = handler.handleRequest(request);
90 expect(response, isResponseSuccess('1'));
91 });
92
93 test('file to URI', () {
94 Request request =
95 new ExecutionMapUriParams(contextId, file: '/a/b.dart').toRequest('2 ');
96 Response response = handler.handleRequest(request);
97 expect(response, isResponseSuccess('2'));
98 ExecutionMapUriResult result =
99 new ExecutionMapUriResult.fromResponse(response);
100 expect(result.file, isNull);
101 expect(result.uri, isNotNull);
102 // TODO(brianwilkerson) Test for the correct result.
103 });
104
105 test('URI to file', () {
106 Request request =
107 new ExecutionMapUriParams(contextId, uri: '/a/b.dart').toRequest('3' );
108 Response response = handler.handleRequest(request);
109 expect(response, isResponseSuccess('3'));
110 ExecutionMapUriResult result =
111 new ExecutionMapUriResult.fromResponse(response);
112 expect(result.file, isNotNull);
113 expect(result.uri, isNull);
114 // TODO(brianwilkerson) Test for the correct result.
115 });
116
117 test('invalid context id', () {
118 Request request =
119 new ExecutionMapUriParams('xxx', uri: '').toRequest('4');
120 Response response = handler.handleRequest(request);
121 expect(response, isResponseFailure('4'));
122 });
123
124 test('both file and uri', () {
125 Request request =
126 new ExecutionMapUriParams('xxx', file: '', uri: '').toRequest('5');
127 Response response = handler.handleRequest(request);
128 expect(response, isResponseFailure('5'));
129 });
130 });
131
132 group('setSubscriptions', () {
133 test('failure - invalid service name', () {
134 expect(handler.launchDataListener, isNull);
135
136 Request request = new Request('0', EXECUTION_SET_SUBSCRIPTIONS, {
137 SUBSCRIPTIONS: ['noSuchService']
138 });
139 Response response = handler.handleRequest(request);
140 expect(response, isResponseFailure('0'));
141 expect(handler.launchDataListener, isNull);
142 });
143
144 test('success - setting and clearing', () {
145 expect(handler.launchDataListener, isNull);
146
147 Request request = new ExecutionSetSubscriptionsParams(
148 [ExecutionService.LAUNCH_DATA]).toRequest('0');
149 Response response = handler.handleRequest(request);
150 expect(response, isResponseSuccess('0'));
151 expect(handler.launchDataListener, isNotNull);
152
153 request = new ExecutionSetSubscriptionsParams([]).toRequest('0');
154 response = handler.handleRequest(request);
155 expect(response, isResponseSuccess('0'));
156 expect(handler.launchDataListener, isNull);
157 });
158 });
159 });
160
161 group('LaunchDataNotificationListener', () {
162 test('success - setting and clearing', () {
163 Source source1 = new TestSource('/a.dart');
164 Source source2 = new TestSource('/b.dart');
165 Source source3 = new TestSource('/c.dart');
166 Source source4 = new TestSource('/d.dart');
167 Source source5 = new TestSource('/e.html');
168 Source source6 = new TestSource('/f.html');
169 Source source7 = new TestSource('/g.html');
170 Source source8 = new TestSource('/h.dart');
171 Source source9 = new TestSource('/i.dart');
172
173 AnalysisContext context = new AnalysisContextMock();
174 when(context.launchableClientLibrarySources)
175 .thenReturn([source1, source2]);
176 when(context.launchableServerLibrarySources)
177 .thenReturn([source2, source3]);
178 when(context.librarySources).thenReturn([source4]);
179 when(context.getHtmlFilesReferencing(anyObject))
180 .thenReturn([source5, source6]);
181 when(context.htmlSources).thenReturn([source7]);
182 when(context.getLibrariesReferencedFromHtml(anyObject))
183 .thenReturn([source8, source9]);
184
185 AnalysisServer server = new AnalysisServerMock();
186 when(server.getAnalysisContexts()).thenReturn([context]);
187 bool notificationSent = false;
188 when(server.sendNotification(anyObject))
189 .thenInvoke((Notification notification) {
190 ExecutionLaunchDataParams params =
191 new ExecutionLaunchDataParams.fromNotification(notification);
192
193 List<ExecutableFile> executables = params.executables;
194 expect(executables.length, equals(3));
195 expect(
196 executables[0],
197 isExecutableFile(source1, ExecutableKind.CLIENT));
198 expect(
199 executables[1],
200 isExecutableFile(source2, ExecutableKind.EITHER));
201 expect(
202 executables[2],
203 isExecutableFile(source3, ExecutableKind.SERVER));
204
205 Map<String, List<String>> dartToHtml = params.dartToHtml;
206 expect(dartToHtml.length, equals(1));
207 List<String> htmlFiles = dartToHtml[source4.fullName];
208 expect(htmlFiles, isNotNull);
209 expect(htmlFiles.length, equals(2));
210 expect(htmlFiles[0], equals(source5.fullName));
211 expect(htmlFiles[1], equals(source6.fullName));
212
213 Map<String, List<String>> htmlToDart = params.htmlToDart;
214 expect(htmlToDart.length, equals(1));
215 List<String> dartFiles = htmlToDart[source7.fullName];
216 expect(dartFiles, isNotNull);
217 expect(dartFiles.length, equals(2));
218 expect(dartFiles[0], equals(source8.fullName));
219 expect(dartFiles[1], equals(source9.fullName));
220
221 notificationSent = true;
222 });
223 LaunchDataNotificationListener listener =
224 new LaunchDataNotificationListener(server);
225 listener.analysisComplete();
226 expect(notificationSent, isTrue);
227 });
228 });
229 }
230
231 /**
232 * A [Source] that knows it's [fullName].
233 */
234 class TestSource implements Source {
235 String fullName;
236
237 TestSource(this.fullName);
238
239 @override
240 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
241 }
242
243 /**
244 * Return a matcher that will match an [ExecutableFile] if it has the given
245 * [source] and [kind].
246 */
247 Matcher isExecutableFile(Source source, ExecutableKind kind) {
248 return new IsExecutableFile(source.fullName, kind);
249 }
250
251 /**
252 * A matcher that will match an [ExecutableFile] if it has a specified [source]
253 * and [kind].
254 */
255 class IsExecutableFile extends Matcher {
256 String expectedFile;
257 ExecutableKind expectedKind;
258
259 IsExecutableFile(this.expectedFile, this.expectedKind);
260
261 @override
262 Description describe(Description description) {
263 return description.add('ExecutableFile($expectedFile, $expectedKind)');
264 }
265
266 @override
267 bool matches(item, Map matchState) {
268 if (item is! ExecutableFile) {
269 return false;
270 }
271 ExecutableFile file = item;
272 return item.file == expectedFile && item.kind == expectedKind;
273 }
274 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/socket_server.dart ('k') | pkg/analysis_server/test/integration/integration_test_methods.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698