package org.jboss.tools.cdi.bot.test.beans.named.teplate; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import org.jboss.reddeer.common.wait.AbstractWait; import org.jboss.reddeer.common.wait.TimePeriod; import org.jboss.reddeer.swt.impl.menu.ContextMenu; import org.jboss.reddeer.swt.impl.shell.DefaultShell; import org.jboss.reddeer.workbench.impl.editor.DefaultEditor; import org.jboss.reddeer.workbench.impl.editor.TextEditor; import org.jboss.tools.cdi.bot.test.CDITestBase; import org.jboss.tools.cdi.reddeer.cdi.ui.wizard.CDIRefactorWizard; import org.jboss.tools.cdi.reddeer.uiutils.CollectionsUtil; import org.jboss.tools.common.reddeer.label.IDELabel; import org.jboss.tools.jst.reddeer.web.ui.NewXHTMLFileWizardPage; import org.jboss.tools.jst.reddeer.web.ui.NewXHTMLWizard; import org.junit.After; import org.junit.Test; public abstract class NamedRefactoringTemplate extends CDITestBase {//extends JSFTestBase{ private static final String MANAGED_BEAN_1 = "ManagedBean1"; private static final String MANAGED_BEAN_2 = "ManagedBean2"; private static final String INDEX_XHTML_1= "index1.xhtml"; private static final String INDEX_XHTML_2= "index2.xhtml"; private static final String INDEX_XHTML_3= "index3.xhtml"; private static final String NEW_NAMED_PARAM = "bean2"; @After public void waitForJobs() { deleteAllProjects(); } @Test public void testNamedAnnotationWithParamRefactor() { beansHelper.createClass(MANAGED_BEAN_1, getPackageName()); editResourceUtil.replaceClassContentByResource(MANAGED_BEAN_1+".java", readFile("resources/jsf/ManagedBeanParamNamed.java.cdi"), false); createXHTMLPage(INDEX_XHTML_1); createXHTMLPage(INDEX_XHTML_3); Collection<String> affectedFiles = changeNamedAnnotation(MANAGED_BEAN_1, NEW_NAMED_PARAM); Collection<String> expectedAffectedFiles = Arrays.asList( MANAGED_BEAN_1 + ".java", INDEX_XHTML_1, INDEX_XHTML_3); for (String affectedFile : affectedFiles) { new DefaultEditor(affectedFile).save(); } assertEquals(expectedAffectedFiles.size(), affectedFiles.size()); assertTrue(CollectionsUtil.compareTwoCollectionsEquality( expectedAffectedFiles, affectedFiles)); assertTrue(new TextEditor(MANAGED_BEAN_1 + ".java").getText(). contains("@Named(\"" + NEW_NAMED_PARAM + "\"")); assertTrue(new TextEditor(INDEX_XHTML_1).getText(). contains("#{" + NEW_NAMED_PARAM)); assertTrue(new TextEditor(INDEX_XHTML_3).getText(). contains("#{" + NEW_NAMED_PARAM)); } @Test public void testNamedAnnotationWithoutParamRefactor() { beansHelper.createClass(MANAGED_BEAN_2, getPackageName()); editResourceUtil.replaceClassContentByResource(MANAGED_BEAN_2+".java", readFile("resources/jsf/ManagedBeanNoParamNamed.java.cdi"), false); createXHTMLPage(INDEX_XHTML_2); createXHTMLPage(INDEX_XHTML_3); Collection<String> affectedFiles = changeNamedAnnotation(MANAGED_BEAN_2, NEW_NAMED_PARAM); Collection<String> expectedAffectedFiles = Arrays.asList( MANAGED_BEAN_2 + ".java", INDEX_XHTML_2, INDEX_XHTML_3); for (String affectedFile : affectedFiles) { new DefaultEditor(affectedFile).save(); } assertEquals(expectedAffectedFiles.size(), affectedFiles.size()); assertTrue(CollectionsUtil.compareTwoCollectionsEquality( expectedAffectedFiles, affectedFiles)); assertTrue(new TextEditor(MANAGED_BEAN_2 + ".java").getText(). contains("@Named(\"" + NEW_NAMED_PARAM + "\"")); assertTrue(new TextEditor(INDEX_XHTML_2).getText(). contains("#{" + NEW_NAMED_PARAM)); assertTrue(new TextEditor(INDEX_XHTML_3).getText(). contains("#{" + NEW_NAMED_PARAM)); } @Test public void testNamedAnnotationWithoutELRefactoring() { beansHelper.createClass(MANAGED_BEAN_2, getPackageName()); editResourceUtil.replaceClassContentByResource(MANAGED_BEAN_2+".java", readFile("resources/jsf/ManagedBeanNoParamNamed.java.cdi"), false); createXHTMLPage(INDEX_XHTML_2); Collection<String> affectedFiles = changeNamedAnnotation(MANAGED_BEAN_2, NEW_NAMED_PARAM); Collection<String> expectedAffectedFiles = Arrays.asList(MANAGED_BEAN_2 + ".java", INDEX_XHTML_2); for (String affectedFile : affectedFiles) { new DefaultEditor(affectedFile).save(); } assertEquals(expectedAffectedFiles.size(), affectedFiles.size()); assertTrue(CollectionsUtil.compareTwoCollectionsEquality( expectedAffectedFiles, affectedFiles)); assertTrue(new TextEditor(MANAGED_BEAN_2 + ".java").getText(). contains("@Named(\"" + NEW_NAMED_PARAM + "\"")); assertTrue(new TextEditor(INDEX_XHTML_2).getText(). contains("#{" + NEW_NAMED_PARAM)); } private void createXHTMLPage(String pageName) { NewXHTMLWizard xhtmlWizard = new NewXHTMLWizard(); xhtmlWizard.open(); NewXHTMLFileWizardPage page = new NewXHTMLFileWizardPage(); page.setParentFolder(getProjectName() + "/" + IDELabel.WebProjectsTree.WEB_CONTENT + "/pages"); page.setFileName(pageName); xhtmlWizard.finish(); editResourceUtil.replaceClassContentByResource(pageName, readFile("resources/jsf/"+pageName+".cdi"), false); } private List<String> changeNamedAnnotation(String className, String newNamed) { List<String> affectedFiles = new ArrayList<String>(); String text = null; TextEditor activeEditor = new TextEditor(className+".java"); for(int i=0;i<activeEditor.getNumberOfLines();i++){ String line = activeEditor.getTextAtLine(i); if (line.contains("@Named") && !line.contains("//") && !line.contains("*")) { text = line; break; } } if (text == null) { fail("There is no Named annotation in class:" + className); } String parsed = null; if (!text.contains("\"")) { parsed= className.substring(0,1).toLowerCase() + className.substring(1); } else { parsed= text.split("\"")[1]; } String renameContextMenuText = "Rename '" + parsed + "' Named Bean "; //TODO new TextEditor(className + ".java").selectText(text); AbstractWait.sleep(TimePeriod.SHORT); new ContextMenu(IDELabel.Menu.CDI_REFACTOR,renameContextMenuText).select(); new DefaultShell("Refactoring"); CDIRefactorWizard cdiRefactorWizard = new CDIRefactorWizard(); cdiRefactorWizard.setName(newNamed); cdiRefactorWizard.next(); affectedFiles = cdiRefactorWizard.getAffectedFiles(); cdiRefactorWizard.finish(); return affectedFiles; } }