1   /*
2    * Copyright (C) The MetaClass Group. All rights reserved.
3    *
4    * This software is published under the terms of the Spice
5    * Software License version 1.1, a copy of which has been included
6    * with this distribution in the LICENSE.txt file.
7    */
8   package org.codehaus.metaclass.introspector;
9   
10  import junit.framework.TestCase;
11  import org.codehaus.metaclass.model.Attribute;
12  import org.codehaus.metaclass.model.ClassDescriptor;
13  import org.codehaus.metaclass.model.FieldDescriptor;
14  import org.codehaus.metaclass.model.MethodDescriptor;
15  
16  /***
17   * @author Peter Donald
18   * @version $Revision: 1.6 $ $Date: 2003/11/28 11:14:54 $
19   */
20  public class CachingMetaClassAccessorTestCase
21      extends TestCase
22  {
23      public void testNullClassnamePassedToGetClassDescriptor()
24          throws Exception
25      {
26          final CachingMetaClassAccessor accessor = new CachingMetaClassAccessor();
27          try
28          {
29              accessor.getClassDescriptor( null,
30                                           getClass().getClassLoader(),
31                                           accessor );
32          }
33          catch( final NullPointerException npe )
34          {
35              assertEquals( "npe.getMessage()", "classname", npe.getMessage() );
36              return;
37          }
38          fail(
39              "Expected to fail due to null Classname passed into GetClassDescriptor" );
40      }
41  
42      public void testNullClassLoaderPassedToGetClassDescriptor()
43          throws Exception
44      {
45          final CachingMetaClassAccessor accessor = new CachingMetaClassAccessor();
46          try
47          {
48              accessor.getClassDescriptor( "X", null, accessor );
49          }
50          catch( final NullPointerException npe )
51          {
52              assertEquals( "npe.getMessage()",
53                            "classLoader",
54                            npe.getMessage() );
55              return;
56          }
57          fail(
58              "Expected to fail due to null ClassLoader passed into GetClassDescriptor" );
59      }
60  
61      public void testGetNonExistent()
62          throws Exception
63      {
64          final CachingMetaClassAccessor accessor = new CachingMetaClassAccessor();
65          try
66          {
67              accessor.getClassDescriptor( "NoExist",
68                                           getClass().getClassLoader(),
69                                           null );
70          }
71          catch( final MetaClassException mce )
72          {
73              assertEquals( "mce.getMessage()",
74                            "Missing Attributes for NoExist",
75                            mce.getMessage() );
76              return;
77          }
78          fail( "Expected to fail to get non-existent descriptor" );
79      }
80  
81      public void testGetExistent()
82          throws Exception
83      {
84          final CachingMetaClassAccessor accessor = new CachingMetaClassAccessor();
85          final ClassDescriptor descriptor =
86              new ClassDescriptor( "MyClass",
87                                   Attribute.EMPTY_SET,
88                                   Attribute.EMPTY_SET,
89                                   FieldDescriptor.EMPTY_SET,
90                                   MethodDescriptor.EMPTY_SET );
91          final ClassLoader classLoader = getClass().getClassLoader();
92          accessor.registerDescriptor( descriptor, classLoader );
93          final ClassDescriptor result = accessor.getClassDescriptor( "MyClass",
94                                                                      classLoader,
95                                                                      null );
96          assertEquals( "descriptor", descriptor, result );
97      }
98  
99      public void testGetExistentThenClear()
100         throws Exception
101     {
102         final CachingMetaClassAccessor accessor = new CachingMetaClassAccessor();
103         final ClassDescriptor descriptor =
104             new ClassDescriptor( "MyClass",
105                                  Attribute.EMPTY_SET,
106                                  Attribute.EMPTY_SET,
107                                  FieldDescriptor.EMPTY_SET,
108                                  MethodDescriptor.EMPTY_SET );
109         final ClassLoader classLoader = getClass().getClassLoader();
110         accessor.registerDescriptor( descriptor, classLoader );
111         final ClassDescriptor result = accessor.getClassDescriptor( "MyClass",
112                                                                     classLoader,
113                                                                     null );
114         assertEquals( "descriptor", descriptor, result );
115 
116         try
117         {
118             accessor.getClassDescriptor( "MyClass", classLoader, null );
119         }
120         catch( final MetaClassException mce )
121         {
122             assertEquals( "mce.getMessage()",
123                           "Missing Attributes for MyClass",
124                           mce.getMessage() );
125             return;
126         }
127     }
128 
129     public void testRegisterMultipleInSameClassLoader()
130         throws Exception
131     {
132         final CachingMetaClassAccessor accessor = new CachingMetaClassAccessor();
133         final ClassDescriptor descriptor1 =
134             new ClassDescriptor( "MyClass",
135                                  Attribute.EMPTY_SET,
136                                  Attribute.EMPTY_SET,
137                                  FieldDescriptor.EMPTY_SET,
138                                  MethodDescriptor.EMPTY_SET );
139         final ClassDescriptor descriptor2 =
140             new ClassDescriptor( "MyClass2",
141                                  Attribute.EMPTY_SET,
142                                  Attribute.EMPTY_SET,
143                                  FieldDescriptor.EMPTY_SET,
144                                  MethodDescriptor.EMPTY_SET );
145         final ClassLoader classLoader = getClass().getClassLoader();
146         accessor.registerDescriptor( descriptor1, classLoader );
147         accessor.registerDescriptor( descriptor2, classLoader );
148         final ClassDescriptor result1 =
149             accessor.getClassDescriptor( "MyClass", classLoader, null );
150         assertEquals( "descriptor1", descriptor1, result1 );
151         final ClassDescriptor result2 =
152             accessor.getClassDescriptor( "MyClass2", classLoader, null );
153         assertEquals( "descriptor2", descriptor2, result2 );
154     }
155 
156     public void testNullDescriptorPassedToRegisterDescriptor()
157         throws Exception
158     {
159         final CachingMetaClassAccessor accessor = new CachingMetaClassAccessor();
160         try
161         {
162             accessor.registerDescriptor( null, getClass().getClassLoader() );
163         }
164         catch( final NullPointerException npe )
165         {
166             assertEquals( "npe.getMessage()", "descriptor", npe.getMessage() );
167             return;
168         }
169         fail(
170             "Expected to fail due to null Descriptor passed into RegisterDescriptor" );
171     }
172 
173     public void testNullClassLoaderPassedToRegisterDescriptor()
174         throws Exception
175     {
176         final ClassDescriptor descriptor =
177             new ClassDescriptor( "MyClass2",
178                                  Attribute.EMPTY_SET,
179                                  Attribute.EMPTY_SET,
180                                  FieldDescriptor.EMPTY_SET,
181                                  MethodDescriptor.EMPTY_SET );
182         final CachingMetaClassAccessor accessor = new CachingMetaClassAccessor();
183         try
184         {
185             accessor.registerDescriptor( descriptor, null );
186         }
187         catch( final NullPointerException npe )
188         {
189             assertEquals( "npe.getMessage()",
190                           "classLoader",
191                           npe.getMessage() );
192             return;
193         }
194         fail(
195             "Expected to fail due to null classLoader passed into RegisterDescriptor" );
196     }
197 }