| 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_method; | 5 library test.services.refactoring.extract_method; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/protocol.dart'; | 9 import 'package:analysis_server/src/protocol.dart'; |
| 10 import 'package:analysis_server/src/services/refactoring/extract_method.dart'; | 10 import 'package:analysis_server/src/services/refactoring/extract_method.dart'; |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 int v2 = 2; | 369 int v2 = 2; |
| 370 // start | 370 // start |
| 371 int a = v1 + v2; // marker | 371 int a = v1 + v2; // marker |
| 372 // end | 372 // end |
| 373 } | 373 } |
| 374 '''); | 374 '''); |
| 375 _createRefactoringForStartEndComments(); | 375 _createRefactoringForStartEndComments(); |
| 376 // update parameters | 376 // update parameters |
| 377 return refactoring.checkInitialConditions().then((_) { | 377 return refactoring.checkInitialConditions().then((_) { |
| 378 { | 378 { |
| 379 var parameters = refactoring.parameters.toList(); | 379 var parameters = _getParametersCopy(); |
| 380 expect(parameters, hasLength(2)); | 380 expect(parameters, hasLength(2)); |
| 381 parameters[0].name = 'dup'; | 381 parameters[0].name = 'dup'; |
| 382 parameters[1].name = 'dup'; | 382 parameters[1].name = 'dup'; |
| 383 refactoring.parameters = parameters; | 383 refactoring.parameters = parameters; |
| 384 } | 384 } |
| 385 return _assertFinalConditionsError("Parameter 'dup' already exists"); | 385 return _assertFinalConditionsError("Parameter 'dup' already exists"); |
| 386 }); | 386 }); |
| 387 } | 387 } |
| 388 | 388 |
| 389 test_bad_parameterName_inUse() { | 389 test_bad_parameterName_inUse() { |
| 390 indexTestUnit(''' | 390 indexTestUnit(''' |
| 391 main() { | 391 main() { |
| 392 int v1 = 1; | 392 int v1 = 1; |
| 393 int v2 = 2; | 393 int v2 = 2; |
| 394 // start | 394 // start |
| 395 int a = v1 + v2; // marker | 395 int a = v1 + v2; // marker |
| 396 // end | 396 // end |
| 397 } | 397 } |
| 398 '''); | 398 '''); |
| 399 _createRefactoringForStartEndComments(); | 399 _createRefactoringForStartEndComments(); |
| 400 // update parameters | 400 // update parameters |
| 401 return refactoring.checkInitialConditions().then((_) { | 401 return refactoring.checkInitialConditions().then((_) { |
| 402 { | 402 { |
| 403 var parameters = refactoring.parameters.toList(); | 403 var parameters = _getParametersCopy(); |
| 404 expect(parameters, hasLength(2)); | 404 expect(parameters, hasLength(2)); |
| 405 parameters[0].name = 'a'; | 405 parameters[0].name = 'a'; |
| 406 refactoring.parameters = parameters; | 406 refactoring.parameters = parameters; |
| 407 } | 407 } |
| 408 return _assertFinalConditionsError( | 408 return _assertFinalConditionsError( |
| 409 "'a' is already used as a name in the selected code"); | 409 "'a' is already used as a name in the selected code"); |
| 410 }); | 410 }); |
| 411 } | 411 } |
| 412 | 412 |
| 413 test_bad_selectionEndsInSomeNode() { | 413 test_bad_selectionEndsInSomeNode() { |
| (...skipping 1142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1556 int v2 = 2; | 1556 int v2 = 2; |
| 1557 int v3 = 3; | 1557 int v3 = 3; |
| 1558 int a = v1 + v2 + v1; // marker | 1558 int a = v1 + v2 + v1; // marker |
| 1559 int b = v2 + v3 + v2; | 1559 int b = v2 + v3 + v2; |
| 1560 } | 1560 } |
| 1561 '''); | 1561 '''); |
| 1562 _createRefactoringForString('v1 + v2 + v1'); | 1562 _createRefactoringForString('v1 + v2 + v1'); |
| 1563 // apply refactoring | 1563 // apply refactoring |
| 1564 return refactoring.checkInitialConditions().then((_) { | 1564 return refactoring.checkInitialConditions().then((_) { |
| 1565 { | 1565 { |
| 1566 var parameters = refactoring.parameters.toList(); | 1566 var parameters = _getParametersCopy(); |
| 1567 expect(parameters, hasLength(2)); | 1567 expect(parameters, hasLength(2)); |
| 1568 expect(parameters[0].name, 'v1'); | 1568 expect(parameters[0].name, 'v1'); |
| 1569 expect(parameters[1].name, 'v2'); | 1569 expect(parameters[1].name, 'v2'); |
| 1570 parameters[0].name = 'par1'; | 1570 parameters[0].name = 'par1'; |
| 1571 parameters[1].name = 'param2'; | 1571 parameters[1].name = 'param2'; |
| 1572 refactoring.parameters = parameters; | 1572 refactoring.parameters = parameters; |
| 1573 } | 1573 } |
| 1574 return assertRefactoringFinalConditionsOK().then((_) { | 1574 return assertRefactoringFinalConditionsOK().then((_) { |
| 1575 refactoring.createGetter = false; | 1575 refactoring.createGetter = false; |
| 1576 return _assertRefactoringChange(''' | 1576 return _assertRefactoringChange(''' |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1595 int v2 = 2; | 1595 int v2 = 2; |
| 1596 int v3 = 3; | 1596 int v3 = 3; |
| 1597 int a = v1 + v2; // marker | 1597 int a = v1 + v2; // marker |
| 1598 int b = v2 + v3; | 1598 int b = v2 + v3; |
| 1599 } | 1599 } |
| 1600 '''); | 1600 '''); |
| 1601 _createRefactoringForString('v1 + v2'); | 1601 _createRefactoringForString('v1 + v2'); |
| 1602 // apply refactoring | 1602 // apply refactoring |
| 1603 return refactoring.checkInitialConditions().then((_) { | 1603 return refactoring.checkInitialConditions().then((_) { |
| 1604 { | 1604 { |
| 1605 var parameters = refactoring.parameters.toList(); | 1605 var parameters = _getParametersCopy(); |
| 1606 expect(parameters, hasLength(2)); | 1606 expect(parameters, hasLength(2)); |
| 1607 expect(parameters[0].name, 'v1'); | 1607 expect(parameters[0].name, 'v1'); |
| 1608 expect(parameters[1].name, 'v2'); | 1608 expect(parameters[1].name, 'v2'); |
| 1609 var parameter = parameters.removeAt(1); | 1609 var parameter = parameters.removeAt(1); |
| 1610 parameters.insert(0, parameter); | 1610 parameters.insert(0, parameter); |
| 1611 refactoring.parameters = parameters; | 1611 refactoring.parameters = parameters; |
| 1612 } | 1612 } |
| 1613 return assertRefactoringFinalConditionsOK().then((_) { | 1613 return assertRefactoringFinalConditionsOK().then((_) { |
| 1614 refactoring.createGetter = false; | 1614 refactoring.createGetter = false; |
| 1615 return _assertRefactoringChange(''' | 1615 return _assertRefactoringChange(''' |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1656 int v1 = 1; | 1656 int v1 = 1; |
| 1657 int v2 = 2; | 1657 int v2 = 2; |
| 1658 int v3 = 3; | 1658 int v3 = 3; |
| 1659 int a = v1 + v2 + v3; | 1659 int a = v1 + v2 + v3; |
| 1660 } | 1660 } |
| 1661 '''); | 1661 '''); |
| 1662 _createRefactoringForString('v1 + v2 + v3'); | 1662 _createRefactoringForString('v1 + v2 + v3'); |
| 1663 // apply refactoring | 1663 // apply refactoring |
| 1664 return refactoring.checkInitialConditions().then((_) { | 1664 return refactoring.checkInitialConditions().then((_) { |
| 1665 { | 1665 { |
| 1666 var parameters = refactoring.parameters.toList(); | 1666 var parameters = _getParametersCopy(); |
| 1667 expect(parameters, hasLength(3)); | 1667 expect(parameters, hasLength(3)); |
| 1668 expect(parameters[0].name, 'v1'); | 1668 expect(parameters[0].name, 'v1'); |
| 1669 expect(parameters[1].name, 'v2'); | 1669 expect(parameters[1].name, 'v2'); |
| 1670 expect(parameters[2].name, 'v3'); | 1670 expect(parameters[2].name, 'v3'); |
| 1671 parameters[0].type = 'num'; | 1671 parameters[0].type = 'num'; |
| 1672 parameters[1].type = 'dynamic'; | 1672 parameters[1].type = 'dynamic'; |
| 1673 parameters[2].type = ''; | 1673 parameters[2].type = ''; |
| 1674 refactoring.parameters = parameters; | 1674 refactoring.parameters = parameters; |
| 1675 } | 1675 } |
| 1676 return assertRefactoringFinalConditionsOK().then((_) { | 1676 return assertRefactoringFinalConditionsOK().then((_) { |
| (...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2296 int offset = findOffset(search); | 2296 int offset = findOffset(search); |
| 2297 int length = search.length; | 2297 int length = search.length; |
| 2298 _createRefactoring(offset, length); | 2298 _createRefactoring(offset, length); |
| 2299 } | 2299 } |
| 2300 | 2300 |
| 2301 void _createRefactoringWithSuffix(String selectionSearch, String suffix) { | 2301 void _createRefactoringWithSuffix(String selectionSearch, String suffix) { |
| 2302 int offset = findOffset(selectionSearch + suffix); | 2302 int offset = findOffset(selectionSearch + suffix); |
| 2303 int length = selectionSearch.length; | 2303 int length = selectionSearch.length; |
| 2304 _createRefactoring(offset, length); | 2304 _createRefactoring(offset, length); |
| 2305 } | 2305 } |
| 2306 |
| 2307 /** |
| 2308 * Returns a deep copy of [refactoring] parameters. |
| 2309 * There was a bug masked by updating parameter instances shared between the |
| 2310 * refactoring and the test. |
| 2311 */ |
| 2312 List<RefactoringMethodParameter> _getParametersCopy() { |
| 2313 return refactoring.parameters.map((p) { |
| 2314 return new RefactoringMethodParameter(p.kind, p.type, p.name, id: p.id); |
| 2315 }).toList(); |
| 2316 } |
| 2306 } | 2317 } |
| OLD | NEW |