/*** * Copyright (c) 2009 Caelum - www.caelum.com.br/opensource All rights reserved. * * 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 br.com.caelum.vraptor.core; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import br.com.caelum.vraptor.InterceptionException; import br.com.caelum.vraptor.controller.ControllerMethod; import br.com.caelum.vraptor.interceptor.Interceptor; import br.com.caelum.vraptor.interceptor.InterceptorRegistry; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; public class InterceptorStackHandlersCacheTest { private @Mock InterceptorRegistry registry; private @Mock InterceptorHandlerFactory handlerFactory; private InterceptorStackHandlersCache cache; private List<Class<?>> interceptors; @Before public void setup() { MockitoAnnotations.initMocks(this); interceptors = new ArrayList<>(); interceptors.add(FirstInterceptor.class); interceptors.add(SecondInterceptor.class); when(registry.all()).thenReturn(interceptors); when(handlerFactory.handlerFor(Mockito.any(Class.class))).thenAnswer(new Answer<InterceptorHandler>() { @Override public InterceptorHandler answer(InvocationOnMock invocation) throws Throwable { Object[] arguments = invocation.getArguments(); return new MockInterceptorHandler((Class<?>) arguments[0]); } }); cache = new InterceptorStackHandlersCache(registry, handlerFactory); cache.init(); } @Test public void shouldReturnHandlersListInTheSameOrderThatRegistry() { LinkedList<InterceptorHandler> handlers = cache.getInterceptorHandlers(); assertEquals(FirstInterceptor.class, extractInterceptor(handlers.get(0))); assertEquals(SecondInterceptor.class, extractInterceptor(handlers.get(1))); } @Test public void cacheShouldBeImmutable() { cache.getInterceptorHandlers().remove(0); assertEquals(2, cache.getInterceptorHandlers().size()); } private Class<?> extractInterceptor(InterceptorHandler handler){ return ((MockInterceptorHandler)handler).interceptor; } static interface FirstInterceptor extends Interceptor {} static interface SecondInterceptor extends Interceptor {} private class MockInterceptorHandler implements InterceptorHandler{ private Class<?> interceptor; public MockInterceptorHandler(Class<?> interceptor) { this.interceptor = interceptor; } @Override public void execute(InterceptorStack stack, ControllerMethod method, Object controllerInstance) throws InterceptionException { //do nothing } } }