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 java.io.ByteArrayOutputStream;
11  import junit.framework.TestCase;
12  import org.objectweb.asm.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.1 $ $Date: 2003/12/11 08:41:51 $
20   */
21  public class ExtractMetaDataVisitorTestCase
22      extends TestCase
23  {
24      public void testVisitNonMatchingAttribute()
25          throws Exception
26      {
27          final ExtractMetaDataVisitor visitor = new ExtractMetaDataVisitor();
28          visitor.visitAttribute( new Attribute( "Foo" ) );
29          assertEquals( "descriptor", null, visitor.getClassDescriptor() );
30          assertEquals( "ioe", null, visitor.getIoe() );
31      }
32  
33      public void testVisitMatchingAttributeWithInvalidMetaData()
34          throws Exception
35      {
36          final ExtractMetaDataVisitor visitor = new ExtractMetaDataVisitor();
37          final Attribute attr =
38              new Attribute( MetaClassIOASM.ATTRIBUTE_NAME,
39                             new byte[ 0 ],
40                             0,
41                             0 );
42          visitor.visitAttribute( attr );
43          assertEquals( "descriptor", null, visitor.getClassDescriptor() );
44          assertNotNull( "ioe", visitor.getIoe() );
45      }
46  
47      public void testVisitMatchingAttributeWithValidMetaData()
48          throws Exception
49      {
50          final org.codehaus.metaclass.model.Attribute[] a =
51              org.codehaus.metaclass.model.Attribute.EMPTY_SET;
52          final ClassDescriptor descriptor =
53              new ClassDescriptor( "X",
54                                   a,
55                                   a,
56                                   FieldDescriptor.EMPTY_SET,
57                                   MethodDescriptor.EMPTY_SET );
58          final ByteArrayOutputStream output = new ByteArrayOutputStream();
59          MetaClassIOBinary.IO.serializeClass( output, descriptor );
60          final byte[] bytes = output.toByteArray();
61  
62          final ExtractMetaDataVisitor visitor = new ExtractMetaDataVisitor();
63          final Attribute attr =
64              new Attribute( MetaClassIOASM.ATTRIBUTE_NAME,
65                             bytes,
66                             0,
67                             bytes.length );
68          visitor.visitAttribute( attr );
69          assertNotNull( "descriptor", visitor.getClassDescriptor() );
70          assertNull( "ioe", visitor.getIoe() );
71      }
72  }