1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.proxy.invoker;
19  
20  import org.apache.commons.proxy.factory.javassist.JavassistProxyFactory;
21  import org.apache.commons.proxy.util.AbstractTestCase;
22  import org.apache.commons.proxy.util.Echo;
23  
24  import java.io.Serializable;
25  import java.lang.reflect.InvocationHandler;
26  import java.lang.reflect.Method;
27  
28  public class TestInvocationHandlerAdapter extends AbstractTestCase
29  {
30  //**********************************************************************************************************************
31  // Other Methods
32  //**********************************************************************************************************************
33  
34      public void testSerialization()
35      {
36          assertSerializable( new InvocationHandlerAdapter( new InvocationHandlerTester() ) );
37      }
38      
39      public void testMethodInvocation() throws Exception
40      {
41          InvocationHandlerTester tester = new InvocationHandlerTester();
42          final Echo echo = ( Echo ) new JavassistProxyFactory().createInvokerProxy(new InvocationHandlerAdapter(tester), new Class[] {Echo.class});
43          echo.echoBack("hello");
44          assertEquals(Echo.class.getMethod("echoBack", new Class[] {String.class}), tester.method);
45          assertSame(echo, tester.proxy);
46          assertNotNull(tester.arguments);
47          assertEquals(1, tester.arguments.length);
48          assertEquals("hello", tester.arguments[0]);
49      }
50  
51  //**********************************************************************************************************************
52  // Inner Classes
53  //**********************************************************************************************************************
54  
55      private static class InvocationHandlerTester implements InvocationHandler, Serializable
56      {
57          private Object proxy;
58          private Method method;
59          private Object[] arguments;
60  
61          public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable
62          {
63              this.proxy = proxy;
64              this.method = method;
65              this.arguments = args;
66              return null;
67          }
68      }
69  }