/* * Copyright (C) 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.errai.cdi.stereotypes.client.test; import org.jboss.errai.cdi.stereotypes.client.BorderCollie; import org.jboss.errai.cdi.stereotypes.client.Chihuahua; import org.jboss.errai.cdi.stereotypes.client.EnglishBorderCollie; import org.jboss.errai.cdi.stereotypes.client.HighlandCow; import org.jboss.errai.cdi.stereotypes.client.LongHairedDog; import org.jboss.errai.cdi.stereotypes.client.MexicanChihuahua; import org.jboss.errai.cdi.stereotypes.client.MiniatureClydesdale; import org.jboss.errai.cdi.stereotypes.client.Moose; import org.jboss.errai.cdi.stereotypes.client.Reindeer; import org.jboss.errai.cdi.stereotypes.client.ShetlandPony; import org.jboss.errai.cdi.stereotypes.client.Springbok; import org.jboss.errai.cdi.stereotypes.client.Tame; import org.jboss.errai.enterprise.client.cdi.AbstractErraiCDITest; import org.jboss.errai.ioc.client.container.SyncBeanDef; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Dependent; import java.lang.annotation.Annotation; import java.util.Collection; /** * @author Mike Brock */ public class StereotypesIntegrationTest extends AbstractErraiCDITest { { disableBus = false; } @Override public String getModuleName() { return "org.jboss.errai.cdi.stereotypes.StereotypesTestModule"; } public void testStereotypeWithScopeType() { assertEquals(1, getBeans(Moose.class).size()); assertEquals(ApplicationScoped.class, getBeans(Moose.class).iterator().next().getScope()); } public void testStereotypeWithoutScopeType() { assertEquals(1, getBeans(Reindeer.class).size()); assertEquals(Dependent.class, getBeans(Reindeer.class).iterator().next().getScope()); } public void testOneStereotypeAllowed() { final SyncBeanDef<LongHairedDog> bean = getBeans(LongHairedDog.class).iterator().next(); assertEquals(ApplicationScoped.class, bean.getScope()); } private static final Tame TAME_LITERAL = new Tame() { @Override public Class<? extends Annotation> annotationType() { return Tame.class; } }; public void testMultipleStereotypesAllowed() { assertEquals(1, getBeans(HighlandCow.class, TAME_LITERAL).size()); final SyncBeanDef<HighlandCow> highlandCow = getBeans(HighlandCow.class, TAME_LITERAL).iterator().next(); assertNull(highlandCow.getName()); assertContains(highlandCow.getQualifiers(), TAME_LITERAL); assertEquals(ApplicationScoped.class, highlandCow.getScope()); } public void testExplicitScopeOverridesMergedScopesFromMultipleStereotype() { assertEquals(1, getBeans(Springbok.class).size()); assertEquals(Dependent.class, getBeans(Springbok.class).iterator().next().getScope()); } public void testStereotypeDeclaredInheritedIsInherited() throws Exception { assertEquals(ApplicationScoped.class, getBeans(BorderCollie.class).iterator().next().getScope()); } public void testStereotypeNotDeclaredInheritedIsNotInherited() { // NOTE: This is different form the TCK test in that, in Errai, we don't expect non-explicitly declared // and un-reachable beans to be available from the bean manager. Thus, the correct behavior for us // is that this bean is not registered at all. final Collection<SyncBeanDef<ShetlandPony>> beans = getBeans(ShetlandPony.class); // now that experimental support exists (testcase must support both modes) if (beans.size() > 1) { fail("should be none or one bean"); } } public void testStereotypeDeclaredInheritedIsIndirectlyInherited() { assertEquals(ApplicationScoped.class, getBeans(EnglishBorderCollie.class).iterator().next().getScope()); } public void testStereotypeNotDeclaredInheritedIsNotIndirectlyInherited() { // NOTE: This is different form the TCK test in that, in Errai, we don't expect non-explicitly declared // and un-reachable beans to be available from the bean manager. Thus, the correct behavior for us // is that this bean is not registered at all. final Collection<SyncBeanDef<MiniatureClydesdale>> beans = getBeans(MiniatureClydesdale.class); // now that experimental support exists (testcase must support both modes) if (beans.size() > 1) { fail("should be none or one bean"); } } public void testStereotypeScopeIsOverriddenByInheritedScope() { assertEquals(Dependent.class, getBeans(Chihuahua.class).iterator().next().getScope()); } public void testStereotypeScopeIsOverriddenByIndirectlyInheritedScope() { assertEquals(Dependent.class, getBeans(MexicanChihuahua.class).iterator().next().getScope()); } }