/* * JBoss, Home of Professional Open Source * Copyright 2011, Red Hat, Inc., and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * 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.solder.exception.control.test.weld; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import javax.enterprise.inject.spi.BeanManager; import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OperateOnDeployment; import org.jboss.arquillian.container.test.api.ShouldThrowException; import org.jboss.arquillian.junit.Arquillian; import org.jboss.solder.exception.control.HandlerMethod; import org.jboss.solder.exception.control.TraversalMode; import org.jboss.solder.exception.control.extension.CatchExtension; import org.jboss.shrinkwrap.api.Archive; import org.jboss.solder.exception.control.test.common.BaseWebArchive; import org.jboss.solder.exception.control.test.common.extension.Account; import org.jboss.solder.exception.control.test.common.extension.DecoratorAsHandler; import org.jboss.solder.exception.control.test.common.extension.InterceptorAsHandler; import org.jboss.solder.exception.control.test.common.extension.PretendInterceptorBinding; import org.jboss.solder.exception.control.test.common.extension.StereotypedHandler; import org.jboss.solder.exception.control.test.common.extension.literal.ArquillianLiteral; import org.jboss.solder.exception.control.test.common.extension.literal.CatchQualifierLiteral; import org.jboss.solder.exception.control.test.common.handler.BadInjectionPointHandler; import org.jboss.solder.exception.control.test.common.handler.ExtensionExceptionHandler; import org.jboss.weld.exceptions.DeploymentException; import org.junit.Test; import org.junit.runner.RunWith; import static junit.framework.Assert.assertEquals; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; @RunWith(Arquillian.class) public class ExtensionTest { @Deployment(name = "defaultExtensionTest") public static Archive<?> createTestArchive() { return BaseWebArchive.createBase("defaultExtension") .addClasses(ExtensionExceptionHandler.class, StereotypedHandler.class, InterceptorAsHandler.class, PretendInterceptorBinding.class, DecoratorAsHandler.class, Account.class); } @Deployment(name = "BadInjectionPointHandler") @ShouldThrowException(DeploymentException.class) public static Archive<?> createBadInjectionPointArchive() { return BaseWebArchive.createBase("badInjectionExtension") .addClasses(BadInjectionPointHandler.class); } @Inject CatchExtension extension; @Inject BeanManager bm; @Test @OperateOnDeployment("defaultExtensionTest") public void assertAnyHandlersAreFound() { assertFalse(extension.getHandlersForExceptionType(IllegalArgumentException.class, bm, Collections.<Annotation>emptySet(), TraversalMode.DEPTH_FIRST).isEmpty()); } /** * Verifies that the expected number of handlers are found. If the extension where to scan interceptors and * decorators for handlers, this assertion would fail. * * @see ExtensionExceptionHandler * @see InterceptorAsHandler * @see DecoratorAsHandler */ @Test @OperateOnDeployment("defaultExtensionTest") public void assertNumberOfHandlersFoundMatchesExpectedDepthFirst() { assertEquals(5, extension.getHandlersForExceptionType(IllegalArgumentException.class, bm, Collections.<Annotation>emptySet(), TraversalMode.DEPTH_FIRST).size()); } @Test @OperateOnDeployment("defaultExtensionTest") public void assertNumberOfHandlersFoundMatchesExpectedBreathFirst() { assertEquals(4, extension.getHandlersForExceptionType(IllegalArgumentException.class, bm, Collections.<Annotation>emptySet(), TraversalMode.BREADTH_FIRST).size()); } @Test @OperateOnDeployment("defaultExtensionTest") public void assertSQLHandlerFound() { final List<HandlerMethod<? extends Throwable>> handlerMethods = new ArrayList<HandlerMethod<? extends Throwable>>(extension.getHandlersForExceptionType( SQLException.class, bm, Collections.<Annotation>emptySet(), TraversalMode.DEPTH_FIRST)); assertThat(handlerMethods.size(), is(4)); assertThat(handlerMethods.get(3).getExceptionType(), equalTo((Type) SQLException.class)); } @Test @OperateOnDeployment("defaultExtensionTest") public void assertQualifiedHandlerAndOthersAreFound() { HashSet<Annotation> qualifiers = new HashSet<Annotation>(); qualifiers.add(CatchQualifierLiteral.INSTANCE); assertEquals(7, extension.getHandlersForExceptionType(IllegalArgumentException.class, bm, qualifiers, TraversalMode.DEPTH_FIRST).size()); } @Test @OperateOnDeployment("defaultExtensionTest") public void assertAllValidHandlersAreFoundDepthFirst() { HashSet<Annotation> qualifiers = new HashSet<Annotation>(); qualifiers.add(CatchQualifierLiteral.INSTANCE); qualifiers.add(ArquillianLiteral.INSTANCE); assertEquals(8, extension.getHandlersForExceptionType(IllegalArgumentException.class, bm, qualifiers, TraversalMode.DEPTH_FIRST).size()); } @Test @OperateOnDeployment("defaultExtensionTest") public void assertAllValidHandlersAreFoundBreadthFirst() { HashSet<Annotation> qualifiers = new HashSet<Annotation>(); qualifiers.add(CatchQualifierLiteral.INSTANCE); qualifiers.add(ArquillianLiteral.INSTANCE); assertEquals(4, extension.getHandlersForExceptionType(IllegalArgumentException.class, bm, qualifiers, TraversalMode.BREADTH_FIRST).size()); } /** * @see BadInjectionPointHandler */ @Test @OperateOnDeployment("BadInjectionPointHandler") public void assertDeploymentExceptionThrown() { } }