package org.jboss.resteasy.test.interception; import org.jboss.resteasy.core.interception.JaxrsInterceptorRegistry; import org.junit.Assert; import org.junit.Test; import javax.ws.rs.GET; import javax.ws.rs.NameBinding; import javax.ws.rs.Path; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.ext.Provider; import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.annotation.Retention; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static java.lang.annotation.RetentionPolicy.RUNTIME; import static org.junit.Assert.assertEquals; /** * @tpSubChapter Interception tests * @tpChapter Unit tests * @tpTestCaseDetails Unit test for JaxrsInterceptorRegistry class. * @tpSince RESTEasy 3.0.16 */ public class JaxrsInterceptorRegistryTest { /** * @tpTestDetails Test for using name binding annotation. * @tpSince RESTEasy 3.0.16 */ @Test public void shouldUseNameBindingAnnotation() throws Exception { final List<Class<? extends Annotation>> bound = new ArrayList<Class<? extends Annotation>>(); JaxrsInterceptorRegistry<JaxrsInterceptorRegistryTestFilter> jaxrsInterceptorRegistry = new JaxrsInterceptorRegistry<JaxrsInterceptorRegistryTestFilter>(null, JaxrsInterceptorRegistryTestFilter.class); jaxrsInterceptorRegistry.new AbstractInterceptorFactory(JaxrsInterceptorRegistryTestFilter.class) { @Override protected void initialize() { } { setPrecedence(JaxrsInterceptorRegistryTestFilter.class); bound.addAll(nameBound); } @Override protected Object getInterceptor() { return null; } }; assertEquals("JaxrsInterceptorRegistryTestNameBinding was not used", JaxrsInterceptorRegistryTestNameBinding.class, bound.get(0)); } /** * @tpTestDetails Test for JaxrsInterceptorRegistry.Match class * @tpSince RESTEasy 3.0.16 */ @Test public void testOrder() { List<JaxrsInterceptorRegistry.Match> matches = new ArrayList<JaxrsInterceptorRegistry.Match>(); matches.add(new JaxrsInterceptorRegistry.Match(null, 200)); matches.add(new JaxrsInterceptorRegistry.Match(null, 100)); Collections.sort(matches, new JaxrsInterceptorRegistry.AscendingPrecedenceComparator()); Assert.assertEquals("Wrong order in list", matches.get(0).order, 100); Assert.assertEquals("Wrong order in list", matches.get(1).order, 200); } @NameBinding @Retention(RUNTIME) public static @interface JaxrsInterceptorRegistryTestNameBinding { } @JaxrsInterceptorRegistryTestNameBinding @Provider public static class JaxrsInterceptorRegistryTestFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) throws IOException { } } @Path("/") public static class JaxrsInterceptorRegistryTestResource { @JaxrsInterceptorRegistryTestNameBinding @GET public void get() { } } }