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.io;
9   
10  import junit.framework.TestCase;
11  import org.jmock.C;
12  import org.jmock.Mock;
13  import org.objectweb.asm.Attribute;
14  import org.objectweb.asm.ClassVisitor;
15  import org.codehaus.metaclass.model.ClassDescriptor;
16  import org.codehaus.metaclass.model.FieldDescriptor;
17  import org.codehaus.metaclass.model.MethodDescriptor;
18  
19  /***
20   * @author Peter Donald
21   * @version $Revision: 1.1 $ $Date: 2003/12/11 08:41:51 $
22   */
23  public class AddMetaDataAdapterTestCase
24      extends TestCase
25  {
26      public void testVisitMetaDataAttribute()
27          throws Exception
28      {
29          final Attribute attr = new Attribute( MetaClassIOASM.ATTRIBUTE_NAME );
30          final Mock m = new Mock( ClassVisitor.class );
31          final ClassVisitor visitor = (ClassVisitor)m.proxy();
32          final AddMetaDataAdapter adapter =
33              new AddMetaDataAdapter( visitor, null );
34          adapter.visitAttribute( attr );
35          m.verify();
36      }
37  
38      public void testVisitNonMetaDataAttribute()
39          throws Exception
40      {
41          final Attribute attr = new Attribute( "Foo" );
42          final Mock m = new Mock( ClassVisitor.class );
43          m.expect( "visitAttribute", C.args( C.eq( attr ) ) );
44          final ClassVisitor visitor = (ClassVisitor)m.proxy();
45          final AddMetaDataAdapter adapter =
46              new AddMetaDataAdapter( visitor, null );
47          adapter.visitAttribute( attr );
48          m.verify();
49      }
50  
51      public void testVisitClassAndAddMetaData()
52          throws Exception
53      {
54          final org.codehaus.metaclass.model.Attribute[] a =
55              org.codehaus.metaclass.model.Attribute.EMPTY_SET;
56          final ClassDescriptor descriptor =
57              new ClassDescriptor( "X",
58                                   a,
59                                   a,
60                                   FieldDescriptor.EMPTY_SET,
61                                   MethodDescriptor.EMPTY_SET );
62  
63          final Mock m = new Mock( ClassVisitor.class );
64          m.expect( "visit", C.ANY_ARGS );
65          m.expect( "visitAttribute", C.args( C.IS_ANYTHING ) );
66          final ClassVisitor visitor = (ClassVisitor)m.proxy();
67  
68          final AddMetaDataAdapter adapter =
69              new AddMetaDataAdapter( visitor, descriptor );
70          adapter.visit( 0, "X", "S", new String[ 0 ], "foo.java" );
71          m.verify();
72      }
73  
74      public void testVisitClassAndAddInvalidMetaData()
75          throws Exception
76      {
77          final org.codehaus.metaclass.model.Attribute[] a =
78              org.codehaus.metaclass.model.Attribute.EMPTY_SET;
79          final ClassDescriptor descriptor =
80              new ClassDescriptor( "X",
81                                   a,
82                                   a,
83                                   FieldDescriptor.EMPTY_SET,
84                                   MethodDescriptor.EMPTY_SET );
85  
86          final Mock m = new Mock( ClassVisitor.class );
87          m.expect( "visit", C.ANY_ARGS );
88          final ClassVisitor visitor = (ClassVisitor)m.proxy();
89  
90          final AddMetaDataAdapter adapter =
91              new FailingAddMetaDataAdapter( visitor, descriptor );
92          adapter.visit( 0, "X", "S", new String[ 0 ], "foo.java" );
93          assertEquals( "ioe",
94                        FailingAddMetaDataAdapter.IO_EXCEPTION,
95                        adapter.getIoe() );
96          m.verify();
97      }
98  }