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

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

Issue 986663004: Allow sending duplicate notifications. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 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
« no previous file with comments | « pkg/analysis_server/lib/src/operation/operation_analysis.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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:analysis_server/src/analysis_server.dart'; 9 import 'package:analysis_server/src/analysis_server.dart';
10 import 'package:analysis_server/src/constants.dart'; 10 import 'package:analysis_server/src/constants.dart';
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 server.folderMap[dir] = context; 276 server.folderMap[dir] = context;
277 277
278 ContextSourcePair pair = server.getContextSourcePair(filePath); 278 ContextSourcePair pair = server.getContextSourcePair(filePath);
279 Source source = pair.source; 279 Source source = pair.source;
280 expect(pair.context, same(context)); 280 expect(pair.context, same(context));
281 expect(source, isNotNull); 281 expect(source, isNotNull);
282 expect(source.uri.scheme, 'file'); 282 expect(source.uri.scheme, 'file');
283 expect(source.fullName, filePath); 283 expect(source.fullName, filePath);
284 } 284 }
285 285
286 /**
287 * Test that having multiple analysis contexts analyze the same file doesn't
288 * cause that file to receive duplicate notifications when it's modified.
289 */
290 Future test_no_duplicate_notifications() async {
291 // Subscribe to STATUS so we'll know when analysis is done.
292 server.serverServices = [ServerService.STATUS].toSet();
293 resourceProvider.newFolder('/foo');
294 resourceProvider.newFolder('/bar');
295 resourceProvider.newFile('/foo/foo.dart', 'import "../bar/bar.dart";');
296 File bar = resourceProvider.newFile('/bar/bar.dart', 'library bar;');
297 server.setAnalysisRoots('0', ['/foo', '/bar'], [], {});
298 Map<AnalysisService, Set<String>> subscriptions =
299 <AnalysisService, Set<String>>{};
300 for (AnalysisService service in AnalysisService.VALUES) {
301 subscriptions[service] = <String>[bar.path].toSet();
302 }
303 server.setAnalysisSubscriptions(subscriptions);
304 await pumpEventQueue(100);
305 expect(server.statusAnalyzing, isFalse);
306 channel.notificationsReceived.clear();
307 server.updateContent(
308 '0', {bar.path: new AddContentOverlay('library bar; void f() {}')});
309 await pumpEventQueue(100);
310 expect(server.statusAnalyzing, isFalse);
311 expect(channel.notificationsReceived, isNotEmpty);
312 Set<String> notificationTypesReceived = new Set<String>();
313 for (Notification notification in channel.notificationsReceived) {
314 String notificationType = notification.event;
315 switch (notificationType) {
316 case 'server.status':
317 case 'analysis.errors':
318 // It's normal for these notifications to be sent multiple times.
319 break;
320 case 'analysis.outline':
321 // It's normal for this notification to be sent twice.
322 // TODO(paulberry): why?
323 break;
324 default:
325 if (!notificationTypesReceived.add(notificationType)) {
326 fail('Notification type $notificationType received more than once');
327 }
328 break;
329 }
330 }
331 }
332
333 test_operationsRemovedOnContextDisposal() async { 286 test_operationsRemovedOnContextDisposal() async {
334 resourceProvider.newFolder('/foo'); 287 resourceProvider.newFolder('/foo');
335 resourceProvider.newFile('/foo/baz.dart', 'library lib;'); 288 resourceProvider.newFile('/foo/baz.dart', 'library lib;');
336 resourceProvider.newFolder('/bar'); 289 resourceProvider.newFolder('/bar');
337 resourceProvider.newFile('/bar/baz.dart', 'library lib;'); 290 resourceProvider.newFile('/bar/baz.dart', 'library lib;');
338 server.setAnalysisRoots('0', ['/foo', '/bar'], [], {}); 291 server.setAnalysisRoots('0', ['/foo', '/bar'], [], {});
339 await pumpEventQueue(); 292 await pumpEventQueue();
340 AnalysisContext contextFoo = server.getAnalysisContext('/foo/baz.dart'); 293 AnalysisContext contextFoo = server.getAnalysisContext('/foo/baz.dart');
341 AnalysisContext contextBar = server.getAnalysisContext('/bar/baz.dart'); 294 AnalysisContext contextBar = server.getAnalysisContext('/bar/baz.dart');
342 _MockServerOperation operationFoo = new _MockServerOperation(contextFoo); 295 _MockServerOperation operationFoo = new _MockServerOperation(contextFoo);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 _MockServerOperation(this.context); 434 _MockServerOperation(this.context);
482 435
483 @override 436 @override
484 ServerOperationPriority get priority => ServerOperationPriority.ANALYSIS; 437 ServerOperationPriority get priority => ServerOperationPriority.ANALYSIS;
485 438
486 @override 439 @override
487 void perform(AnalysisServer server) { 440 void perform(AnalysisServer server) {
488 isComplete = true; 441 isComplete = true;
489 } 442 }
490 } 443 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/operation/operation_analysis.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698