package org.jboss.tools.cdi.bot.test.beans.openon.template;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.JobIsRunning;
import org.jboss.reddeer.core.handler.TableHandler;
import org.jboss.reddeer.swt.api.Shell;
import org.jboss.reddeer.swt.api.Table;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
import org.jboss.reddeer.swt.impl.table.DefaultTable;
import org.jboss.reddeer.workbench.impl.editor.TextEditor;
import org.jboss.tools.cdi.bot.test.CDITestBase;
import org.jboss.tools.cdi.reddeer.cdi.text.ext.hyperlink.AssignableBeansDialog;
import org.jboss.tools.cdi.reddeer.cdi.text.ext.hyperlink.xpl.HierarchyInformationControl;
import org.junit.Test;
public class BeanInjectOpenOnTemplate extends CDITestBase{
private static final Map<String,List<String>> beanInjections = new HashMap<String,List<String>>();
static{
beanInjections.put("myBean1", Arrays.asList("@Produces MyBean3.getMyBean1()",
"@Produces MyBean3.getMyBean1WithIMB2()","@Produces MyBean3.getMyBean2()",
"MyBean1","MyBean2"));
beanInjections.put("myBean2", Arrays.asList("@Produces MyBean3.getMyBean2()",
"MyBean2"));
beanInjections.put("myBean3", Arrays.asList("@Produces MyBean3.getMyBean1WithQ1()",
"@Produces MyBean3.getMyBean1WithIMB2Q1()","@Produces MyBean3.getMyBean2WithQ1()",
"MyBean4"));
beanInjections.put("myBean4", Arrays.asList("@Produces MyBean3.getMyBean2WithQ1()",
"MyBean4"));
beanInjections.put("myBean5", Arrays.asList("@Produces MyBean3.getMyBean1WithQ2()",
"@Produces MyBean3.getMyBean1WithIMB2Q2()","@Produces MyBean3.getMyBean2WithQ2()",
"MyBean4","MyBean5"));
beanInjections.put("myBean6", Arrays.asList("@Produces MyBean3.getMyBean2WithQ2()",
"MyBean4","MyBean5"));
beanInjections.put("myBean7", Arrays.asList("@Produces MyBean3.getMyBean1()",
"@Produces MyBean3.getMyBean1WithIMB2()",
"@Produces MyBean3.getMyBean1WithIMB2Q1()","@Produces MyBean3.getMyBean1WithIMB2Q2()",
"@Produces MyBean3.getMyBean1WithQ1()", "@Produces MyBean3.getMyBean1WithQ2()",
"@Produces MyBean3.getMyBean2()", "@Produces MyBean3.getMyBean2WithQ1()",
"@Produces MyBean3.getMyBean2WithQ2()",
"MyBean1","MyBean2","MyBean4","MyBean5"));
beanInjections.put("myBean8", Arrays.asList("@Produces MyBean3.getMyBean2()",
"@Produces MyBean3.getMyBean2WithQ1()","@Produces MyBean3.getMyBean2WithQ2()",
"MyBean2","MyBean4","MyBean5"));
beanInjections.put("myBean9", Arrays.asList("MyBean4"));
beanInjections.put("myBean10", Arrays.asList("MyBean4"));
beanInjections.put("myBean11", Arrays.asList("MyBean4"));
}
@Test
public void testBeanInjectOpenOn() {
prepareInjectedPointsComponents();
new WaitWhile(new JobIsRunning());
for(String injectionPoint: beanInjections.keySet()){
checkInjectedPoint(injectionPoint);
openInjectionPoint(injectionPoint);
}
}
private void prepareInjectedPointsComponents() {
beansHelper.createQualifier("Q1", getPackageName(), false, false);
beansHelper.createQualifier("Q2", getPackageName(), false, false);
beansHelper.createBean("MyBean1", getPackageName(), false, false ,false, false,
false, true,false,null, null);
List<String> classes = Arrays.asList("MyBean2","MyBean3","MyBean4","MyBean5","MainBean");
for(String s: classes){
beansHelper.createBean(s, getPackageName(), false, false ,false, false,
false, true,false,null,null);
editResourceUtil.replaceClassContentByResource(s+".java",
readFile("resources/openon/InjectedPoints/"+s+".java.cdi"), false);
}
}
private void checkInjectedPoint(String injectionPoint) {
TextEditor e = new TextEditor("MainBean.java");
e.selectText(injectionPoint);
List<String> beans = beanInjections.get(injectionPoint);
if(beans.size() == 1){
openOnHelper.selectProposal("MainBean", injectionPoint, "Open @Inject Bean "+beans.get(0));
TextEditor te = new TextEditor();
assertEquals(beans.get(0)+".java",te.getTitle());
assertEquals(beans.get(0),te.getSelectedText());
} else {
openOnHelper.selectProposal("MainBean", injectionPoint, "Show All Assignable Beans...");
Shell s = new DefaultShell("Assignable Beans");
Table eventsTable = new DefaultTable();
String packageProjectPath = getPackageName() + " - /" + getProjectName() + "/src";
assertEquals(beans.size(), eventsTable.getItems().size());
for(String bean : beans){
assertTrue(eventsTable.containsItem(
bean+" - " + packageProjectPath));
}
s.close();
}
}
private void openInjectionPoint(String injectionPoint){
TextEditor e = new TextEditor("MainBean.java");
e.selectText(injectionPoint);
List<String> beans = beanInjections.get(injectionPoint);
//no need to test with only one assignable bean, was tested previously
if(beans.size() > 1){
openOnHelper.selectProposal("MainBean", injectionPoint,
"Show All Assignable Beans...");
AssignableBeansDialog ad = new AssignableBeansDialog();
List<String> proposals = ad.getAllBeans();
ad.close();
for(String proposal: proposals){
openOnHelper.selectProposal("MainBean", injectionPoint,
"Show All Assignable Beans...");
ad = new AssignableBeansDialog();
Table observerTable = new DefaultTable();
//observerTable.getItem(proposal).select();
TableHandler.getInstance().setDefaultSelection(observerTable.getItem(proposal).getSWTWidget());
if(proposal.contains("@")){
String[] splitted = proposal.split(" ");
String[] splitted1 = splitted[1].split("\\.");
TextEditor te = new TextEditor();
assertEquals(splitted1[0]+".java",te.getTitle());
assertEquals(splitted1[1].replace("()", ""),te.getSelectedText());
} else {
String[] splitted = proposal.split(" ");
TextEditor te = new TextEditor();
assertEquals(splitted[0]+".java",te.getTitle());
assertEquals(splitted[0],te.getSelectedText());
}
}
}
}
}