OLD | NEW |
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.services.refactoring.extract_local; | 5 library test.services.refactoring.extract_local; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 | 9 |
10 import 'package:analysis_server/plugin/protocol/protocol.dart'; | 10 import 'package:analysis_server/plugin/protocol/protocol.dart'; |
(...skipping 18 matching lines...) Expand all Loading... |
29 test_checkFinalConditions_sameVariable_after() async { | 29 test_checkFinalConditions_sameVariable_after() async { |
30 indexTestUnit(''' | 30 indexTestUnit(''' |
31 main() { | 31 main() { |
32 int a = 1 + 2; | 32 int a = 1 + 2; |
33 var res; | 33 var res; |
34 } | 34 } |
35 '''); | 35 '''); |
36 _createRefactoringForString('1 + 2'); | 36 _createRefactoringForString('1 + 2'); |
37 // conflicting name | 37 // conflicting name |
38 RefactoringStatus status = await refactoring.checkAllConditions(); | 38 RefactoringStatus status = await refactoring.checkAllConditions(); |
39 assertRefactoringStatus(status, RefactoringProblemSeverity.WARNING, | 39 assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR, |
40 expectedMessage: | 40 expectedMessage: "The name 'res' is already used in the scope."); |
41 "A variable with name 'res' is already defined in the visible scope.
"); | |
42 } | 41 } |
43 | 42 |
44 test_checkFinalConditions_sameVariable_before() async { | 43 test_checkFinalConditions_sameVariable_before() async { |
45 indexTestUnit(''' | 44 indexTestUnit(''' |
46 main() { | 45 main() { |
47 var res; | 46 var res; |
48 int a = 1 + 2; | 47 int a = 1 + 2; |
49 } | 48 } |
50 '''); | 49 '''); |
51 _createRefactoringForString('1 + 2'); | 50 _createRefactoringForString('1 + 2'); |
52 // conflicting name | 51 // conflicting name |
53 RefactoringStatus status = await refactoring.checkAllConditions(); | 52 RefactoringStatus status = await refactoring.checkAllConditions(); |
54 assertRefactoringStatus(status, RefactoringProblemSeverity.WARNING, | 53 assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR, |
55 expectedMessage: | 54 expectedMessage: "The name 'res' is already used in the scope."); |
56 "A variable with name 'res' is already defined in the visible scope.
"); | |
57 } | 55 } |
58 | 56 |
59 test_checkInitialConditions_assignmentLeftHandSize() async { | 57 test_checkInitialConditions_assignmentLeftHandSize() async { |
60 indexTestUnit(''' | 58 indexTestUnit(''' |
61 main() { | 59 main() { |
62 var v = 0; | 60 var v = 0; |
63 v = 1; | 61 v = 1; |
64 } | 62 } |
65 '''); | 63 '''); |
66 _createRefactoringWithSuffix('v', ' = 1;'); | 64 _createRefactoringWithSuffix('v', ' = 1;'); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 print(42); | 154 print(42); |
157 } | 155 } |
158 '''); | 156 '''); |
159 _createRefactoringForString('print'); | 157 _createRefactoringForString('print'); |
160 // check conditions | 158 // check conditions |
161 RefactoringStatus status = await refactoring.checkInitialConditions(); | 159 RefactoringStatus status = await refactoring.checkInitialConditions(); |
162 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL, | 160 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL, |
163 expectedMessage: 'Cannot extract the void expression.'); | 161 expectedMessage: 'Cannot extract the void expression.'); |
164 } | 162 } |
165 | 163 |
166 test_checkLocalName() { | 164 test_checkName() { |
167 indexTestUnit(''' | 165 indexTestUnit(''' |
168 main() { | 166 main() { |
169 int a = 1 + 2; | 167 int a = 1 + 2; |
170 } | 168 } |
171 '''); | 169 '''); |
172 _createRefactoringForString('1 + 2'); | 170 _createRefactoringForString('1 + 2'); |
173 expect(refactoring.refactoringName, 'Extract Local Variable'); | 171 expect(refactoring.refactoringName, 'Extract Local Variable'); |
174 // null | 172 // null |
175 refactoring.name = null; | 173 refactoring.name = null; |
176 assertRefactoringStatus( | 174 assertRefactoringStatus( |
177 refactoring.checkName(), RefactoringProblemSeverity.FATAL, | 175 refactoring.checkName(), RefactoringProblemSeverity.FATAL, |
178 expectedMessage: "Variable name must not be null."); | 176 expectedMessage: "Variable name must not be null."); |
179 // empty | 177 // empty |
180 refactoring.name = ''; | 178 refactoring.name = ''; |
181 assertRefactoringStatus( | 179 assertRefactoringStatus( |
182 refactoring.checkName(), RefactoringProblemSeverity.FATAL, | 180 refactoring.checkName(), RefactoringProblemSeverity.FATAL, |
183 expectedMessage: "Variable name must not be empty."); | 181 expectedMessage: "Variable name must not be empty."); |
184 // OK | 182 // OK |
185 refactoring.name = 'res'; | 183 refactoring.name = 'res'; |
186 assertRefactoringStatusOK(refactoring.checkName()); | 184 assertRefactoringStatusOK(refactoring.checkName()); |
187 } | 185 } |
188 | 186 |
| 187 test_checkName_conflict_withInvokedFunction() async { |
| 188 indexTestUnit(''' |
| 189 main() { |
| 190 int a = 1 + 2; |
| 191 res(); |
| 192 } |
| 193 |
| 194 void res() {} |
| 195 '''); |
| 196 _createRefactoringForString('1 + 2'); |
| 197 await refactoring.checkInitialConditions(); |
| 198 refactoring.name = 'res'; |
| 199 assertRefactoringStatus( |
| 200 refactoring.checkName(), RefactoringProblemSeverity.ERROR, |
| 201 expectedMessage: "The name 'res' is already used in the scope."); |
| 202 } |
| 203 |
| 204 test_checkName_conflict_withOtherLocal() async { |
| 205 indexTestUnit(''' |
| 206 main() { |
| 207 var res; |
| 208 int a = 1 + 2; |
| 209 } |
| 210 '''); |
| 211 _createRefactoringForString('1 + 2'); |
| 212 await refactoring.checkInitialConditions(); |
| 213 refactoring.name = 'res'; |
| 214 assertRefactoringStatus( |
| 215 refactoring.checkName(), RefactoringProblemSeverity.ERROR, |
| 216 expectedMessage: "The name 'res' is already used in the scope."); |
| 217 } |
| 218 |
| 219 test_checkName_conflict_withTypeName() async { |
| 220 indexTestUnit(''' |
| 221 main() { |
| 222 int a = 1 + 2; |
| 223 Res b = null; |
| 224 } |
| 225 |
| 226 class Res {} |
| 227 '''); |
| 228 _createRefactoringForString('1 + 2'); |
| 229 await refactoring.checkInitialConditions(); |
| 230 refactoring.name = 'Res'; |
| 231 assertRefactoringStatus( |
| 232 refactoring.checkName(), RefactoringProblemSeverity.ERROR, |
| 233 expectedMessage: "The name 'Res' is already used in the scope."); |
| 234 } |
| 235 |
189 test_completeStatementExpression() { | 236 test_completeStatementExpression() { |
190 indexTestUnit(''' | 237 indexTestUnit(''' |
191 main(p) { | 238 main(p) { |
192 p.toString(); | 239 p.toString(); |
193 } | 240 } |
194 '''); | 241 '''); |
195 _createRefactoringForString('p.toString()'); | 242 _createRefactoringForString('p.toString()'); |
196 // apply refactoring | 243 // apply refactoring |
197 return _assertSuccessfulRefactoring(''' | 244 return _assertSuccessfulRefactoring(''' |
198 main(p) { | 245 main(p) { |
(...skipping 965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1164 List<String> _getCoveringExpressions() { | 1211 List<String> _getCoveringExpressions() { |
1165 List<String> subExpressions = <String>[]; | 1212 List<String> subExpressions = <String>[]; |
1166 for (int i = 0; i < refactoring.coveringExpressionOffsets.length; i++) { | 1213 for (int i = 0; i < refactoring.coveringExpressionOffsets.length; i++) { |
1167 int offset = refactoring.coveringExpressionOffsets[i]; | 1214 int offset = refactoring.coveringExpressionOffsets[i]; |
1168 int length = refactoring.coveringExpressionLengths[i]; | 1215 int length = refactoring.coveringExpressionLengths[i]; |
1169 subExpressions.add(testCode.substring(offset, offset + length)); | 1216 subExpressions.add(testCode.substring(offset, offset + length)); |
1170 } | 1217 } |
1171 return subExpressions; | 1218 return subExpressions; |
1172 } | 1219 } |
1173 } | 1220 } |
OLD | NEW |