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

Side by Side Diff: pkg/analysis_server/test/analysis/notification_implemented_test.dart

Issue 1374943005: Fix for 'implemented' notification after an incremental change. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Put new content into 'testCode'. Created 5 years, 2 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
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/incremental_resolver.dart » ('j') | 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.notification.implemented; 5 library test.analysis.notification.implemented;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/constants.dart'; 9 import 'package:analysis_server/src/constants.dart';
10 import 'package:analysis_server/src/protocol.dart'; 10 import 'package:analysis_server/src/protocol.dart';
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 ' in $implementedMembers'); 83 ' in $implementedMembers');
84 } 84 }
85 } 85 }
86 } 86 }
87 87
88 @override 88 @override
89 Index createIndex() { 89 Index createIndex() {
90 return createLocalMemoryIndex(); 90 return createLocalMemoryIndex();
91 } 91 }
92 92
93 /**
94 * Subscribe for `IMPLEMENTED` and wait to the notification.
Brian Wilkerson 2015/09/30 18:05:16 nit: "to" --> "for"
95 */
93 Future prepareImplementedElements() { 96 Future prepareImplementedElements() {
94 addAnalysisSubscription(AnalysisService.IMPLEMENTED, testFile); 97 subscribeForImplemented();
95 Future waitForNotification(int times) { 98 return waitForImplementedElements();
96 if (times == 0 || implementedClasses != null) {
97 return new Future.value();
98 }
99 return new Future.delayed(
100 Duration.ZERO, () => waitForNotification(times - 1));
101 }
102 return waitForNotification(100);
103 } 99 }
104 100
105 void processNotification(Notification notification) { 101 void processNotification(Notification notification) {
106 if (notification.event == ANALYSIS_IMPLEMENTED) { 102 if (notification.event == ANALYSIS_IMPLEMENTED) {
107 var params = new AnalysisImplementedParams.fromNotification(notification); 103 var params = new AnalysisImplementedParams.fromNotification(notification);
108 if (params.file == testFile) { 104 if (params.file == testFile) {
109 implementedClasses = params.classes; 105 implementedClasses = params.classes;
110 implementedMembers = params.members; 106 implementedMembers = params.members;
111 } 107 }
112 } 108 }
113 } 109 }
114 110
115 void setUp() { 111 void setUp() {
116 super.setUp(); 112 super.setUp();
117 createProject(); 113 createProject();
118 } 114 }
119 115
116 void subscribeForImplemented() {
117 addAnalysisSubscription(AnalysisService.IMPLEMENTED, testFile);
118 }
119
120 test_afterAnalysis() async { 120 test_afterAnalysis() async {
121 addTestFile(''' 121 addTestFile('''
122 class A {} 122 class A {}
123 class B extends A {} 123 class B extends A {}
124 '''); 124 ''');
125 await waitForTasksFinished(); 125 await waitForTasksFinished();
126 await prepareImplementedElements(); 126 await prepareImplementedElements();
127 assertHasImplementedClass('A {'); 127 assertHasImplementedClass('A {');
128 } 128 }
129 129
130 test_afterIncrementalResolution() async {
131 subscribeForImplemented();
132 addTestFile('''
133 class A {}
134 class B extends A {}
135 ''');
136 await prepareImplementedElements();
137 assertHasImplementedClass('A {');
138 // add a space
139 implementedClasses = null;
140 testCode = '''
141 class A {}
142 class B extends A {}
143 ''';
144 server.updateContent('1', {testFile: new AddContentOverlay(testCode)});
145 await waitForImplementedElements();
146 assertHasImplementedClass('A {');
147 }
148
130 test_class_extended() async { 149 test_class_extended() async {
131 addTestFile(''' 150 addTestFile('''
132 class A {} 151 class A {}
133 class B extends A {} 152 class B extends A {}
134 '''); 153 ''');
135 await prepareImplementedElements(); 154 await prepareImplementedElements();
136 assertHasImplementedClass('A {'); 155 assertHasImplementedClass('A {');
137 } 156 }
138 157
139 test_class_implemented() async { 158 test_class_implemented() async {
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 class A { 298 class A {
280 set f(_) {} // A 299 set f(_) {} // A
281 } 300 }
282 class B extends A { 301 class B extends A {
283 set f(_) {} // B 302 set f(_) {} // B
284 } 303 }
285 '''); 304 ''');
286 await prepareImplementedElements(); 305 await prepareImplementedElements();
287 assertHasImplementedMember('f(_) {} // A'); 306 assertHasImplementedMember('f(_) {} // A');
288 } 307 }
308
309 Future waitForImplementedElements() {
310 Future waitForNotification(int times) {
311 if (times == 0 || implementedClasses != null) {
312 return new Future.value();
313 }
314 return new Future.delayed(
315 Duration.ZERO, () => waitForNotification(times - 1));
316 }
317 return waitForNotification(100);
318 }
289 } 319 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/incremental_resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698