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

Unified Diff: pkg/analysis_server/test/services/refactoring/inline_method_test.dart

Issue 526583002: 'Inline Method' refactoring. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixes for review comments Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/test/services/refactoring/inline_method_test.dart
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..c892401969ea618d699500269e859390f89cab13
--- /dev/null
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -0,0 +1,1178 @@
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.services.refactoring.inline_method;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/protocol.dart' hide Element;
+import 'package:analysis_server/src/services/refactoring/inline_method.dart';
+import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_testing/reflective_tests.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:unittest/unittest.dart';
+
+import 'abstract_refactoring.dart';
+
+
+main() {
+ groupSep = ' | ';
+ runReflectiveTests(InlineMethodTest);
+}
+
+
+@ReflectiveTestCase()
+class InlineMethodTest extends RefactoringTest {
+ InlineMethodRefactoringImpl refactoring;
+ bool deleteSource;
+ bool inlineAll;
+
+ test_access_FunctionElement() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res = test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate state
+ return refactoring.checkInitialConditions().then((_) {
+ expect(refactoring.refactoringName, 'Inline Function');
+ });
+ }
+
+ test_access_MethodElement() {
+ indexTestUnit(r'''
+class A {
+ test(a, b) {
+ return a + b;
+ }
+ main() {
+ var res = test(1, 2);
+ }
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate state
+ return refactoring.checkInitialConditions().then((_) {
+ expect(refactoring.refactoringName, 'Inline Method');
+ });
+ }
+
+ test_bad_cascadeInvocation() {
+ indexTestUnit(r'''
+class A {
+ foo() {}
+ bar() {}
+ test() {}
+}
+main() {
+ A a = new A();
+ a..foo()..test()..bar();
+}
+''');
+ _createRefactoring('test() {');
+ // error
+ return refactoring.checkAllConditions().then((status) {
+ var location = new SourceRange(findOffset('..test()'), '..test()'.length);
+ assertRefactoringStatus(
+ status,
+ RefactoringProblemSeverity.ERROR,
+ expectedMessage: 'Cannot inline cascade invocation.',
+ expectedContextRange: location);
+ });
+ }
+
+ test_bad_deleteSource_inlineOne() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res1 = test(1, 2);
+ var res2 = test(10, 20);
+}
+''');
+ _createRefactoring('test(1, 2)');
+ // error
+ return refactoring.checkInitialConditions().then((status) {
+ assertRefactoringStatusOK(status);
+ refactoring.deleteSource = true;
+ refactoring.inlineAll = false;
+ return refactoring.checkFinalConditions().then((status) {
+ assertRefactoringStatus(
+ status,
+ RefactoringProblemSeverity.ERROR,
+ expectedMessage: 'All references must be inlined to remove the source.');
+ });
+ });
+ }
+
+ test_bad_notExecutableElement() {
+ indexTestUnit(r'''
+main() {
+}
+''');
+ _createRefactoring(') {');
+ // error
+ return _assertConditionsFatal(
+ 'Method declaration or reference must be selected to activate this refactoring.');
+ }
+
+ test_bad_notSimpleIdentifier() {
+ indexTestUnit(r'''
+main() {
+ var test = 42;
+ var res = test;
+}
+''');
+ _createRefactoring('test;');
+ // error
+ return _assertConditionsFatal(
+ 'Method declaration or reference must be selected to activate this refactoring.');
+ }
+
+ test_bad_operator() {
+ indexTestUnit(r'''
+class A {
+ operator -(other) => this;
+}
+''');
+ _createRefactoring('-(other)');
+ // error
+ return _assertConditionsFatal('Cannot inline operator.');
+ }
+
+ test_bad_reference_toClassMethod() {
+ indexTestUnit(r'''
+class A {
+ test(a, b) {
+ print(a);
+ print(b);
+ }
+}
+main() {
+ print(new A().test);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // error
+ return _assertConditionsFatal('Cannot inline class method reference.');
+ }
+
+ test_bad_severalReturns() {
+ indexTestUnit(r'''
+test() {
+ if (true) {
+ return 1;
+ }
+ return 2;
+}
+main() {
+ var res = test();
+}
+''');
+ _createRefactoring('test() {');
+ // error
+ return _assertConditionsError('Ambiguous return value.');
+ }
+
+ test_fieldAccessor_getter() {
+ indexTestUnit(r'''
+class A {
+ var f;
+ get foo {
+ return f * 2;
+ }
+}
+main() {
+ A a = new A();
+ print(a.foo);
+}
+''');
+ _createRefactoring('foo {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ var f;
+}
+main() {
+ A a = new A();
+ print(a.f * 2);
+}
+''');
+ }
+
+ test_fieldAccessor_getter_PropertyAccess() {
+ indexTestUnit(r'''
+class A {
+ var f;
+ get foo {
+ return f * 2;
+ }
+}
+class B {
+ A a = new A();
+}
+main() {
+ B b = new B();
+ print(b.a.foo);
+}
+''');
+ _createRefactoring('foo {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ var f;
+}
+class B {
+ A a = new A();
+}
+main() {
+ B b = new B();
+ print(b.a.f * 2);
+}
+''');
+ }
+
+ test_fieldAccessor_setter() {
+ indexTestUnit(r'''
+class A {
+ var f;
+ set foo(x) {
+ f = x;
+ }
+}
+main() {
+ A a = new A();
+ a.foo = 0;
+}
+''');
+ _createRefactoring('foo(x) {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ var f;
+}
+main() {
+ A a = new A();
+ a.f = 0;
+}
+''');
+ }
+
+ test_fieldAccessor_setter_PropertyAccess() {
+ indexTestUnit(r'''
+class A {
+ var f;
+ set foo(x) {
+ f = x;
+ }
+}
+class B {
+ A a = new A();
+}
+main() {
+ B b = new B();
+ b.a.foo = 0;
+}
+''');
+ _createRefactoring('foo(x) {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ var f;
+}
+class B {
+ A a = new A();
+}
+main() {
+ B b = new B();
+ b.a.f = 0;
+}
+''');
+ }
+
+ test_function_expressionFunctionBody() {
+ indexTestUnit(r'''
+test(a, b) => a + b;
+main() {
+ print(test(1, 2));
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ print(1 + 2);
+}
+''');
+ }
+
+ test_function_hasReturn_assign() {
+ indexTestUnit(r'''
+test(a, b) {
+ print(a);
+ print(b);
+ return a + b;
+}
+main() {
+ var v;
+ v = test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var v;
+ print(1);
+ print(2);
+ v = 1 + 2;
+}
+''');
+ }
+
+ test_function_hasReturn_hasReturnType() {
+ indexTestUnit(r'''
+int test(a, b) {
+ return a + b;
+}
+main() {
+ var v = test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var v = 1 + 2;
+}
+''');
+ }
+
+ test_function_hasReturn_noVars_oneUsage() {
+ indexTestUnit(r'''
+test(a, b) {
+ print(a);
+ print(b);
+ return a + b;
+}
+main() {
+ var v = test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ print(1);
+ print(2);
+ var v = 1 + 2;
+}
+''');
+ }
+
+ test_function_multilineString() {
+ indexTestUnit(r"""
+main() {
+ {
+ test();
+ }
+}
+test() {
+ print('''
+first line
+second line
+ ''');
+}
+""");
+ _createRefactoring('test() {');
+ // validate change
+ return _assertSuccessfulRefactoring(r"""
+main() {
+ {
+ print('''
+first line
+second line
+ ''');
+ }
+}
+""");
+ }
+
+ test_function_noReturn_hasVars_hasConflict_fieldSuperClass() {
+ indexTestUnit(r'''
+class A {
+ var c;
+}
+class B extends A {
+ foo() {
+ test(1, 2);
+ }
+}
+test(a, b) {
+ var c = a + b;
+ print(c);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ var c;
+}
+class B extends A {
+ foo() {
+ var c2 = 1 + 2;
+ print(c2);
+ }
+}
+''');
+ }
+
+ test_function_noReturn_hasVars_hasConflict_fieldThisClass() {
+ indexTestUnit(r'''
+class A {
+ var c;
+ foo() {
+ test(1, 2);
+ }
+}
+test(a, b) {
+ var c = a + b;
+ print(c);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ var c;
+ foo() {
+ var c2 = 1 + 2;
+ print(c2);
+ }
+}
+''');
+ }
+
+ test_function_noReturn_hasVars_hasConflict_localAfter() {
+ indexTestUnit(r'''
+test(a, b) {
+ var c = a + b;
+ print(c);
+}
+main() {
+ test(1, 2);
+ var c = 0;
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var c2 = 1 + 2;
+ print(c2);
+ var c = 0;
+}
+''');
+ }
+
+ test_function_noReturn_hasVars_hasConflict_localBefore() {
+ indexTestUnit(r'''
+test(a, b) {
+ var c = a + b;
+ print(c);
+}
+main() {
+ var c = 0;
+ test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var c = 0;
+ var c2 = 1 + 2;
+ print(c2);
+}
+''');
+ }
+
+ test_function_noReturn_hasVars_noConflict() {
+ indexTestUnit(r'''
+test(a, b) {
+ var c = a + b;
+ print(c);
+}
+main() {
+ test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var c = 1 + 2;
+ print(c);
+}
+''');
+ }
+
+ test_function_noReturn_noVars_oneUsage() {
+ indexTestUnit(r'''
+test(a, b) {
+ print(a);
+ print(b);
+}
+main() {
+ test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ print(1);
+ print(2);
+}
+''');
+ }
+
+ test_function_noReturn_noVars_useIndentation() {
+ indexTestUnit(r'''
+test(a, b) {
+ print(a);
+ print(b);
+}
+main() {
+ {
+ test(1, 2);
+ }
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ {
+ print(1);
+ print(2);
+ }
+}
+''');
+ }
+
+ test_function_noReturn_voidReturnType() {
+ indexTestUnit(r'''
+void test(a, b) {
+ print(a + b);
+}
+main() {
+ test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ print(1 + 2);
+}
+''');
+ }
+
+ test_function_notStatement_oneStatement_assign() {
+ indexTestUnit(r'''
+test(int p) {
+ print(p * 2);
+}
+main() {
+ var v;
+ v = test(0);
+}
+''');
+ _createRefactoring('test(int p)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var v;
+ v = (int p) {
+ print(p * 2);
+ }(0);
+}
+''');
+ }
+
+ test_function_notStatement_oneStatement_variableDeclaration() {
+ indexTestUnit(r'''
+test(int p) {
+ print(p * 2);
+}
+main() {
+ var v = test(0);
+}
+''');
+ _createRefactoring('test(int p)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var v = (int p) {
+ print(p * 2);
+ }(0);
+}
+''');
+ }
+
+ test_function_notStatement_severalStatements() {
+ indexTestUnit(r'''
+test(int p) {
+ print(p);
+ print(p * 2);
+}
+main() {
+ var v = test(0);
+}
+''');
+ _createRefactoring('test(int p)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var v = (int p) {
+ print(p);
+ print(p * 2);
+ }(0);
+}
+''');
+ }
+
+ test_function_notStatement_zeroStatements() {
+ indexTestUnit(r'''
+test(int p) {
+}
+main() {
+ var v = test(0);
+}
+''');
+ _createRefactoring('test(int p)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var v = (int p) {
+ }(0);
+}
+''');
+ }
+
+ test_function_singleStatement() {
+ indexTestUnit(r'''
+var topLevelField = 0;
+test() {
+ print(topLevelField);
+}
+main() {
+ test();
+}
+''');
+ _createRefactoring('test() {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+var topLevelField = 0;
+main() {
+ print(topLevelField);
+}
+''');
+ }
+
+ test_initialMode_all() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res = test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate state
+ return refactoring.checkInitialConditions().then((_) {
+ expect(refactoring.deleteSource, true);
+ expect(refactoring.inlineAll, true);
+ });
+ }
+
+ test_initialMode_single() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res1 = test(1, 2);
+ var res2 = test(10, 20);
+}
+''');
+ _createRefactoring('test(1, 2)');
+ deleteSource = false;
+ // validate state
+ return refactoring.checkInitialConditions().then((_) {
+ expect(refactoring.deleteSource, false);
+ expect(refactoring.inlineAll, false);
+ });
+ }
+
+ test_method_emptyBody() {
+ indexTestUnit(r'''
+abstract class A {
+ test();
+}
+main(A a) {
+ print(a.test());
+}
+''');
+ _createRefactoring('test();');
+ // error
+ return _assertConditionsFatal('Cannot inline method without body.');
+ }
+
+ test_method_fieldInstance() {
+ indexTestUnit(r'''
+class A {
+ var fA;
+}
+class B extends A {
+ var fB;
+ test() {
+ print(fA);
+ print(fB);
+ print(this.fA);
+ print(this.fB);
+ }
+}
+main() {
+ B b = new B();
+ b.test();
+}
+''');
+ _createRefactoring('test() {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ var fA;
+}
+class B extends A {
+ var fB;
+}
+main() {
+ B b = new B();
+ print(b.fA);
+ print(b.fB);
+ print(b.fA);
+ print(b.fB);
+}
+''');
+ }
+
+ test_method_fieldStatic() {
+ indexTestUnit(r'''
+class A {
+ static var FA = 1;
+}
+class B extends A {
+ static var FB = 2;
+ test() {
+ print(FA);
+ print(FB);
+ print(A.FA);
+ print(B.FB);
+ }
+}
+main() {
+ B b = new B();
+ b.test();
+}
+''');
+ _createRefactoring('test() {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ static var FA = 1;
+}
+class B extends A {
+ static var FB = 2;
+}
+main() {
+ B b = new B();
+ print(A.FA);
+ print(B.FB);
+ print(A.FA);
+ print(B.FB);
+}
+''');
+ }
+
+ test_method_fieldStatic_sameClass() {
+ indexTestUnit(r'''
+class A {
+ static var F = 1;
+ foo() {
+ test();
+ }
+ test() {
+ print(A.F);
+ }
+}
+''');
+ _createRefactoring('test() {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ static var F = 1;
+ foo() {
+ print(A.F);
+ }
+}
+''');
+ }
+
+ test_method_singleStatement() {
+ indexTestUnit(r'''
+class A {
+ test() {
+ print(0);
+ }
+ foo() {
+ test();
+ }
+}
+''');
+ _createRefactoring('test() {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ foo() {
+ print(0);
+ }
+}
+''');
+ }
+
+ test_method_unqualifiedUnvocation() {
+ indexTestUnit(r'''
+class A {
+ test(a, b) {
+ print(a);
+ print(b);
+ return a + b;
+ }
+ foo() {
+ var v = test(1, 2);
+ }
+}
+''');
+ _createRefactoring('test(a, b) {');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+class A {
+ foo() {
+ print(1);
+ print(2);
+ var v = 1 + 2;
+ }
+}
+''');
+ }
+
+ test_namedArgument_inBody() {
+ indexTestUnit(r'''
+fa(pa) => fb(pb: true);
+fb({pb: false}) {}
+main() {
+ fa(null);
+}
+''');
+ _createRefactoring('fa(null)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+fa(pa) => fb(pb: true);
+fb({pb: false}) {}
+main() {
+ fb(pb: true);
+}
+''');
+ }
+
+ test_namedArguments() {
+ indexTestUnit(r'''
+test({a: 0, b: 2}) {
+ print(a + b);
+}
+main() {
+ test(a: 10, b: 20);
+ test(b: 20, a: 10);
+}
+''');
+ _createRefactoring('test({');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ print(10 + 20);
+ print(10 + 20);
+}
+''');
+ }
+
+ test_reference_noStatement() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a || b;
+}
+foo(p1, p2, p3) => p1 && test(p2, p3);
+bar() => {
+ 'name' : baz(test)
+};
+baz(x) {}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+foo(p1, p2, p3) => p1 && (p2 || p3);
+bar() => {
+ 'name' : baz((a, b) {
+ return a || b;
+ })
+};
+baz(x) {}
+''');
+ }
+
+ test_reference_toLocal() {
+ indexTestUnit(r'''
+main() {
+ test(a, b) {
+ print(a);
+ print(b);
+ }
+ print(test);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ print((a, b) {
+ print(a);
+ print(b);
+ });
+}
+''');
+ }
+
+ test_reference_toTopLevel() {
+ indexTestUnit(r'''
+test(a, b) {
+ print(a);
+ print(b);
+}
+main() {
+ print(test);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ print((a, b) {
+ print(a);
+ print(b);
+ });
+}
+''');
+ }
+
+ test_singleExpression_oneUsage() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res = test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var res = 1 + 2;
+}
+''');
+ }
+
+ test_singleExpression_oneUsage_keepMethod() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res = test(1, 2);
+}
+''');
+ _createRefactoring('test(a, b)');
+ deleteSource = false;
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res = 1 + 2;
+}
+''');
+ }
+
+ test_singleExpression_twoUsages() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res1 = test(1, 2);
+ var res2 = test(10, 20);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var res1 = 1 + 2;
+ var res2 = 10 + 20;
+}
+''');
+ }
+
+ test_singleExpression_twoUsages_inlineOne() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res1 = test(1, 2);
+ var res2 = test(10, 20);
+}
+''');
+ _createRefactoring('test(1, 2)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+test(a, b) {
+ return a + b;
+}
+main() {
+ var res1 = 1 + 2;
+ var res2 = test(10, 20);
+}
+''');
+ }
+
+ test_singleExpression_wrapIntoParenthesized_alreadyInMethod() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a * (b);
+}
+main() {
+ var res = test(1, 2 + 3);
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var res = 1 * (2 + 3);
+}
+''');
+ }
+
+ test_singleExpression_wrapIntoParenthesized_asNeeded() {
+ indexTestUnit(r'''
+test(a, b) {
+ return a * b;
+}
+main() {
+ var res1 = test(1, 2 + 3);
+ var res2 = test(1, (2 + 3));
+}
+''');
+ _createRefactoring('test(a, b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main() {
+ var res1 = 1 * (2 + 3);
+ var res2 = 1 * (2 + 3);
+}
+''');
+ }
+
+ test_singleExpression_wrapIntoParenthesized_bools() {
+ indexTestUnit(r'''
+test(bool a, bool b) {
+ return a || b;
+}
+main(bool p, bool p2, bool p3) {
+ var res1 = p && test(p2, p3);
+ var res2 = p || test(p2, p3);
+}
+''');
+ _createRefactoring('test(bool a, bool b)');
+ // validate change
+ return _assertSuccessfulRefactoring(r'''
+main(bool p, bool p2, bool p3) {
+ var res1 = p && (p2 || p3);
+ var res2 = p || p2 || p3;
+}
+''');
+ }
+
+ Future _assertConditionsError(String message) {
+ return refactoring.checkAllConditions().then((status) {
+ assertRefactoringStatus(
+ status,
+ RefactoringProblemSeverity.ERROR,
+ expectedMessage: message);
+ });
+ }
+
+ Future _assertConditionsFatal(String message) {
+ return refactoring.checkAllConditions().then((status) {
+ assertRefactoringStatus(
+ status,
+ RefactoringProblemSeverity.FATAL,
+ expectedMessage: message);
+ });
+ }
+
+ Future _assertSuccessfulRefactoring(String expectedCode) {
+ return refactoring.checkInitialConditions().then((status) {
+ assertRefactoringStatusOK(status);
+ if (deleteSource != null) {
+ refactoring.deleteSource = deleteSource;
+ }
+ if (inlineAll != null) {
+ refactoring.inlineAll = inlineAll;
+ }
+ return refactoring.checkFinalConditions().then((status) {
+ assertRefactoringStatusOK(status);
+ return refactoring.createChange().then((SourceChange change) {
+ this.refactoringChange = change;
+ assertTestChangeResult(expectedCode);
+ });
+ });
+ });
+ }
+
+ void _createRefactoring(String search) {
+ int offset = findOffset(search);
+ refactoring = new InlineMethodRefactoring(searchEngine, testUnit, offset);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698