blob: 12798a3a289824322818abb069c010c956a015ac [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2016 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.ui.tests.refactoring;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Test;
import org.eclipse.ltk.core.refactoring.Refactoring;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.internal.corext.refactoring.structure.ExtractInterfaceProcessor;
import org.eclipse.jdt.ui.tests.core.NoSuperTestsSuite;
import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
public class ExtractInterfaceTests18 extends ExtractInterfaceTests {
private static final Class<ExtractInterfaceTests18> clazz= ExtractInterfaceTests18.class;
private static final String REFACTORING_PATH= "ExtractInterface18/";
public ExtractInterfaceTests18(String name) {
super(name);
}
public static Test suite() {
return new Java18Setup(new NoSuperTestsSuite(clazz));
}
public static Test setUpTest(Test someTest) {
return new Java18Setup(someTest);
}
@Override
protected String getRefactoringPath() {
return REFACTORING_PATH;
}
public void testExtractInterfaceFromInterface1() throws Exception {
validatePassingTest("A", "B", true, true);
}
public void testExtractInterfaceFromInterface2() throws Exception {
String className= "A";
String extendingInterfaceName= "I1";
String newInterfaceName= "B";
IType clas= getType(createCUfromTestFile(getPackageP(), getTopLevelTypeName(className)), className);
ICompilationUnit cu= clas.getCompilationUnit();
IPackageFragment pack= (IPackageFragment)cu.getParent();
getType(createCUfromTestFile(getPackageP(), getTopLevelTypeName(extendingInterfaceName)), extendingInterfaceName);
IPackageFragmentRoot root= RefactoringTestSetup.getDefaultSourceFolder();
assertNotNull(root);
IPackageFragment p2= root.createPackageFragment("p2", true, null);
getType(createCUfromTestFile(p2, getTopLevelTypeName("I2")), "I2");
ExtractInterfaceProcessor processor= new ExtractInterfaceProcessor(clas, JavaPreferencesSettings.getCodeGenerationSettings(clas.getJavaProject()));
Refactoring ref= new ProcessorBasedRefactoring(processor);
processor.setTypeName(newInterfaceName);
assertEquals("interface name should be accepted", RefactoringStatus.OK, processor.checkTypeName(newInterfaceName).getSeverity());
IMember[] extractableMembers= processor.getExtractableMembers();
final IMember[] members= new IMember[extractableMembers.length - 1];
List<IMember> list= new ArrayList<>();
for (IMember iMember : extractableMembers) {
if (!(iMember instanceof IField)) {
list.add(iMember);
}
}
processor.setExtractedMembers(list.toArray(members));
processor.setReplace(true);
processor.setAnnotations(false);
RefactoringStatus performRefactoring= performRefactoring(ref);
assertEquals("was supposed to pass", null, performRefactoring);
assertEqualLines("incorrect changes in " + className,
getFileContents(getOutputTestFileName(className)),
cu.getSource());
ICompilationUnit interfaceCu= pack.getCompilationUnit(newInterfaceName + ".java");
assertEqualLines("incorrect interface created",
getFileContents(getOutputTestFileName(newInterfaceName)),
interfaceCu.getSource());
}
public void testExtractInterfaceFromClass() throws Exception {
validatePassingTest("A", "B", true, true);
}
// bug 394551
public void testExtractInterfaceFromClass2() throws Exception {
fGenerateAnnotations= true;
String[] names= new String[] { "m" };
String[][] signatures= new String[][] { new String[0], new String[0] };
validatePassingTest("A", new String[] { "A" }, "I", true, names, signatures, null);
}
public void testExtractInterfaceFromAbstractClass() throws Exception {
validatePassingTest("A", "B", true, true);
}
public void testLambda1() throws Exception {
// bug 488420
String[] names= new String[] { "m1" };
String[][] signatures= new String[][] { new String[0] };
validatePassingTest("X", new String[] { "X", "Util" }, "I", true, names, signatures, null);
}
public void testLambda2() throws Exception {
// bug 488420
String[] names= new String[] { "m1" };
String[][] signatures= new String[][] { new String[0] };
validatePassingTest("X", new String[] { "X", "Util" }, "I", true, names, signatures, null);
}
public void testMethodRef1() throws Exception {
// bug 489170
String[] names= new String[] { "methodN" };
String[][] signatures= new String[][] { new String[0] };
validatePassingTest("X", new String[] { "X", "Util" }, "I", true, names, signatures, null);
}
public void testMethodRef2() throws Exception {
// bug 489170
String[] names= new String[] { "m1" };
String[][] signatures= new String[][] { new String[0] };
validatePassingTest("X", new String[] { "X", "Util" }, "I", true, names, signatures, null);
}
public void testMethodRef3() throws Exception {
// bug 489170
String[] names= new String[] { "m1" };
String[][] signatures= new String[][] { new String[0] };
validatePassingTest("X", new String[] { "X", "Util" }, "I", true, names, signatures, null);
}
}