001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018package org.apache.commons.proxy2.interceptor; 019 020import static org.apache.commons.proxy2.interceptor.InterceptorUtils.constant; 021import static org.junit.Assert.assertEquals; 022 023import java.lang.reflect.Method; 024 025import org.apache.commons.proxy2.Invocation; 026import org.apache.commons.proxy2.interceptor.matcher.invocation.MethodNameMatcher; 027import org.apache.commons.proxy2.util.AbstractTestCase; 028import org.apache.commons.proxy2.util.Echo; 029import org.apache.commons.proxy2.util.MockInvocation; 030import org.junit.Test; 031 032public class SwitchInterceptorTest extends AbstractTestCase 033{ 034 //---------------------------------------------------------------------------------------------------------------------- 035 // Other Methods 036 //---------------------------------------------------------------------------------------------------------------------- 037 038 @Test 039 public void testWithMultipleAdvices() throws Throwable 040 { 041 SwitchInterceptor interceptor = new SwitchInterceptor(); 042 interceptor.when(new MethodNameMatcher("echo")).then(constant("bar")); 043 interceptor.when(new MethodNameMatcher("echoBack")).then(constant("baz")); 044 Method method = Echo.class.getMethod("echoBack", String.class); 045 Invocation invocation = new MockInvocation(method, "foo", "foo"); 046 assertEquals("baz", interceptor.intercept(invocation)); 047 } 048 049 @Test 050 public void testWithNoAdvice() throws Throwable 051 { 052 SwitchInterceptor interceptor = new SwitchInterceptor(); 053 Method method = Echo.class.getMethod("echoBack", String.class); 054 Invocation invocation = new MockInvocation(method, "foo", "foo"); 055 assertEquals("foo", interceptor.intercept(invocation)); 056 } 057 058 @Test 059 public void testWithSingleAdviceWhichDoesNotMatch() throws Throwable 060 { 061 SwitchInterceptor interceptor = new SwitchInterceptor().when(new MethodNameMatcher("echoBackZZZZ")).then( 062 constant("bar")); 063 Method method = Echo.class.getMethod("echoBack", String.class); 064 Invocation invocation = new MockInvocation(method, "foo", "foo"); 065 assertEquals("foo", interceptor.intercept(invocation)); 066 } 067 068 @Test 069 public void testWithSingleAdviceWhichMatches() throws Throwable 070 { 071 SwitchInterceptor interceptor = new SwitchInterceptor().when(new MethodNameMatcher("echoBack")).then( 072 constant("bar")); 073 Method method = Echo.class.getMethod("echoBack", String.class); 074 Invocation invocation = new MockInvocation(method, "foo", "foo"); 075 assertEquals("bar", interceptor.intercept(invocation)); 076 } 077}