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

Side by Side Diff: pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart

Issue 2834913002: Add special completion for control-flow block exits (Closed)
Patch Set: Created 3 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
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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.services.completion.statement; 5 library test.services.completion.statement;
6 6
7 import 'package:analysis_server/src/protocol_server.dart'; 7 import 'package:analysis_server/src/protocol_server.dart';
8 import 'package:analysis_server/src/services/completion/statement/statement_comp letion.dart'; 8 import 'package:analysis_server/src/services/completion/statement/statement_comp letion.dart';
9 import 'package:analyzer/src/dart/analysis/driver.dart'; 9 import 'package:analyzer/src/dart/analysis/driver.dart';
10 import 'package:test/test.dart'; 10 import 'package:test/test.dart';
11 import 'package:test_reflective_loader/test_reflective_loader.dart'; 11 import 'package:test_reflective_loader/test_reflective_loader.dart';
12 12
13 import '../../../abstract_single_unit.dart'; 13 import '../../../abstract_single_unit.dart';
14 14
15 main() { 15 main() {
16 defineReflectiveSuite(() { 16 defineReflectiveSuite(() {
17 defineReflectiveTests(_ControlFlowCompletionTest);
17 defineReflectiveTests(_DoCompletionTest); 18 defineReflectiveTests(_DoCompletionTest);
18 defineReflectiveTests(_ForCompletionTest); 19 defineReflectiveTests(_ForCompletionTest);
19 defineReflectiveTests(_ForEachCompletionTest); 20 defineReflectiveTests(_ForEachCompletionTest);
20 defineReflectiveTests(_IfCompletionTest); 21 defineReflectiveTests(_IfCompletionTest);
21 defineReflectiveTests(_SimpleCompletionTest); 22 defineReflectiveTests(_SimpleCompletionTest);
22 defineReflectiveTests(_SwitchCompletionTest); 23 defineReflectiveTests(_SwitchCompletionTest);
23 defineReflectiveTests(_TryCompletionTest); 24 defineReflectiveTests(_TryCompletionTest);
24 defineReflectiveTests(_WhileCompletionTest); 25 defineReflectiveTests(_WhileCompletionTest);
25 }); 26 });
26 } 27 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 } 87 }
87 88
88 _prepareCompletionAt(int offset, String sourceCode) async { 89 _prepareCompletionAt(int offset, String sourceCode) async {
89 verifyNoTestUnitErrors = false; 90 verifyNoTestUnitErrors = false;
90 await resolveTestUnit(sourceCode); 91 await resolveTestUnit(sourceCode);
91 await _computeCompletion(offset); 92 await _computeCompletion(offset);
92 } 93 }
93 } 94 }
94 95
95 @reflectiveTest 96 @reflectiveTest
97 class _ControlFlowCompletionTest extends StatementCompletionTest {
98 test_doReturnExprLineComment() async {
99 await _prepareCompletion(
100 'return 3',
101 '''
102 ex(e) {
103 do {
104 return 3//
105 } while (true);
106 }
107 ''',
108 atEnd: true);
109 _assertHasChange(
110 'Complete control flow block',
111 '''
112 ex(e) {
113 do {
114 return 3;//
115 } while (true);
116 ////
117 }
118 ''',
119 (s) => _afterLast(s, ' '));
120 }
121
122 test_doReturnUnterminated() async {
123 await _prepareCompletion(
124 'return',
125 '''
126 ex(e) {
127 do {
128 return
129 } while (true);
130 }
131 ''',
132 atEnd: true);
133 _assertHasChange(
134 'Complete control flow block',
135 '''
136 ex(e) {
137 do {
138 return;
139 } while (true);
140 ////
141 }
142 ''',
143 (s) => _afterLast(s, ' '));
144 }
145
146 test_forEachReturn() async {
147 await _prepareCompletion(
148 'return;',
149 '''
150 ex(e) {
151 for (var x in e) {
152 return;
153 }
154 }
155 ''',
156 atEnd: true);
157 _assertHasChange(
158 'Complete control flow block',
159 '''
160 ex(e) {
161 for (var x in e) {
162 return;
163 }
164 ////
165 }
166 ''',
167 (s) => _afterLast(s, ' '));
168 }
169
170 test_forThrowUnterminated() async {
171 await _prepareCompletion(
172 'throw e',
173 '''
174 ex(e) {
175 for (int i = 0; i < 3; i++) {
176 throw e
177 }
178 }
179 ''',
180 atEnd: true);
181 _assertHasChange(
182 'Complete control flow block',
183 '''
184 ex(e) {
185 for (int i = 0; i < 3; i++) {
186 throw e;
187 }
188 ////
189 }
190 ''',
191 (s) => _afterLast(s, ' '));
192 }
193
194 test_ifThrow() async {
195 await _prepareCompletion(
196 'throw e;',
197 '''
198 ex(e) {
199 if (true) {
200 throw e;
201 }
202 }
203 ''',
204 atEnd: true);
205 _assertHasChange(
206 'Complete control flow block',
207 '''
208 ex(e) {
209 if (true) {
210 throw e;
211 }
212 ////
213 }
214 ''',
215 (s) => _afterLast(s, ' '));
216 }
217
218 test_ifThrowUnterminated() async {
219 await _prepareCompletion(
220 'throw e',
221 '''
222 ex(e) {
223 if (true) {
224 throw e
225 }
226 }
227 ''',
228 atEnd: true);
229 _assertHasChange(
230 'Complete control flow block',
231 '''
232 ex(e) {
233 if (true) {
234 throw e;
235 }
236 ////
237 }
238 ''',
239 (s) => _afterLast(s, ' '));
240 }
Brian Wilkerson 2017/04/21 21:45:45 Would it be useful to have a test like if (true)
241
242 test_whileReturnExpr() async {
243 await _prepareCompletion(
244 '+ 4',
245 '''
246 ex(e) {
247 while (true) {
248 return 3 + 4
249 }
250 }
251 ''',
252 atEnd: true);
253 _assertHasChange(
254 'Complete control flow block',
255 '''
256 ex(e) {
257 while (true) {
258 return 3 + 4;
259 }
260 ////
261 }
262 ''',
263 (s) => _afterLast(s, ' '));
264 }
265 }
266
267 @reflectiveTest
96 class _DoCompletionTest extends StatementCompletionTest { 268 class _DoCompletionTest extends StatementCompletionTest {
97 test_emptyCondition() async { 269 test_emptyCondition() async {
98 await _prepareCompletion( 270 await _prepareCompletion(
99 'while ()', 271 'while ()',
100 ''' 272 '''
101 main() { 273 main() {
102 do { 274 do {
103 } while () 275 } while ()
104 } 276 }
105 ''', 277 ''',
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 ''' 1065 '''
894 main() { 1066 main() {
895 while () { 1067 while () {
896 //// 1068 ////
897 } 1069 }
898 } 1070 }
899 ''', 1071 ''',
900 (s) => _after(s, 'while (')); 1072 (s) => _after(s, 'while ('));
901 } 1073 }
902 } 1074 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698