Source code: org/hibernate/test/bytecode/cglib/ReflectionOptimizerTest.java
1 package org.hibernate.test.bytecode.cglib;
2
3 import junit.framework.TestCase;
4 import junit.framework.TestSuite;
5 import org.hibernate.bytecode.cglib.BytecodeProviderImpl;
6 import org.hibernate.bytecode.ReflectionOptimizer;
7 import org.hibernate.test.bytecode.Bean;
8 import org.hibernate.test.bytecode.BeanReflectionHelper;
9
10 /**
11 * @author Steve Ebersole
12 */
13 public class ReflectionOptimizerTest extends TestCase {
14 public void testReflectionOptimization() {
15 BytecodeProviderImpl provider = new BytecodeProviderImpl();
16 ReflectionOptimizer optimizer = provider.getReflectionOptimizer(
17 Bean.class,
18 BeanReflectionHelper.getGetterNames(),
19 BeanReflectionHelper.getSetterNames(),
20 BeanReflectionHelper.getTypes()
21 );
22 assertNotNull( optimizer );
23 assertNotNull( optimizer.getInstantiationOptimizer() );
24 assertNotNull( optimizer.getAccessOptimizer() );
25
26 Object instance = optimizer.getInstantiationOptimizer().newInstance();
27 assertEquals( instance.getClass(), Bean.class );
28 Bean bean = ( Bean ) instance;
29
30 optimizer.getAccessOptimizer().setPropertyValues( bean, BeanReflectionHelper.TEST_VALUES );
31 assertEquals( bean.getSomeString(), BeanReflectionHelper.TEST_VALUES[0] );
32 Object[] values = optimizer.getAccessOptimizer().getPropertyValues( bean );
33 assertEquivalent( values, BeanReflectionHelper.TEST_VALUES );
34 }
35
36 private void assertEquivalent(Object[] checkValues, Object[] values) {
37 assertEquals( "Different lengths", checkValues.length, values.length );
38 for ( int i = 0; i < checkValues.length; i++ ) {
39 assertEquals( "different values at index [" + i + "]", checkValues[i], values[i] );
40 }
41 }
42
43 public static TestSuite suite() {
44 return new TestSuite( ReflectionOptimizerTest.class );
45 }
46 }