1 package com.atlassian.plugins.rest.common.interceptor.impl; 2 3 import com.atlassian.plugins.rest.common.interceptor.MethodInvocation; 4 import com.atlassian.plugins.rest.common.interceptor.ResourceInterceptor; 5 import junit.framework.TestCase; 6 7 import java.lang.reflect.InvocationTargetException; 8 import java.util.Arrays; 9 import java.util.concurrent.atomic.AtomicInteger; 10 11 import static org.mockito.Mockito.mock; 12 13 public class DefaultMethodInvocationTest extends TestCase 14 { 15 public void testInvoke() throws IllegalAccessException, InvocationTargetException 16 { 17 AtomicInteger counter = new AtomicInteger(); 18 CountingInterceptor interceptor1 = new CountingInterceptor(counter); 19 CountingInterceptor interceptor2 = new CountingInterceptor(counter); 20 DefaultMethodInvocation inv = new DefaultMethodInvocation(null, null, null, Arrays.<ResourceInterceptor>asList( 21 interceptor1, interceptor2, mock(ResourceInterceptor.class)), new Object[0]); 22 23 inv.invoke(); 24 assertEquals(0, interceptor1.before); 25 assertEquals(1, interceptor2.before); 26 assertEquals(2, interceptor2.after); 27 assertEquals(3, interceptor1.after); 28 } 29 30 private static class CountingInterceptor implements ResourceInterceptor 31 { 32 private final AtomicInteger counter; 33 public int before; 34 public int after; 35 36 public CountingInterceptor(AtomicInteger counter) 37 { 38 this.counter = counter; 39 } 40 41 public void intercept(MethodInvocation invocation) throws IllegalAccessException, InvocationTargetException 42 { 43 before = counter.getAndIncrement(); 44 invocation.invoke(); 45 after = counter.getAndIncrement(); 46 } 47 } 48 49 }