/******************************************************************************* * Copyright (c) 2010 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.ca; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jboss.tools.cdi.core.IBean; import org.jboss.tools.cdi.core.IClassBean; import org.jboss.tools.cdi.core.IDecorator; import org.jboss.tools.cdi.core.IInterceptor; import org.jboss.tools.cdi.core.IStereotype; import org.jboss.tools.cdi.core.test.tck.TCKTest; import org.jboss.tools.cdi.internal.core.ca.BeansXmlProcessor; import org.jboss.tools.common.text.TextProposal; import org.jboss.tools.jst.web.kb.KbQuery; /** * @author Alexey Kazakov */ public class BeansXmlCATest extends TCKTest { public void testEmptyList() { KbQuery query = new KbQuery(); query.setParentTags(new String[]{"beans", "alternatives", "class"}); query.setValue(" test "); TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query, tckProject); assertEquals("The list of proposals should be empty.", 0, proposals.length); } public void testAllAlternativeBeans() { KbQuery query = new KbQuery(); query.setParentTags(new String[]{"beans", "alternatives", "class"}); query.setValue(""); TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query, tckProject); Map<String, TextProposal> map = generateMap(proposals); IBean[] alternatives = cdiProject.getAlternatives(); List<IClassBean> alternativeClassBeans = new ArrayList<IClassBean>(); for (IBean bean : alternatives) { if(bean instanceof IClassBean) { if(map.get(bean.getBeanClass().getFullyQualifiedName())==null) { fail("The list of proposals doesn't contain following alternative bean: " + bean.getBeanClass().getFullyQualifiedName()); } alternativeClassBeans.add((IClassBean)bean); } } assertEquals("The number of proposals doesn't equel to the number of alternative beans.", alternativeClassBeans.size(), proposals.length); } public void testSomeAlternativeBeans() { KbQuery query = new KbQuery(); query.setParentTags(new String[]{"beans", "alternatives", "class"}); query.setValue("org.jboss.jsr299.tck.tests.jbt.ca."); TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query, tckProject); String[] types = new String[]{"org.jboss.jsr299.tck.tests.jbt.ca.AlternativeClass", "org.jboss.jsr299.tck.tests.jbt.ca.AlternativeClassBean"}; assertEqualTypes(proposals, types); } public void testAllAlternativeStereotypes() { KbQuery query = new KbQuery(); query.setParentTags(new String[]{"beans", "alternatives", "stereotype"}); query.setValue(" "); TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query, tckProject); Map<String, TextProposal> map = generateMap(proposals); IStereotype[] alternatives = cdiProject.getStereotypes(); List<IStereotype> alternativeStereotype = new ArrayList<IStereotype>(); for (IStereotype stereotype : alternatives) { if(stereotype.isAlternative()) { if(map.get(stereotype.getSourceType().getFullyQualifiedName())==null) { fail("The list of proposals doesn't contain following alternative stereotype: " + stereotype.getSourceType().getFullyQualifiedName()); } alternativeStereotype.add(stereotype); } } assertEquals("The number of proposals doesn't equel to the number of alternative stereotypes.", alternativeStereotype.size(), proposals.length); } public void testSomeAlternativeStereotypes() { KbQuery query = new KbQuery(); query.setParentTags(new String[]{"beans", "alternatives", "stereotype"}); query.setValue(" org.jboss.jsr299.tck.tests.jbt.ca."); TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query, tckProject); String[] types = new String[]{"org.jboss.jsr299.tck.tests.jbt.ca.AlternativeStereotype", "org.jboss.jsr299.tck.tests.jbt.ca.AlternativeStereotype2"}; assertEqualTypes(proposals, types); } public void testAllDecorators() { KbQuery query = new KbQuery(); query.setParentTags(new String[]{"beans", "decorators", "class"}); query.setValue(""); TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query, tckProject); Map<String, TextProposal> map = generateMap(proposals); IDecorator[] decorators = cdiProject.getDecorators(); for (IDecorator decorator : decorators) { if(map.get(decorator.getBeanClass().getFullyQualifiedName())==null) { fail("The list of proposals doesn't contain following decorator: " + decorator.getBeanClass().getFullyQualifiedName()); } } assertEquals("The number of proposals doesn't equel to the number of decorators.", decorators.length, proposals.length); } public void testSomeDecorators() { KbQuery query = new KbQuery(); query.setParentTags(new String[]{"beans", "decorators", "class"}); query.setValue("org.jboss.jsr299.tck.tests.jbt.ca."); TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query, tckProject); String[] types = new String[]{"org.jboss.jsr299.tck.tests.jbt.ca.LoggerDecorator"}; assertEqualTypes(proposals, types); } public void testAllInterceptors() { KbQuery query = new KbQuery(); query.setParentTags(new String[]{"beans", "interceptors", "class"}); query.setValue(""); TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query, tckProject); Map<String, TextProposal> map = generateMap(proposals); IInterceptor[] interceptors = cdiProject.getInterceptors(); for (IInterceptor interceptor : interceptors) { if(map.get(interceptor.getBeanClass().getFullyQualifiedName())==null) { fail("The list of proposals doesn't contain following interceptor: " + interceptor.getBeanClass().getFullyQualifiedName()); } } assertEquals("The number of proposals doesn't equel to the number of interceptors.", interceptors.length, proposals.length); } public void testSomeInterceptors() { KbQuery query = new KbQuery(); query.setParentTags(new String[]{"beans", "interceptors", "class"}); query.setValue("org.jboss.jsr299.tck.tests.jbt.ca."); TextProposal[] proposals = BeansXmlProcessor.getInstance().getProposals(query, tckProject); String[] types = new String[]{"org.jboss.jsr299.tck.tests.jbt.ca.InterceptorBean"}; assertEqualTypes(proposals, types); } private Map<String, TextProposal> generateMap(TextProposal[] proposals) { Map<String, TextProposal> map = new HashMap<String, TextProposal>(); for (TextProposal proposal : proposals) { map.put(proposal.getReplacementString(), proposal); } return map; } private void assertEqualTypes(TextProposal[] proposals, String[] types) { assertEquals("The number of proposals doesn't equel to the number of types.", types.length, proposals.length); Map<String, TextProposal> map = generateMap(proposals); for (String type : types) { if(map.get(type)==null) { fail("Can't find " + type + " proposal."); } } } }