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.interceptor;
19  
20  import junit.framework.TestCase;
21  import org.apache.commons.proxy.ProxyFactory;
22  
23  import java.io.ByteArrayOutputStream;
24  
25  public class TestSerializingInterceptor extends TestCase
26  {
27      public void testWithSerializableParametersAndReturn()
28      {
29          final ObjectEchoImpl target = new ObjectEchoImpl();
30          ObjectEcho echo =
31                  (ObjectEcho) new ProxyFactory().createInterceptorProxy(target,
32                          new SerializingInterceptor(),
33                          new Class[]{ObjectEcho.class});
34          final Object originalParameter = "Hello, World!";
35          final Object returnValue = echo.echoBack(originalParameter);
36          assertNotSame(originalParameter, target.parameter);
37          assertNotSame(originalParameter, returnValue);
38          assertNotSame(returnValue, target.parameter);
39      }
40  
41      public void testWithInvalidParameterType()
42      {
43          try
44          {
45              final ObjectEchoImpl target = new ObjectEchoImpl();
46              ObjectEcho echo =
47                      (ObjectEcho) new ProxyFactory().createInterceptorProxy(target,
48                              new SerializingInterceptor(),
49                              new Class[]{ObjectEcho.class});
50              final Object originalParameter = new ByteArrayOutputStream();
51              echo.echoBack(originalParameter);
52              fail("Should not be able to call method with non-serializable parameter type.");
53          }
54          catch (RuntimeException e)
55          {
56  
57          }
58  
59      }
60  
61      public static interface ObjectEcho
62      {
63          public Object echoBack(Object object);
64      }
65  
66      public static class ObjectEchoImpl implements ObjectEcho
67      {
68          private Object parameter;
69  
70          public Object echoBack(Object object)
71          {
72              this.parameter = object;
73              return object;
74          }
75      }
76  }