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

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

Issue 2816943005: Add completion for do-stmt, refactor for reuse (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(StatementCompletionTest); 17 defineReflectiveTests(StatementCompletionTest);
18 }); 18 });
19 } 19 }
20 20
21 @reflectiveTest 21 @reflectiveTest
22 class StatementCompletionTest extends AbstractSingleUnitTest { 22 class StatementCompletionTest extends AbstractSingleUnitTest {
23 SourceChange change; 23 SourceChange change;
24 24
25 bool get enableNewAnalysisDriver => true; 25 bool get enableNewAnalysisDriver => true;
26 26
27 test_completeIfEmptyCondition() async { 27 test_completeDoEmptyCondition() async {
28 await _prepareCompletion( 28 await _prepareCompletion(
29 'if ()', 29 'while ()',
30 ''' 30 '''
31 main() { 31 main() {
32 if () 32 do {
33 } while ()
33 } 34 }
34 ''', 35 ''',
35 atEnd: true); 36 atEnd: true);
36 _assertHasChange( 37 _assertHasChange(
37 'Complete if-statement', 38 'Complete do-statement',
38 ''' 39 '''
39 main() { 40 main() {
40 if () { 41 do {
41 //// 42 } while ();
42 }
43 } 43 }
44 ''', 44 ''',
45 (s) => s.indexOf('if (') + 'if ('.length); 45 (s) => s.indexOf('while (') + 'while ('.length);
46 } 46 }
47 47
48 test_completeIfKeywordOnly() async { 48 test_completeDoKeywordOnly() async {
49 await _prepareCompletion( 49 await _prepareCompletion(
50 'if', 50 'do',
51 ''' 51 '''
52 main() { 52 main() {
53 if //// 53 do ////
54 } 54 }
55 ''', 55 ''',
56 atEnd: true); 56 atEnd: true);
57 _assertHasChange( 57 _assertHasChange(
58 'Complete if-statement', 58 'Complete do-statement',
59 ''' 59 '''
60 main() { 60 main() {
61 if () { 61 do {
62 //// 62 ////
63 } 63 } while ();
64 } 64 }
65 ''', 65 ''',
66 (s) => s.indexOf('if (') + 'if ('.length); 66 (s) => s.indexOf('while (') + 'while ('.length);
67 } 67 }
68 68
69 test_completeIfWithCondition() async { 69 test_completeDoNoBody() async {
70 await _prepareCompletion( 70 await _prepareCompletion(
71 'if (tr', // Trigger completion from within expression. 71 'do',
72 ''' 72 '''
73 main() { 73 main() {
74 if (true) 74 do;
75 while
75 } 76 }
76 ''', 77 ''',
77 atEnd: true); 78 atEnd: true);
78 _assertHasChange( 79 _assertHasChange(
79 'Complete if-statement', 80 'Complete do-statement',
80 ''' 81 '''
81 main() { 82 main() {
82 if (true) { 83 do {
83 //// 84 ////
85 } while ();
86 }
87 ''',
88 (s) => s.indexOf('while (') + 'while ('.length);
89 }
90
91 test_completeDoNoCondition() async {
92 await _prepareCompletion(
93 'while',
94 '''
95 main() {
96 do {
97 } while
98 }
99 ''',
100 atEnd: true);
101 _assertHasChange(
102 'Complete do-statement',
103 '''
104 main() {
105 do {
106 } while ();
107 }
108 ''',
109 (s) => s.indexOf('while (') + 'while ('.length);
110 }
111
112 test_completeDoNoWhile() async {
113 await _prepareCompletion(
114 '}',
115 '''
116 main() {
117 do {
84 } 118 }
85 } 119 }
86 ''', 120 ''',
87 (s) => s.indexOf(' ') + ' '.length); 121 atEnd: true);
122 _assertHasChange(
123 'Complete do-statement',
124 '''
125 main() {
126 do {
127 } while ();
128 }
129 ''',
130 (s) => s.indexOf('while (') + 'while ('.length);
88 } 131 }
89 132
90 test_completeIfAfterCondition_BAD() async { 133 test_completeIfAfterCondition_BAD() async {
91 // TODO(messick): Fix the code to make this like test_completeIfWithConditio n. 134 // TODO(messick): Fix the code to make this like test_completeIfWithConditio n.
92 // Recap: Finding the node at the selectionOffset returns the block, not the 135 // Recap: Finding the node at the selectionOffset returns the block, not the
93 // if-statement. Need to understand if that only happens when the if-stateme nt 136 // if-statement. Need to understand if that only happens when the if-stateme nt
94 // is the only statement in the block, or perhaps first or last? And what 137 // is the only statement in the block, or perhaps first or last? And what
95 // happens when it is in the middle of other statements? 138 // happens when it is in the middle of other statements?
96 await _prepareCompletion( 139 await _prepareCompletion(
97 'if (true) ', // Trigger completion after space. 140 'if (true) ', // Trigger completion after space.
98 ''' 141 '''
99 main() { 142 main() {
100 if (true) //// 143 if (true) ////
101 } 144 }
102 ''', 145 ''',
103 atEnd: true); 146 atEnd: true);
104 _assertHasChange( 147 _assertHasChange(
105 // Note: This is not what we want. 148 // Note: This is not what we want.
106 'Insert a newline at the end of the current line', 149 'Insert a newline at the end of the current line',
107 ''' 150 '''
108 main() { 151 main() {
109 if (true) //// 152 if (true) ////
110 } 153 }
111 } 154 }
112 ''', 155 ''',
113 (s) => s.indexOf('if (true) ') + 'if (true) '.length); 156 (s) => s.indexOf('if (true) ') + 'if (true) '.length);
114 } 157 }
115 158
159 test_completeIfEmptyCondition() async {
160 await _prepareCompletion(
161 'if ()',
162 '''
163 main() {
164 if ()
165 }
166 ''',
167 atEnd: true);
168 _assertHasChange(
169 'Complete if-statement',
170 '''
171 main() {
172 if () {
173 ////
174 }
175 }
176 ''',
177 (s) => s.indexOf('if (') + 'if ('.length);
178 }
179
180 test_completeIfKeywordOnly() async {
181 await _prepareCompletion(
182 'if',
183 '''
184 main() {
185 if ////
186 }
187 ''',
188 atEnd: true);
189 _assertHasChange(
190 'Complete if-statement',
191 '''
192 main() {
193 if () {
194 ////
195 }
196 }
197 ''',
198 (s) => s.indexOf('if (') + 'if ('.length);
199 }
200
201 test_completeIfWithCondition() async {
202 await _prepareCompletion(
203 'if (tr', // Trigger completion from within expression.
204 '''
205 main() {
206 if (true)
207 }
208 ''',
209 atEnd: true);
210 _assertHasChange(
211 'Complete if-statement',
212 '''
213 main() {
214 if (true) {
215 ////
216 }
217 }
218 ''',
219 (s) => s.indexOf(' ') + ' '.length);
220 }
221
116 test_completeIfWithElse_BAD() async { 222 test_completeIfWithElse_BAD() async {
117 await _prepareCompletion( 223 await _prepareCompletion(
118 'if ()', 224 'if ()',
119 ''' 225 '''
120 main() { 226 main() {
121 if () 227 if ()
122 else 228 else
123 } 229 }
124 ''', 230 ''',
125 atEnd: true); 231 atEnd: true);
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 } 371 }
266 await _prepareCompletionAt(offset + delta, testCode); 372 await _prepareCompletionAt(offset + delta, testCode);
267 } 373 }
268 374
269 _prepareCompletionAt(int offset, String sourceCode) async { 375 _prepareCompletionAt(int offset, String sourceCode) async {
270 verifyNoTestUnitErrors = false; 376 verifyNoTestUnitErrors = false;
271 await resolveTestUnit(sourceCode); 377 await resolveTestUnit(sourceCode);
272 await _computeCompletion(offset); 378 await _computeCompletion(offset);
273 } 379 }
274 } 380 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698