Package org.hibernate.test.reflection.java

Source Code of org.hibernate.test.reflection.java.JavaXPropertyTest

package org.hibernate.test.reflection.java;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import junit.framework.AssertionFailedError;
import org.hibernate.reflection.Filter;
import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XClass;
import org.hibernate.reflection.XProperty;
import org.hibernate.reflection.java.JavaXFactory;
import org.hibernate.test.reflection.java.generics.Dad;
import org.hibernate.test.reflection.java.generics.Son;

/**
* @author Paolo Perrotta
*/
public class JavaXPropertyTest extends XAnnotatedElementTestCase {

  private ReflectionManager factory = new JavaXFactory();

  private XClass dadAsSeenFromItself = factory.toXClass( Dad.class );

  private XClass dadAsSeenFromSon = factory.toXClass( Son.class ).getSuperclass();

  public void testFollowsJavaBeansConventionsForPropertyNames() throws Exception {
    List<String> properties = new LinkedList<String>();
    properties.add( "collectionProperty" );
    properties.add( "methodProperty" );
    properties.add( "primitiveProperty" );
    properties.add( "primitiveArrayProperty" );
    properties.add( "arrayProperty" );
    properties.add( "propertyStartingWithIs" );
    properties.add( "language" );
    List<XProperty> methodProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
    assertEquals( properties.size(), methodProperties.size() );
    for ( XProperty member : methodProperties ) {
      assertTrue( properties.contains( member.getName() ) );
    }
    List<XProperty> fieldProperties = dadAsSeenFromSon.getDeclaredProperties( "field" );
    XProperty field = fieldProperties.get( 0 );
    assertEquals( "fieldProperty", field.getName() );
  }

  public void testReturnsPropertiesWithUnresolvedParametricTypes() {
    assertEquals( 7, dadAsSeenFromItself.getDeclaredProperties( "property" ).size() );
  }

  public void testKnowsWhetherItsTypeIsFullyResolved() {
    XProperty notFullyResolvedProperty = getPropertyNamed_from(
        "collectionProperty", dadAsSeenFromItself
        .getDeclaredProperties( "property" )
    );
    assertFalse( notFullyResolvedProperty.isTypeResolved() );
    XProperty fullyResolvedProperty = getPropertyNamed_from(
        "collectionProperty", dadAsSeenFromSon
        .getDeclaredProperties( "property" )
    );
    assertTrue( fullyResolvedProperty.isTypeResolved() );
  }

  public void testCanBeFiltered() {
    assertEquals(
        8, dadAsSeenFromSon.getDeclaredProperties(
        "property", new Filter() {

      public boolean returnStatic() {
        return true;
      }

      public boolean returnTransient() {
        return false;
      }
    }
    ).size()
    );
  }

  public void testCanBeASimpleType() {
    List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "field" );
    XProperty p = getPropertyNamed_from( "fieldProperty", declaredProperties );
    assertTrue( factory.equals( p.getType(), String.class ) );
    assertTrue( factory.equals( p.getElementClass(), String.class ) );
    assertTrue( factory.equals( p.getClassOrElementClass(), String.class ) );
    assertNull( p.getCollectionClass() );
    assertFalse( p.isArray() );
    assertFalse( p.isCollection() );
  }

  public void testResolveInterfaceType() {
    List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
    XProperty p = getPropertyNamed_from( "language", declaredProperties );
    assertTrue( factory.equals( p.getType(), String.class ) );
    assertTrue( factory.equals( p.getElementClass(), String.class ) );
    assertTrue( factory.equals( p.getClassOrElementClass(), String.class ) );
    assertNull( p.getCollectionClass() );
    assertNull( p.getMapKey() );
    assertFalse( p.isArray() );
    assertFalse( p.isCollection() );
  }

  public void testCanBeAnArray() {
    List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
    XProperty p = getPropertyNamed_from( "arrayProperty", declaredProperties );
    assertTrue( factory.equals( p.getType(), String[].class ) );
    assertTrue( factory.equals( p.getElementClass(), String.class ) );
    assertTrue( factory.equals( p.getClassOrElementClass(), String.class ) );
    assertNull( p.getCollectionClass() );
    assertNull( p.getMapKey() );
    assertTrue( p.isArray() );
    assertFalse( p.isCollection() );
  }

  public void testCanBeAnArrayOfPrimitives() {
    List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
    XProperty p = getPropertyNamed_from( "primitiveArrayProperty", declaredProperties );
    assertTrue( factory.equals( p.getType(), int[].class ) );
    assertTrue( factory.equals( p.getElementClass(), int.class ) );
    assertTrue( factory.equals( p.getClassOrElementClass(), int.class ) );
    assertNull( p.getCollectionClass() );
    assertNull( p.getMapKey() );
    assertTrue( p.isArray() );
    assertFalse( p.isCollection() );
  }

  public void testCanBeACollection() {
    List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
    XProperty p = getPropertyNamed_from( "collectionProperty", declaredProperties );
    assertTrue( factory.equals( p.getType(), Map.class ) );
    assertTrue( factory.equals( p.getElementClass(), String.class ) );
    assertTrue( factory.equals( p.getClassOrElementClass(), Map.class ) );
    assertTrue( factory.equals( p.getMapKey(), Double.class ) );
    assertEquals( Map.class, p.getCollectionClass() );
    assertFalse( p.isArray() );
    assertTrue( p.isCollection() );
  }

  private XProperty getPropertyNamed_from(String name, List<XProperty> properties) {
    for ( XProperty p : properties ) {
      if ( p.getName().equals( name ) ) {
        return p;
      }
    }
    throw new AssertionFailedError( "No property '" + name + "' found" );
  }

  public void testSupportsMethodsStartingWithIs() throws Exception {
    assertEquals( "methodProperty", getConcreteInstance().getName() );
  }

  @Override
  protected XProperty getConcreteInstance() {
    XClass xClass = factory.toXClass( Dad.class );
    List<XProperty> properties = xClass.getDeclaredProperties( "property" );
    for ( XProperty p : properties ) {
      if ( p.getName().equals( "methodProperty" ) ) {
        return p;
      }
    }
    throw new AssertionFailedError( "Cannot find Foo.getMethodProperty()" );
  }
}
TOP

Related Classes of org.hibernate.test.reflection.java.JavaXPropertyTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.