blob: af02008543e806007c466ca0360a522e347a0412 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 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.Arrays;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
import org.eclipse.jdt.internal.corext.refactoring.RefactoringAvailabilityTester;
import org.eclipse.jdt.internal.corext.refactoring.structure.ExtractSupertypeProcessor;
import org.eclipse.jdt.internal.corext.refactoring.structure.ExtractSupertypeRefactoring;
import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
/**
* Test suite for the extract supertype tests.
*
* Note: Extract Supertype heavily relies on PullUpRefactoring and its tests
*/
public final class ExtractSupertypeTests extends RefactoringTest {
private static final Class clazz= ExtractSupertypeTests.class;
private static final String REFACTORING_PATH= "ExtractSupertype/";
private static ExtractSupertypeRefactoring createRefactoring(IMember[] members) throws JavaModelException {
IJavaProject project= null;
if (members != null && members.length > 0)
project= members[0].getJavaProject();
if (RefactoringAvailabilityTester.isExtractSupertypeAvailable(members)) {
final CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings(project);
settings.createComments= false;
return new ExtractSupertypeRefactoring(new ExtractSupertypeProcessor(members, settings));
}
return null;
}
private static IMethod[] getMethods(IMember[] members) {
List l= Arrays.asList(JavaElementUtil.getElementsOfType(members, IJavaElement.METHOD));
return (IMethod[]) l.toArray(new IMethod[l.size()]);
}
public static Test setUpTest(Test someTest) {
return new Java15Setup(someTest);
}
public static Test suite() {
return new Java15Setup(new TestSuite(clazz));
}
public ExtractSupertypeTests(String name) {
super(name);
}
protected String getRefactoringPath() {
return REFACTORING_PATH;
}
private void helper1(String[] methodNames, String[][] signatures, boolean deleteAllInSourceType, boolean deleteAllMatchingMethods) throws Exception {
ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
try {
IType type= getType(cu, "B");
IMethod[] methods= getMethods(type, methodNames, signatures);
ExtractSupertypeRefactoring refactoring= createRefactoring(methods);
ExtractSupertypeProcessor processor= refactoring.getExtractSupertypeProcessor();
processor.setMembersToMove(methods);
assertTrue("activation", refactoring.checkInitialConditions(new NullProgressMonitor()).isOK());
processor.setTypesToExtract(new IType[] { type});
processor.setTypeName("Z");
processor.setCreateMethodStubs(true);
processor.setInstanceOf(false);
processor.setReplace(true);
if (deleteAllInSourceType)
processor.setDeletedMethods(methods);
if (deleteAllMatchingMethods)
processor.setDeletedMethods(getMethods(processor.getMatchingElements(new NullProgressMonitor(), false)));
RefactoringStatus status= refactoring.checkFinalConditions(new NullProgressMonitor());
assertTrue("precondition was supposed to pass", !status.hasError());
performChange(refactoring, false);
String expected= getFileContents(getOutputTestFileName("A"));
String actual= cu.getSource();
assertEqualLines(expected, actual);
expected= getFileContents(getOutputTestFileName("Z"));
ICompilationUnit unit= getPackageP().getCompilationUnit("Z.java");
if (!unit.exists())
assertTrue("extracted compilation unit does not exist", false);
actual= unit.getBuffer().getContents();
assertEqualLines(expected, actual);
} finally {
performDummySearch();
cu.delete(false, null);
}
}
public void test0() throws Exception {
helper1(new String[] { "m"}, new String[][] { new String[0]}, true, false);
}
public void test1() throws Exception {
helper1(new String[] { "m"}, new String[][] { new String[0]}, true, false);
}
public void test2() throws Exception {
helper1(new String[] { "m", "n"}, new String[][] { new String[0], new String[0]}, true, false);
}
public void test3() throws Exception {
helper1(new String[] { "m", "n"}, new String[][] { new String[0], new String[0]}, true, false);
}
public void test4() throws Exception {
helper1(new String[] { "m"}, new String[][] { new String[0]}, true, false);
}
}