Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 } |
| OLD | NEW |