/******************************************************************************* * Copyright (c) 2010-2011 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.bot.test.wizard.template; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.jboss.reddeer.common.wait.WaitWhile; import org.jboss.reddeer.core.condition.JobIsRunning; import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer; import org.jboss.reddeer.swt.impl.button.CancelButton; import org.jboss.reddeer.swt.impl.button.PushButton; import org.jboss.reddeer.workbench.impl.editor.TextEditor; import org.jboss.tools.cdi.bot.test.CDITestBase; import org.jboss.tools.cdi.reddeer.cdi.ui.NewAnnotationLiteralCreationWizard; import org.jboss.tools.cdi.reddeer.cdi.ui.NewBeanCreationWizard; import org.jboss.tools.cdi.reddeer.cdi.ui.NewBeansXMLCreationWizard; import org.jboss.tools.cdi.reddeer.cdi.ui.NewDecoratorCreationWizard; import org.jboss.tools.cdi.reddeer.cdi.ui.NewInterceptorBindingCreationWizard; import org.jboss.tools.cdi.reddeer.cdi.ui.NewInterceptorCreationWizard; import org.jboss.tools.cdi.reddeer.cdi.ui.NewQualifierCreationWizard; import org.jboss.tools.cdi.reddeer.cdi.ui.NewScopeCreationWizard; import org.jboss.tools.cdi.reddeer.cdi.ui.NewStereotypeCreationWizard; import org.jboss.tools.cdi.reddeer.common.model.ui.editor.EditorPartWrapper; import org.junit.Before; import org.junit.Test; /** * Test checks all CDI components wizardExts * * @author Lukas Jungmann * @author jjankovi */ //TODO public class WizardTemplate extends CDITestBase { @Before public void setMode(){ EditorPartWrapper beans = beansXMLHelper.openBeansXml(PROJECT_NAME); beans.setBeanDiscoveryMode("all"); beans.close(true); } @Override public void waitForJobs() { new WaitWhile(new JobIsRunning()); /** * needed for creating non-dependant components */ ProjectExplorer pe = new ProjectExplorer(); pe.open(); pe.getProject(getProjectName()).select(); } @Test public void testComponentsWizards() { testQualifier(); testScope(); testIBinding(); testStereotype(); testDecorator(); testInterceptor(); testBean(); testAnnLiteral(); testBeansXml(); } private void testQualifier() { NewQualifierCreationWizard qw = new NewQualifierCreationWizard(); qw.open(); qw.setName("Q1"); qw.setPackage(getPackageName()); qw.setInherited(false); qw.setGenerateComments(false); qw.finish(); TextEditor e = new TextEditor(); assertTrue(("Q1.java").equals(e.getTitle())); String code = e.getText(); assertTrue(code.contains("@Qualifier")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE, METHOD, PARAMETER, FIELD })")); assertFalse(code.contains("@Inherited")); assertFalse(code.startsWith("/**")); qw.open(); qw.setName("Q2"); qw.setPackage(getPackageName()); qw.setInherited(true); qw.setGenerateComments(true); qw.finish(); e = new TextEditor(); assertTrue(("Q2.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("@Qualifier")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE, METHOD, PARAMETER, FIELD })")); assertTrue(code.contains("@Inherited")); assertTrue(code.startsWith("/**")); } private void testScope() { NewScopeCreationWizard sw = new NewScopeCreationWizard(); sw.open(); sw.setName("Scope1"); sw.setPackage(getPackageName()); sw.setInherited(true); sw.setGenerateComments(false); sw.setNormalScope(true); sw.setPassivating(false); sw.finish(); TextEditor e = new TextEditor(); assertTrue(("Scope1.java").equals(e.getTitle())); String code = e.getText(); assertTrue(code.contains("@NormalScope")); assertFalse(code.contains("@Scope")); assertFalse(code.contains("passivating")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE, METHOD, FIELD })")); assertTrue(code.contains("@Inherited")); assertFalse(code.startsWith("/**")); sw.open(); sw.setName("Scope2"); sw.setPackage(getPackageName()); sw.setInherited(false); sw.setGenerateComments(true); sw.setNormalScope(true); sw.setPassivating(true); sw.finish(); e = new TextEditor(); assertTrue(("Scope2.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("@NormalScope(passivating = true)")); assertFalse(code.contains("@Scope")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE, METHOD, FIELD })")); assertFalse(code.contains("@Inherited")); assertTrue(code.startsWith("/**")); sw.open(); sw.setName("Scope3"); sw.setPackage(getPackageName()); sw.setInherited(false); sw.setGenerateComments(true); sw.setNormalScope(false); sw.setPassivating(false); sw.finish(); e = new TextEditor(); assertTrue(("Scope3.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("@Scope")); assertFalse(code.contains("@NormalScope")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE, METHOD, FIELD })")); assertFalse(code.contains("@Inherited")); assertTrue(code.startsWith("/**")); } private void testIBinding() { NewInterceptorBindingCreationWizard bw = new NewInterceptorBindingCreationWizard(); bw.open(); bw.setName("B1"); bw.setPackage(getPackageName()); bw.setInherited(true); bw.setGenerateComments(false); //assertEquals(2, bw.getTargets().size()); bw.finish(); TextEditor e = new TextEditor(); assertTrue(("B1.java").equals(e.getTitle())); String code = e.getText(); assertTrue(code.contains("@InterceptorBinding")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE, METHOD })")); assertTrue(code.contains("@Inherited")); assertFalse(code.startsWith("/**")); bw.open(); bw.setName("B2"); bw.setPackage(getPackageName()); bw.setTarget("TYPE"); bw.setInherited(false); bw.setGenerateComments(true); bw.finish(); e = new TextEditor(); assertTrue(("B2.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("@InterceptorBinding")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE })")); assertFalse(code.contains("@Inherited")); assertTrue(code.startsWith("/**")); bw.open(); bw.setName("B3"); bw.setPackage(getPackageName()); bw.setTarget("TYPE"); bw.setInherited(false); bw.setGenerateComments(true); bw.finish(); e = new TextEditor(); assertTrue(("B3.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("@InterceptorBinding")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE })")); assertFalse(code.contains("@Inherited")); assertTrue(code.startsWith("/**")); bw.open(); bw.setName("B4"); bw.setPackage(getPackageName()); bw.setTarget("TYPE"); bw.setInherited(true); bw.setGenerateComments(false); bw.addInterceptorBindings(getPackageName()+".B2"); bw.finish(); e = new TextEditor(); assertTrue(("B4.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("@InterceptorBinding")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE })")); assertTrue(code.contains("@Inherited")); assertFalse(code.startsWith("/**")); assertTrue(code.contains("@B2")); } private void testStereotype() { NewStereotypeCreationWizard sw = new NewStereotypeCreationWizard(); sw.open(); sw.setName("S1"); sw.setPackage(getPackageName()); sw.setInherited(false); sw.setNamed(false); sw.setAlternative(false); sw.setRegisterInBeans(false); sw.setGenerateComments(false); //assertEquals(9, sw.getScopes().size()); //assertEquals(5, sw.getTargets().size()); sw.finish(); TextEditor e = new TextEditor(); assertTrue(("S1.java").equals(e.getTitle())); String code = e.getText(); assertTrue(code.contains("@Stereotype")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE, METHOD, FIELD })")); assertFalse(code.contains("@Named")); assertFalse(code.contains("@Alternative")); assertFalse(code.contains("@Inherited")); assertFalse(code.startsWith("/**")); sw.open(); sw.setName("S2"); sw.setPackage(getPackageName()); sw.setScope("@Scope3"); sw.setTarget("FIELD"); sw.setInherited(true); sw.setNamed(true); sw.setAlternative(true); sw.setRegisterInBeans(false); sw.setGenerateComments(true); sw.finish(); e = new TextEditor(); assertTrue(("S2.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("@Stereotype")); assertTrue(code.contains("@Scope3")); assertTrue(code.contains("@Named")); assertTrue(code.contains("@Alternative")); assertTrue(code.contains("@Inherited")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ FIELD })")); assertTrue(code.startsWith("/**")); sw.open(); sw.setName("S3"); sw.setPackage(getPackageName()); sw.setInherited(false); sw.setNamed(false); sw.setAlternative(true); sw.setRegisterInBeans(false); sw.setGenerateComments(false); sw.addInterceptorBindings(getPackageName() + ".B1"); sw.addStereoptypes(getPackageName() + ".S1"); sw.finish(); e = new TextEditor(); assertTrue(("S3.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("@Stereotype")); assertFalse(code.contains("@Scope3")); assertFalse(code.contains("@Named")); assertTrue(code.contains("@Alternative")); assertTrue(code.contains("@B1")); assertTrue(code.contains("@S1")); assertTrue(code.contains("@Retention(RUNTIME)")); assertTrue(code.contains("@Target({ TYPE })")); assertFalse(code.contains("@Inherited")); assertFalse(code.startsWith("/**")); } private void testDecorator() { NewDecoratorCreationWizard dw = new NewDecoratorCreationWizard(); dw.open(); dw.setName(""); dw.setPackage(getPackageName()); dw.addDecoratedTypeInterfaces("java.lang.Comparable"); dw.setPublic(true); dw.setAbstract(true); dw.setFinal(false); dw.setGenerateComments(false); dw.finish(); String code = new TextEditor("ComparableDecorator.java").getText(); assertTrue(code.contains("@Decorator")); assertTrue(code.contains("abstract class")); assertTrue(code.contains("@Delegate")); assertTrue(code.contains("@Inject")); assertTrue(code.contains("@Any")); assertTrue(code.contains("private Comparable<T> comparable;")); assertFalse(code.contains("final")); assertFalse(code.startsWith("/**")); dw.open(); dw.setName(""); dw.setPackage(getPackageName()); dw.addDecoratedTypeInterfaces("java.util.Map"); dw.setDelegateFieldName("field"); dw.setPublic(false); dw.setAbstract(false); dw.setFinal(true); dw.setGenerateComments(true); dw.finish(); code = new TextEditor("MapDecorator.java").getText(); assertTrue(code.contains("@Decorator")); assertFalse(code.contains("abstract")); assertTrue(code.contains("@Delegate")); assertTrue(code.contains("@Inject")); assertTrue(code.contains("@Any")); assertTrue(code.contains("private Map<K, V> field;")); assertTrue(code.contains("final class")); assertTrue(code.startsWith("/**")); } private void testInterceptor() { NewInterceptorCreationWizard iw = new NewInterceptorCreationWizard(); iw.open(); iw.setName("I1"); iw.setPackage(getPackageName()); iw.addInterceptorBindings("B2"); iw.setGenerateComments(false); iw.finish(); String code = new TextEditor("I1.java").getText(); assertTrue(code.contains("@B2")); assertTrue(code.contains("@Interceptor")); assertTrue(code.contains("@AroundInvoke")); assertTrue(code.contains("public Object aroundInvoke(InvocationContext ic) throws Exception {")); assertFalse(code.contains("final")); assertFalse(code.startsWith("/**")); iw.open(); iw.setName("I2"); iw.setPackage(getPackageName()); iw.addInterceptorBindings("B4"); iw.setGenerateComments(true); iw.setSuperclass("java.util.Date"); iw.setAroundInvokeMethodName("sample"); iw.finish(); code = new TextEditor("I2.java").getText(); assertTrue(code.contains("@B4")); assertTrue(code.contains("@Interceptor")); assertTrue(code.contains("@AroundInvoke")); assertTrue(code.contains("public Object sample(InvocationContext ic) throws Exception {")); assertFalse(code.contains("final")); assertTrue(code.startsWith("/**")); assertTrue(code.contains("extends Date")); } private void testBeansXml() { NewBeansXMLCreationWizard xmlw = new NewBeansXMLCreationWizard(); xmlw.open(); xmlw.setSourceFolder(getProjectName(),"WebContent","WEB-INF"); assertFalse(new PushButton("Finish").isEnabled()); List<String> folder = new ArrayList<String>(); folder.add(getProjectName()); folder.add("src"); folder.addAll(Arrays.asList(getPackageName().split("."))); xmlw.setSourceFolder(folder.toArray(new String[folder.size()])); assertTrue(new PushButton("Finish").isEnabled()); new CancelButton().click(); xmlw.open(); assertFalse(new PushButton("Finish").isEnabled()); new CancelButton().click(); } private void testBean() { NewBeanCreationWizard bw = new NewBeanCreationWizard(); bw.open(); bw.setName("Bean1"); bw.setPackage(getPackageName()); bw.setPublic(true); bw.setAbstract(true); bw.setFinal(false); bw.setGenerateComments(false); bw.setAlternative(false); bw.setRegisterInBeans(false); bw.finish(); TextEditor e = new TextEditor(); assertTrue(("Bean1.java").equals(e.getTitle())); String code = e.getText(); assertTrue(code.contains("package cdi;")); assertTrue(code.contains("public abstract class Bean1 {")); assertFalse(code.contains("@Named")); assertFalse(code.contains("final")); assertFalse(code.startsWith("/**")); bw.open(); bw.setName("Bean2"); bw.setPackage(getPackageName()); bw.setPublic(false); bw.setAbstract(false); bw.setFinal(true); bw.setGenerateComments(true); bw.setAlternative(false); bw.setRegisterInBeans(false); bw.setNamed(true); bw.setBeanName(""); bw.setScope("@Dependent"); bw.finish(); e = new TextEditor(); assertTrue(("Bean2.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("package cdi;")); assertTrue(code.contains("@Named")); assertFalse(code.contains("@Named(")); assertTrue(code.contains("@Dependent")); assertTrue(code.contains("final class Bean2 {")); assertTrue(code.startsWith("/**")); bw.open(); bw.setName("Bean3"); bw.setPackage(getPackageName()); bw.setPublic(true); bw.setAbstract(false); bw.setFinal(false); bw.setGenerateComments(true); bw.setAlternative(false); bw.setRegisterInBeans(false); bw.setNamed(true); bw.setBeanName("TestedBean"); bw.setScope("@Scope2"); bw.addQualifier("Q1"); bw.finish(); e = new TextEditor(); assertTrue(("Bean3.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("package cdi;")); assertTrue(code.contains("@Named(\"TestedBean\")")); assertTrue(code.contains("@Scope2")); assertTrue(code.contains("@Q1")); assertTrue(code.contains("public class Bean3 {")); assertFalse(code.contains("final")); assertTrue(code.startsWith("/**")); } private void testAnnLiteral() { NewAnnotationLiteralCreationWizard lw = new NewAnnotationLiteralCreationWizard(); lw.open(); lw.setName("AnnL1"); lw.setPackage(getPackageName()); lw.setPublic(true); lw.setAbstract(false); lw.setFinal(true); lw.setGenerateComments(false); lw.addQualifier(getPackageName() + ".Q1 - "+getProjectName()); lw.finish(); TextEditor e = new TextEditor(); assertTrue(("AnnL1.java").equals(e.getTitle())); String code = e.getText(); assertTrue(code.contains("package cdi;")); assertTrue(code.contains("public final class AnnL1 extends AnnotationLiteral<Q1> implements Q1")); assertTrue(code.contains("public static final Q1 INSTANCE = new AnnL1();")); assertFalse(code.contains("abstract")); assertFalse(code.startsWith("/**")); lw.open(); lw.setName("AnnL2"); lw.setPackage(getPackageName()); lw.setPublic(false); lw.setAbstract(true); lw.setFinal(false); lw.setGenerateComments(true); lw.addQualifier(getPackageName() + ".Q2 - "+getProjectName()); lw.finish(); e = new TextEditor(); assertTrue(("AnnL2.java").equals(e.getTitle())); code = e.getText(); assertTrue(code.contains("package cdi;")); assertTrue(code.contains("abstract class AnnL2 extends AnnotationLiteral<Q2> implements Q2 {")); assertTrue(code.contains("public static final Q2 INSTANCE = new AnnL2();")); assertFalse(code.substring(code.indexOf("final") + 5).contains("final")); assertTrue(code.contains("abstract")); assertTrue(code.startsWith("/**")); } }