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

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: 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
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.
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 server.updateContent('1', {
141 testFile: new AddContentOverlay('''
142 class A {}
143 class B extends A {}
144 ''')
145 });
146 await waitForImplementedElements();
147 assertHasImplementedClass('A {');
148 }
149
130 test_class_extended() async { 150 test_class_extended() async {
131 addTestFile(''' 151 addTestFile('''
132 class A {} 152 class A {}
133 class B extends A {} 153 class B extends A {}
134 '''); 154 ''');
135 await prepareImplementedElements(); 155 await prepareImplementedElements();
136 assertHasImplementedClass('A {'); 156 assertHasImplementedClass('A {');
137 } 157 }
138 158
139 test_class_implemented() async { 159 test_class_implemented() async {
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 class A { 299 class A {
280 set f(_) {} // A 300 set f(_) {} // A
281 } 301 }
282 class B extends A { 302 class B extends A {
283 set f(_) {} // B 303 set f(_) {} // B
284 } 304 }
285 '''); 305 ''');
286 await prepareImplementedElements(); 306 await prepareImplementedElements();
287 assertHasImplementedMember('f(_) {} // A'); 307 assertHasImplementedMember('f(_) {} // A');
288 } 308 }
309
310 Future waitForImplementedElements() {
311 Future waitForNotification(int times) {
312 if (times == 0 || implementedClasses != null) {
313 return new Future.value();
314 }
315 return new Future.delayed(
316 Duration.ZERO, () => waitForNotification(times - 1));
317 }
318 return waitForNotification(100);
319 }
289 } 320 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698