1   package org.apache.maven.shared.jar.classes;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.shared.jar.AbstractJarAnalyzerTestCase;
23  import org.apache.maven.shared.jar.JarAnalyzer;
24  
25  import java.io.File;
26  
27  
28  /**
29   * JarAnalyzer Classes Test Case
30   */
31  public class JarClassesAnalyzerTest
32      extends AbstractJarAnalyzerTestCase
33  {
34      private JarClassesAnalysis analyzer;
35  
36      public void setUp()
37          throws Exception
38      {
39          super.setUp();
40  
41          analyzer = (JarClassesAnalysis) lookup( JarClassesAnalysis.class.getName() );
42      }
43  
44      public void testAnalyzeJXR()
45          throws Exception
46      {
47          JarClasses jclass = getJarClasses( "jxr.jar" );
48  
49          assertFalse( "classes.imports.length > 0", jclass.getImports().isEmpty() );
50          assertFalse( "classes.packages.length > 0", jclass.getPackages().isEmpty() );
51          assertFalse( "classes.methods.length > 0", jclass.getMethods().isEmpty() );
52  
53          assertNotContainsRegex( "Import List", "[\\[\\)\\(\\;]", jclass.getImports() );
54  
55          // TODO: test for classes, methods, etc.
56  
57          assertTrue( "classes.imports", jclass.getImports().contains( "org.apache.maven.jxr.JXR" ) );
58          assertTrue( "classes.imports", jclass.getImports().contains( "org.apache.oro.text.perl.Perl5Util" ) );
59          assertTrue( "classes.imports", jclass.getImports().contains( "org.codehaus.plexus.util.IOUtil" ) );
60          assertTrue( "classes.packages", jclass.getPackages().contains( "org.apache.maven.jxr.pacman" ) );
61      }
62  
63      public void testAnalyzeANT()
64          throws Exception
65      {
66          JarClasses jclass = getJarClasses( "ant.jar" );
67  
68          assertFalse( "classes.imports.length > 0", jclass.getImports().isEmpty() );
69          assertFalse( "classes.packages.length > 0", jclass.getPackages().isEmpty() );
70          assertFalse( "classes.methods.length > 0", jclass.getMethods().isEmpty() );
71  
72          assertNotContainsRegex( "Import List", "[\\[\\)\\(\\;]", jclass.getImports() );
73  
74          assertTrue( "classes.imports", jclass.getImports().contains( "java.util.zip.GZIPInputStream" ) );
75          assertTrue( "classes.imports", jclass.getImports().contains( "org.apache.tools.ant.XmlLogger$TimedElement" ) );
76          assertTrue( "classes.imports", jclass.getImports().contains( "org.apache.tools.mail.MailMessage" ) );
77          assertTrue( "classes.packages", jclass.getPackages().contains( "org.apache.tools.ant" ) );
78          assertTrue( "classes.packages", jclass.getPackages().contains( "org.apache.tools.bzip2" ) );
79      }
80  
81      public void testAnalyzeJarWithInvalidClassFile()
82          throws Exception
83      {
84          JarClasses jclass = getJarClasses( "invalid-class-file.jar" );
85  
86          // Doesn't fail, as exceptions are ignored.
87          assertTrue( jclass.getClassNames().isEmpty() );
88          assertTrue( jclass.getPackages().isEmpty() );
89          assertTrue( jclass.getImports().isEmpty() );
90          assertNull( jclass.getJdkRevision() );
91          assertTrue( jclass.getMethods().isEmpty() );
92      }
93  
94      public void testAnalyzeJarWithDebug()
95          throws Exception
96      {
97          JarClasses jclass = getJarClasses( "helloworld-1.4-debug.jar" );
98  
99          assertTrue( "has debug", jclass.isDebugPresent() );
100     }
101 
102     public void testAnalyzeJarWithoutDebug()
103         throws Exception
104     {
105         JarClasses jclass = getJarClasses( "helloworld-1.4.jar" );
106 
107         assertFalse( "no debug present", jclass.isDebugPresent() );
108     }
109 
110     public void testAnalyzeJarVersion16()
111         throws Exception
112     {
113         JarClasses jclass = getJarClasses( "helloworld-1.6.jar" );
114 
115         assertEquals( "jdkrevision", "1.6", jclass.getJdkRevision() );
116     }
117 
118     public void testAnalyzeJarVersion15()
119         throws Exception
120     {
121         JarClasses jclass = getJarClasses( "helloworld-1.5.jar" );
122 
123         assertEquals( "jdkrevision", "1.5", jclass.getJdkRevision() );
124     }
125 
126     public void testAnalyzeJarVersion14()
127         throws Exception
128     {
129         JarClasses jclass = getJarClasses( "helloworld-1.4.jar" );
130 
131         assertEquals( "jdkrevision", "1.4", jclass.getJdkRevision() );
132     }
133 
134     public void testAnalyzeJarVersion13()
135         throws Exception
136     {
137         JarClasses jclass = getJarClasses( "helloworld-1.3.jar" );
138 
139         assertEquals( "jdkrevision", "1.3", jclass.getJdkRevision() );
140     }
141 
142     public void testAnalyzeJarVersion12()
143         throws Exception
144     {
145         JarClasses jclass = getJarClasses( "helloworld-1.2.jar" );
146 
147         assertEquals( "jdkrevision", "1.2", jclass.getJdkRevision() );
148     }
149 
150     public void testAnalyzeJarVersion11()
151         throws Exception
152     {
153         JarClasses jclass = getJarClasses( "helloworld-1.1.jar" );
154 
155         assertEquals( "jdkrevision", "1.1", jclass.getJdkRevision() );
156     }
157 
158     private JarClasses getJarClasses( String filename )
159         throws Exception
160     {
161         File file = getSampleJar( filename );
162 
163         JarClasses jclass = analyzer.analyze( new JarAnalyzer( file ) );
164         assertNotNull( "JarClasses", jclass );
165 
166         return jclass;
167     }
168 }