001package org.apache.commons.beanutils2;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one or more
005 * contributor license agreements.  See the NOTICE file distributed with
006 * this work for additional information regarding copyright ownership.
007 * The ASF licenses this file to You under the Apache License, Version 2.0
008 * (the "License"); you may not use this file except in compliance with
009 * the License.  You may obtain a copy of the License at
010 *
011 *      http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020import static org.apache.commons.beanutils2.BeanUtils.on;
021import static org.junit.Assert.assertNotNull;
022import static org.junit.Assert.assertSame;
023
024import org.junit.Before;
025import org.junit.Test;
026
027public class CastTestCase
028{
029
030    private SuperClass superObj;
031
032    private SubClass subObj;
033
034    @Before
035    public void setUp()
036    {
037        superObj = new SuperClass();
038        subObj = new SubClass();
039    }
040
041    @Test
042    public void castSameClass()
043    {
044        SuperClass casted = on( superObj ).cast();
045        assertNotNull( casted );
046        assertSame( superObj, casted );
047    }
048
049    @Test
050    public void castCompatible()
051    {
052        SuperClass casted = on( subObj ).cast();
053        assertNotNull( casted );
054        assertSame( subObj, casted );
055    }
056
057    @Test( expected = ClassCastException.class )
058    public void castIncompatible()
059    {
060        @SuppressWarnings( "unused" ) // need to assign to casted to force exception
061        SubClass casted = on( superObj ).cast();
062    }
063
064    private static class SuperClass
065    {
066
067    }
068
069    private static class SubClass
070        extends SuperClass
071    {
072
073    }
074
075}