blob: 24987fce98e598b83efde3554d5c9395020760a4 [file] [log] [blame]
package org.eclipse.jdt.ui.tests.refactoring;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
import org.eclipse.jdt.internal.corext.refactoring.reorg.MoveRefactoring;
import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
public class MultiMoveTests extends RefactoringTest {
private static final Class clazz= MultiMoveTests.class;
private static final String REFACTORING_PATH= "MultiMove/";
public MultiMoveTests(String name) {
super(name);
}
public static Test suite() {
return new MySetup(new TestSuite(clazz));
}
protected String getRefactoringPath() {
return REFACTORING_PATH;
}
//---
private IPackageFragment createPackage(String name) throws Exception{
return getRoot().createPackageFragment(name, true, null);
}
private ICompilationUnit createCu(IPackageFragment pack, String cuPath, String cuName) throws Exception{
return createCU(pack, cuName, getFileContents(getRefactoringPath() + cuPath));
}
private void delete(IPackageFragment pack) throws Exception {
performDummySearch();
try {
if (pack.exists())
pack.delete(true, null);
} catch(JavaModelException e) {
//ignore
}
}
//--------
public void test0() throws Exception{
final String p1Name= "p1";
final String inDir= "/in/";
final String outDir= "/out/";
IPackageFragment packP1= createPackage(p1Name);
ICompilationUnit p1A= createCu(packP1, getName() + inDir + p1Name + "/A.java", "A.java");
ICompilationUnit p1B= createCu(packP1, getName() + inDir + p1Name + "/B.java", "B.java");
String p2Name= "p2";
IPackageFragment packP2= createPackage(p2Name);
ICompilationUnit p2C= createCu(packP2, getName() + inDir + p2Name + "/C.java", "C.java");
List elems= new ArrayList();
elems.add(p1A);
elems.add(p1B);
MoveRefactoring ref= new MoveRefactoring(elems, JavaPreferencesSettings.getCodeGenerationSettings());
ref.setDestination(packP2);
ref.setUpdateReferences(true);
RefactoringStatus status= performRefactoring(ref);
//-- checks
assertEquals("status should be ok here", null, status);
assertEquals("p1 files", 0, packP1.getChildren().length);
assertEquals("p2 files", 3, packP2.getChildren().length);
String expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/A.java");
assertEquals("incorrect update of A", expectedSource, packP2.getCompilationUnit("A.java").getSource());
expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/B.java");
assertEquals("incorrect update of B", expectedSource, packP2.getCompilationUnit("B.java").getSource());
expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/C.java");
assertEquals("incorrect update of C", expectedSource ,p2C.getSource());
delete(packP1);
delete(packP2);
}
public void test1() throws Exception{
final String p1Name= "p1";
final String p3Name= "p3";
final String inDir= "/in/";
final String outDir= "/out/";
IPackageFragment packP1= createPackage(p1Name);
IPackageFragment packP3= createPackage(p3Name);
ICompilationUnit p1A= createCu(packP1, getName() + inDir + p1Name + "/A.java", "A.java");
ICompilationUnit p3B= createCu(packP3, getName() + inDir + p3Name + "/B.java", "B.java");
String p2Name= "p2";
IPackageFragment packP2= createPackage(p2Name);
ICompilationUnit p2C= createCu(packP2, getName() + inDir + p2Name + "/C.java", "C.java");
List elems= new ArrayList();
elems.add(p1A);
elems.add(p3B);
MoveRefactoring ref= new MoveRefactoring(elems, JavaPreferencesSettings.getCodeGenerationSettings());
ref.setDestination(packP2);
ref.setUpdateReferences(true);
RefactoringStatus status= performRefactoring(ref);
//-- checks
assertEquals("status should be ok here", null, status);
assertEquals("p1 files", 0, packP1.getChildren().length);
assertEquals("p2 files", 3, packP2.getChildren().length);
assertEquals("p1 files", 0, packP3.getChildren().length);
String expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/A.java");
assertEquals("incorrect update of A", expectedSource, packP2.getCompilationUnit("A.java").getSource());
expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/B.java");
assertEquals("incorrect update of B", expectedSource, packP2.getCompilationUnit("B.java").getSource());
expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/C.java");
assertEquals("incorrect update of C", expectedSource ,p2C.getSource());
delete(packP1);
delete(packP2);
delete(packP3);
}
public void test2() throws Exception{
final String p1Name= "p1";
final String inDir= "/in/";
final String outDir= "/out/";
IPackageFragment packP1= createPackage(p1Name);
ICompilationUnit p1A= createCu(packP1, getName() + inDir + p1Name + "/A.java", "A.java");
createCu(packP1, getName() + inDir + p1Name + "/B.java", "B.java");
String p2Name= "p2";
IPackageFragment packP2= createPackage(p2Name);
ICompilationUnit p2C= createCu(packP2, getName() + inDir + p2Name + "/C.java", "C.java");
List elems= new ArrayList();
elems.add(p1A);
MoveRefactoring ref= new MoveRefactoring(elems, JavaPreferencesSettings.getCodeGenerationSettings());
ref.setDestination(packP2);
ref.setUpdateReferences(true);
RefactoringStatus status= performRefactoring(ref);
//-- checks
assertEquals("status should be ok here", null, status);
assertEquals("p1 files", 1, packP1.getChildren().length);
assertEquals("p2 files", 2, packP2.getChildren().length);
String expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/A.java");
assertEquals("incorrect update of A", expectedSource, packP2.getCompilationUnit("A.java").getSource());
expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p1Name + "/B.java");
assertEquals("incorrect update of B", expectedSource, packP1.getCompilationUnit("B.java").getSource());
expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/C.java");
assertEquals("incorrect update of C", expectedSource, p2C.getSource());
delete(packP1);
delete(packP2);
}
public void test3() throws Exception{
final String p1Name= "p1";
final String p3Name= "p3";
final String inDir= "/in/";
final String outDir= "/out/";
IPackageFragment packP1= createPackage(p1Name);
IPackageFragment packP3= createPackage(p3Name);
ICompilationUnit p1A= createCu(packP1, getName() + inDir + p1Name + "/Outer.java", "Outer.java");
createCu(packP3, getName() + inDir + p3Name + "/Test.java", "Test.java");
String p2Name= "p2";
IPackageFragment packP2= createPackage(p2Name);
List elems= new ArrayList();
elems.add(p1A);
MoveRefactoring ref= new MoveRefactoring(elems, JavaPreferencesSettings.getCodeGenerationSettings());
ref.setDestination(packP2);
ref.setUpdateReferences(true);
RefactoringStatus status= performRefactoring(ref);
//-- checks
assertEquals("status should be ok here", null, status);
assertEquals("p1 files", 0, packP1.getChildren().length);
assertEquals("p2 files", 1, packP2.getChildren().length);
assertEquals("p1 files", 1, packP3.getChildren().length);
String expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/Outer.java");
assertEquals("incorrect update of Outer", expectedSource, packP2.getCompilationUnit("Outer.java").getSource());
expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p3Name + "/Test.java");
assertEquals("incorrect update of Test", expectedSource, packP3.getCompilationUnit("Test.java").getSource());
delete(packP1);
delete(packP2);
delete(packP3);
}
}