/******************************************************************************* * Copyright (c) 2008, 2016 Institute for Software, HSR Hochschule fuer Technik * Rapperswil, University of applied sciences and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Institute for Software - initial API and implementation * Sergey Prigogin (Google) * Marc-Andre Laperle (Ericsson) * Thomas Corbat (IFS) *******************************************************************************/ package org.eclipse.cdt.ui.tests.refactoring.extractlocalvariable; import junit.framework.Test; import org.eclipse.cdt.ui.tests.refactoring.RefactoringTestBase; import org.eclipse.cdt.internal.ui.refactoring.CRefactoring; import org.eclipse.cdt.internal.ui.refactoring.extractlocalvariable.ExtractLocalVariableRefactoring; /** * Tests for Extract Local Variable refactoring. */ public class ExtractLocalVariableRefactoringTest extends RefactoringTestBase { private String extractedVariableName; private ExtractLocalVariableRefactoring refactoring; public ExtractLocalVariableRefactoringTest() { super(); } public ExtractLocalVariableRefactoringTest(String name) { super(name); } public static Test suite() { return suite(ExtractLocalVariableRefactoringTest.class); } @Override protected CRefactoring createRefactoring() { refactoring = new ExtractLocalVariableRefactoring(getSelectedTranslationUnit(), getSelection(), getCProject()); return refactoring; } @Override protected void simulateUserInput() { if (extractedVariableName != null) refactoring.getRefactoringInfo().setName(extractedVariableName); } //A.cpp //int foo() { // return /*$*/42/*$$*/; //} //==================== //int foo() { // int i = 42; // return i; //} public void testIntLiteral() throws Exception { assertRefactoringSuccess(); } //A.cpp //int foo() { // return /*$*/'c'/*$$*/; //} //==================== //int foo() { // char c = 'c'; // return c; //} public void testCharLiteral() throws Exception { assertRefactoringSuccess(); } //A.cpp //const char* foo() { // return /*$*/"Hello World!"/*$$*/; //} //==================== //const char* foo() { // const char* helloWorld = "Hello World!"; // return helloWorld; //} public void testStringLiteral() throws Exception { assertRefactoringSuccess(); } //A.cpp //double foo() { // return /*$*/42.0f/*$$*/; //} //==================== //double foo() { // float f = 42.0f; // return f; //} public void testFloatLiteral() throws Exception { assertRefactoringSuccess(); } //A.cpp //double foo() { // return /*$*/42./*$$*/; //} //==================== //double foo() { // double f = 42.; // return f; //} public void testDoubleLiteral() throws Exception { assertRefactoringSuccess(); } //A.h //#ifndef A_H_ //#define A_H_ // //class A { //public: // A(); // virtual ~A(); // int foo(); //}; // //#endif /*A_H_*/ //==================== //#ifndef A_H_ //#define A_H_ // //class A { //public: // A(); // virtual ~A(); // int foo(); //}; // //#endif /*A_H_*/ //A.cpp //#include "A.h" // //A::A() { //} // //A::~A() { //} // //int A::foo() { // return /*$*/(42)/*$$*/; //} //==================== //#include "A.h" // //A::A() { //} // //A::~A() { //} // //int A::foo() { // int i = 42; // return i; //} public void testParentheses() throws Exception { assertRefactoringSuccess(); } //A.h //#ifndef A_H_ //#define A_H_ // //class A { //public: // A(); // virtual ~A(); // int foo(); //}; // //#endif /*A_H_*/ //==================== //#ifndef A_H_ //#define A_H_ // //class A { //public: // A(); // virtual ~A(); // int foo(); //}; // //#endif /*A_H_*/ //A.cpp //#include "A.h" // //A::A() { //} // //A::~A() { //} // //int A::foo() { // int x = 3; // return /*$*/(x + 2)/*$$*/ * 15; //} //==================== //#include "A.h" // //A::A() { //} // //A::~A() { //} // //int A::foo() { // int x = 3; // int i = x + 2; // return i * 15; //} public void testSuggestedNameInScope() throws Exception { assertRefactoringSuccess(); } //A.cpp //void foo() { // for (int n = /*$*/5 + 2/*$$*/; n < 10; ++n) // ; //} //==================== //void foo() { // int i = 5 + 2; // for (int n = i; n < 10; ++n) // ; //} public void testForStatement_Bug277065() throws Exception { assertRefactoringSuccess(); } //A.cpp //void foo() { // int a = 0; // float b = 0.1f; // double c = /*$*/(a + b)/*$$*/ * 0.2; //} //==================== //void foo() { // int a = 0; // float b = 0.1f; // float a0 = a + b; // double c = a0 * 0.2; //} public void testExpression() throws Exception { assertRefactoringSuccess(); } //A.cpp //void foo() { // int a[2]; // int b = */*$*/(a + 1)/*$$*/; //} //==================== //void foo() { // int a[2]; // int* i = a + 1; // int b = *i; //} public void testPointer() throws Exception { assertRefactoringSuccess(); } //A.cpp //const volatile int* k; // //void foo() { // /*$*/k;/*$$*/ //} //==================== //const volatile int* k; // //void foo() { // const volatile int* k0 = k; // k0; //} public void testQualifiers() throws Exception { assertRefactoringSuccess(); } //A.cpp //class K { //public: // bool operator+(int b) { return true; } // float operator+(unsigned u) { return 1.0f; } //}; //void foo() { // K k; // /*$*/k+3u/*$$*/; //} //==================== //class K { //public: // bool operator+(int b) { return true; } // float operator+(unsigned u) { return 1.0f; } //}; //void foo() { // K k; // float i = k + 3u; // i; //} public void testOverloadedOperators() throws Exception { assertRefactoringSuccess(); } //A.cpp // //void func() { // int* (*a)[2]; // /*$*/a/*$$*/; //} //==================== // //void func() { // int* (*a)[2]; // int* (*a0)[2] = a; // a0; //} public void testArrayOfFunctionPointers_Bug318784() throws Exception { assertRefactoringSuccess(); } //A.cpp //template<class T> //class Foo { //}; // //Foo<int> getFoo(); // //int main() { // /*$*/getFoo()/*$$*/; // return 0; //} //==================== //template<class T> //class Foo { //}; // //Foo<int> getFoo(); // //int main() { // Foo<int> foo = getFoo(); // foo; // return 0; //} public void testTemplateTypeParameters_Bug331963() throws Exception { assertRefactoringSuccess(); } //A.cpp //namespace bar { // //template<class T> //class Foo { //}; // //} // //bar::Foo<int> getFoo(); // //int main() { // /*$*/getFoo()/*$$*/; // return 0; //} //==================== //namespace bar { // //template<class T> //class Foo { //}; // //} // //bar::Foo<int> getFoo(); // //int main() { // bar::Foo<int> foo = getFoo(); // foo; // return 0; //} public void testTemplateTypeParametersWithNamespace_Bug331963() throws Exception { assertRefactoringSuccess(); } //A.cpp // //struct Foo { // int getVarWithLongName(); //}; // //void bar() { // Foo f; // /*$*/f.getVarWithLongName()/*$$*/; //} //==================== // //struct Foo { // int getVarWithLongName(); //}; // //void bar() { // Foo f; // int varWithLongName = f.getVarWithLongName(); // varWithLongName; //} public void testSuggestedName_Bug330693_1() throws Exception { assertRefactoringSuccess(); } //A.cpp // //struct Foo { // int get(); //}; // //void bar() { // Foo f; // /*$*/f.get()/*$$*/; //} //==================== // //struct Foo { // int get(); //}; // //void bar() { // Foo f; // int get = f.get(); // get; //} public void testSuggestedName_Bug330693_2() throws Exception { assertRefactoringSuccess(); } //A.cpp // //int getA() { // return 0; //}; // //int getB(int a) { // return a; //} // //void bar() { // /*$*/getB(getA())/*$$*/; //} //==================== // //int getA() { // return 0; //}; // //int getB(int a) { // return a; //} // //void bar() { // int b = getB(getA()); // b; //} public void testSuggestedName_Bug335202_1() throws Exception { assertRefactoringSuccess(); } //A.cpp // //int getA() { // return 0; //}; // //int getB(int a) { // return a; //} // //int getC(int a) { // return a; //} // //void bar() { // getB(/*$*/getC(getA())/*$$*/); //} //==================== // //int getA() { // return 0; //}; // //int getB(int a) { // return a; //} // //int getC(int a) { // return a; //} // //void bar() { // int c = getC(getA()); // getB(c); //} public void testSuggestedName_Bug335202_2() throws Exception { assertRefactoringSuccess(); } //main.cpp //void foo() { // for (int n = 5 + 2; n < 10; ++n) // ; //} //==================== //void foo() { // int i = 5 + 2; // for (int n = i; n < 10; ++n) // ; //} //refScript.xml //<?xml version="1.0" encoding="UTF-8"?> //<session version="1.0"> //<refactoring comment="Extract 5 + 2" description="Extract Local Variable Refactoring" // fileName="file:${projectPath}/main.cpp" flags="4" // id="org.eclipse.cdt.internal.ui.refactoring.extractlocalvariable.ExtractLocalVariableRefactoring" // name="i" project="RegressionTestProject" selection="27,5"/> //</session> public void testLocalVariableFromForLoop() throws Exception { assertRefactoringSuccess(); } //main.c //void f(){ // int x = /*$*/2/*$$*/; //} //==================== //void f(){ // int i = 2; // int x = i; //} public void testSuggestedNameCFile_Bug412032() throws Exception { assertRefactoringSuccess(); } //main.c //int getSomething(int x) { return 0; } //int getSomething2(int x) { return 0; } // //void f(){ // /*$*/getSomething(getSomething2(0))/*$$*/; //} //==================== //int getSomething(int x) { return 0; } //int getSomething2(int x) { return 0; } // //void f(){ // int something = getSomething(getSomething2(0)); // something; //} public void testSuggestedNameCFile_Bug412032_2() throws Exception { assertRefactoringSuccess(); } //A.cpp //template<typename T> //struct Tpl {}; // //void func() { // Tpl<int(const char*, long int (*)(float))> t; // /*$*/t/*$$*/; //} //==================== //template<typename T> //struct Tpl {}; // //void func() { // Tpl<int(const char*, long int (*)(float))> t; // Tpl<int(const char*, long int (*)(float))> t0 = t; // t0; //} public void testTemplateWithFunctionArgument_487186() throws Exception { assertRefactoringSuccess(); } }