/*******************************************************************************
* Copyright (c) 2012 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.cdi.core.test.tck;
import java.util.ArrayList;
import java.util.Collection;
import javax.inject.Named;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.BadLocationException;
import org.jboss.tools.cdi.core.CDICoreNature;
import org.jboss.tools.cdi.core.CDICorePlugin;
import org.jboss.tools.cdi.core.IBean;
import org.jboss.tools.cdi.core.ICDIProject;
import org.jboss.tools.cdi.internal.core.refactoring.RenameNamedBeanProcessor;
import org.jboss.tools.common.base.test.AbstractRefactorTest;
import org.jboss.tools.common.base.test.RenameParticipantTestUtil.TestChangeStructure;
import org.jboss.tools.common.base.test.RenameParticipantTestUtil.TestTextChange;
public class NamedBeanRefactoringTest extends TCKTest {
private static final String FILE_NAME1 = "JavaSource/org/jboss/jsr299/tck/tests/jbt/refactoring/Gamme.java";
private static final String FILE_NAME2 = "JavaSource/org/jboss/jsr299/tck/tests/jbt/refactoring/Generator.java";
private static final String FILE_NAME3 = "WebContent/tests/jbt/refactoring/HomePage.xhtml";
private static final String FILE_NAME4 = "WebContent/tests/jbt/refactoring/index.jsp";
private static final String newName = "abcde";
private static final int NUM_OF_CHAR = 5;
public void testNamedBeanClassRename() throws CoreException, BadLocationException {
ArrayList<TestChangeStructure> list = new ArrayList<TestChangeStructure>();
IFile sourceFile = tckProject.getProject().getFile(FILE_NAME1);
TestChangeStructure structure = new TestChangeStructure(tckProject, FILE_NAME1);
TestTextChange change = new TestTextChange("@Named", 15, "@Named(\"abcde\")");
structure.addTextChange(change);
list.add(structure);
structure = new TestChangeStructure(tckProject, FILE_NAME2);
change = new TestTextChange(/*526*/"gamme}", NUM_OF_CHAR, newName);
structure.addTextChange(change);
list.add(structure);
structure = new TestChangeStructure(tckProject, FILE_NAME3);
change = new TestTextChange(/*789*/"gamme.check}", NUM_OF_CHAR, newName);
structure.addTextChange(change);
change = new TestTextChange(/*924*/"gamme.reset}", NUM_OF_CHAR, newName);
structure.addTextChange(change);
list.add(structure);
structure = new TestChangeStructure(tckProject, FILE_NAME4);
change = new TestTextChange(/*293*/"gamme.biggest}", NUM_OF_CHAR, newName);
structure.addTextChange(change);
list.add(structure);
IBean bean = getBean(sourceFile, "gamme");
assertNotNull("Can't get the bean.", bean);
RenameNamedBeanProcessor processor = new RenameNamedBeanProcessor(bean);
processor.setNewName(newName);
AbstractRefactorTest.checkRename(processor, list);
}
public void testNamedBeanProducerFieldRename() throws CoreException, BadLocationException {
ArrayList<TestChangeStructure> list = new ArrayList<TestChangeStructure>();
TestChangeStructure structure = new TestChangeStructure(tckProject, "JavaSource/org/jboss/jsr299/tck/tests/jbt/refactoring/ProducerFieldBean.java");
TestTextChange change = new TestTextChange("@Named(\"sField\")", 16, "@Named(\"uField\")");
structure.addTextChange(change);
change = new TestTextChange("sField.charAt(0)}", 6, "uField");
structure.addTextChange(change);
list.add(structure);
IFile sourceFile = tckProject.getProject().getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/refactoring/ProducerFieldBean.java");
IBean bean = getBean(sourceFile, "sField");
assertNotNull("Can't get the bean.", bean);
RenameNamedBeanProcessor processor = new RenameNamedBeanProcessor(bean);
processor.setNewName("uField");
AbstractRefactorTest.checkRename(processor, list);
}
public void testNamedBeanProducerMethodRename() throws CoreException, BadLocationException {
ArrayList<TestChangeStructure> list = new ArrayList<TestChangeStructure>();
TestChangeStructure structure = new TestChangeStructure(tckProject, "JavaSource/org/jboss/jsr299/tck/tests/jbt/refactoring/ProducerMethodBean.java");
TestTextChange change = new TestTextChange("@Named(\"infoMethod\")", 20, "@Named(\"memoMethod\")");
structure.addTextChange(change);
change = new TestTextChange("infoMethod.charAt(0)}", 10, "memoMethod");
structure.addTextChange(change);
list.add(structure);
IFile sourceFile = tckProject.getProject().getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/refactoring/ProducerMethodBean.java");
IBean bean = getBean(sourceFile, "infoMethod");
assertNotNull("Can't get the bean.", bean);
RenameNamedBeanProcessor processor = new RenameNamedBeanProcessor(bean);
processor.setNewName("memoMethod");
AbstractRefactorTest.checkRename(processor, list);
}
private IBean getBean(IFile file, String name) {
CDICoreNature cdiNature = CDICorePlugin.getCDI(file.getProject(), true);
assertNotNull("Can't get CDI nature.", cdiNature);
ICDIProject cdiProject = cdiNature.getDelegate();
assertNotNull("Can't get CDI project.", cdiProject);
Collection<IBean> beans = cdiProject.getBeans(file.getFullPath());
for (IBean bean : beans) {
if (bean.getName() != null && name.equals(bean.getName())) {
return bean;
}
}
return null;
}
}