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
018 package org.apache.commons.proxy.provider;
019
020 import junit.framework.TestCase;
021 import org.apache.commons.proxy.exception.ObjectProviderException;
022
023 import java.util.Date;
024
025 public class TestCloningProvider extends TestCase
026 {
027 public void testValidCloneable()
028 {
029 final Date now = new Date();
030 final CloningProvider provider = new CloningProvider( now );
031 final Date clone1 = ( Date ) provider.getObject();
032 assertEquals( now, clone1 );
033 assertNotSame( now, clone1 );
034 final Date clone2 = ( Date )provider.getObject();
035 assertEquals( now, clone2 );
036 assertNotSame( now, clone2 );
037 assertNotSame( clone2, clone1 );
038 }
039
040 public void testWithPrivateCloneMethod()
041 {
042 final CloningProvider provider = new CloningProvider( new PrivateCloneable() );
043 try
044 {
045 provider.getObject();
046 fail();
047 }
048 catch( ObjectProviderException e )
049 {
050 }
051 }
052
053 public void testWithInvalidCloneable()
054 {
055 final CloningProvider provider = new CloningProvider( new InvalidCloneable() );
056 try
057 {
058 provider.getObject();
059 fail();
060 }
061 catch( ObjectProviderException e )
062 {
063 }
064 }
065
066 public void testWithExceptionThrown()
067 {
068 final CloningProvider provider = new CloningProvider( new ExceptionCloneable() );
069 try
070 {
071 provider.getObject();
072 fail();
073 }
074 catch( ObjectProviderException e )
075 {
076 }
077 }
078
079 public static class InvalidCloneable implements Cloneable
080 {
081 }
082
083 public static class PrivateCloneable implements Cloneable
084 {
085 protected Object clone()
086 {
087 return this;
088 }
089 }
090
091 public static class ExceptionCloneable implements Cloneable
092 {
093 public Object clone()
094 {
095 throw new RuntimeException( "No clone for you!" );
096 }
097 }
098 }