1
2
3
4
5
6
7
8 package org.codehaus.metaclass.introspector;
9
10 import junit.framework.TestCase;
11 import org.codehaus.metaclass.MockAccessor;
12 import org.codehaus.metaclass.model.Attribute;
13 import org.codehaus.metaclass.model.ClassDescriptor;
14 import org.codehaus.metaclass.model.FieldDescriptor;
15 import org.codehaus.metaclass.model.MethodDescriptor;
16
17 /***
18 * @author Peter Donald
19 * @version $Revision: 1.4 $ $Date: 2003/11/28 11:14:54 $
20 */
21 public class MetaClassIntrospectorTestCase
22 extends TestCase
23 {
24 public void testInstantiateMetaClassIntrospectorClass()
25 {
26 assertNotNull( "attributes", new MetaClassIntrospector() );
27 }
28
29 public void testGetClassDescriptorViaClassObject()
30 throws Exception
31 {
32 final ClassDescriptor original =
33 new ClassDescriptor( MetaClassIntrospectorTestCase.class.getName(),
34 Attribute.EMPTY_SET,
35 Attribute.EMPTY_SET,
36 FieldDescriptor.EMPTY_SET,
37 MethodDescriptor.EMPTY_SET );
38 final MockAccessor accessor = new MockAccessor( original );
39 MetaClassIntrospector.setAccessor( accessor );
40 MetaClassIntrospector.clearCompleteCache();
41
42 final ClassDescriptor retrieved =
43 MetaClassIntrospector.getClassDescriptor(
44 MetaClassIntrospectorTestCase.class );
45 assertEquals( "original == retrieved", original, retrieved );
46 }
47
48 public void testGetClassDescriptorViaClassnameAndClassLoader()
49 throws Exception
50 {
51 final ClassDescriptor original =
52 new ClassDescriptor( MetaClassIntrospectorTestCase.class.getName(),
53 Attribute.EMPTY_SET,
54 Attribute.EMPTY_SET,
55 FieldDescriptor.EMPTY_SET,
56 MethodDescriptor.EMPTY_SET );
57 final MockAccessor accessor = new MockAccessor( original );
58 MetaClassIntrospector.setAccessor( accessor );
59 MetaClassIntrospector.clearCompleteCache();
60
61 final ClassDescriptor retrieved = MetaClassIntrospector.
62 getClassDescriptor( MetaClassIntrospectorTestCase.class.getName(),
63 MetaClassIntrospectorTestCase.class.getClassLoader() );
64 assertEquals( "original == retrieved", original, retrieved );
65 }
66
67 public void testGetMissingClassDescriptor()
68 throws Exception
69 {
70 final MockAccessor accessor = new MockAccessor( null );
71 MetaClassIntrospector.setAccessor( accessor );
72 MetaClassIntrospector.clearCompleteCache();
73
74 try
75 {
76 MetaClassIntrospector.getClassDescriptor(
77 MetaClassIntrospectorTestCase.class );
78 }
79 catch( MetaClassException e )
80 {
81 return;
82 }
83 fail(
84 "Expected to cause exception due to access of non existent resource" );
85 }
86
87 public void testSetNullAccessor()
88 throws Exception
89 {
90 try
91 {
92 MetaClassIntrospector.setAccessor( null );
93 }
94 catch( NullPointerException e )
95 {
96 return;
97 }
98 fail( "Expected to cause NPE attempting to set null accessor" );
99 }
100
101 public void testGetClassDescriptorFromCache()
102 throws Exception
103 {
104 final ClassDescriptor original =
105 new ClassDescriptor( MetaClassIntrospectorTestCase.class.getName(),
106 Attribute.EMPTY_SET,
107 Attribute.EMPTY_SET,
108 FieldDescriptor.EMPTY_SET,
109 MethodDescriptor.EMPTY_SET );
110 final MockAccessor accessor = new MockAccessor( original );
111 MetaClassIntrospector.setAccessor( accessor );
112 MetaClassIntrospector.clearCompleteCache();
113
114 final ClassDescriptor retrieved =
115 MetaClassIntrospector.getClassDescriptor(
116 MetaClassIntrospectorTestCase.class );
117 assertEquals( "original == retrieved", original, retrieved );
118 assertEquals( "accessor.getAccessCount()",
119 1,
120 accessor.getAccessCount() );
121
122 final ClassDescriptor retrieved2 =
123 MetaClassIntrospector.getClassDescriptor(
124 MetaClassIntrospectorTestCase.class );
125 assertEquals( "original == retrieved2", original, retrieved2 );
126 assertEquals( "accessor.getAccessCount()",
127 1,
128 accessor.getAccessCount() );
129 }
130
131 public void testSetAccessorUnderSecurityManager()
132 throws Exception
133 {
134 final SecurityManager securityManager = new MockSecurityManager();
135 System.setSecurityManager( securityManager );
136 final MockAccessor accessor = new MockAccessor( null );
137 MetaClassIntrospector.setAccessor( accessor );
138 MetaClassIntrospector.clearCompleteCache();
139 }
140 }