View Javadoc

1   package org.apache.maven.plugin.dependency.utils;
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 java.io.File;
23  import java.util.ArrayList;
24  import java.util.List;
25  import java.util.Random;
26  
27  import junit.framework.TestCase;
28  
29  import org.apache.maven.artifact.Artifact;
30  import org.apache.maven.artifact.DefaultArtifact;
31  import org.apache.maven.artifact.handler.ArtifactHandler;
32  import org.apache.maven.artifact.versioning.VersionRange;
33  import org.apache.maven.plugin.MojoExecutionException;
34  import org.apache.maven.plugin.logging.Log;
35  import org.apache.maven.plugin.testing.SilentLog;
36  import org.apache.maven.plugin.testing.stubs.DefaultArtifactHandlerStub;
37  import org.codehaus.plexus.util.StringUtils;
38  
39  /**
40   * @author brianf
41   * 
42   */
43  public class TestDependencyUtil
44      extends TestCase
45  {
46      List<Artifact> artifacts = new ArrayList<Artifact>();
47  
48      Log log = new SilentLog();
49  
50      File outputFolder;
51  
52      Artifact snap;
53  
54      Artifact release;
55  
56      Artifact sources;
57  
58      protected void setUp()
59          throws Exception
60      {
61          super.setUp();
62  
63          ArtifactHandler ah = new DefaultArtifactHandlerStub( "jar", null );
64          VersionRange vr = VersionRange.createFromVersion( "1.1" );
65          release = new DefaultArtifact( "test", "one", vr, Artifact.SCOPE_COMPILE, "jar", "sources", ah, false );
66          artifacts.add( release );
67  
68          ah = new DefaultArtifactHandlerStub( "war", null );
69          vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
70          snap = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", null, ah, false );
71          artifacts.add( snap );
72  
73          ah = new DefaultArtifactHandlerStub( "war", null );
74          vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
75          sources = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "sources", "sources", ah, false );
76  
77          // pick random output location
78          Random a = new Random();
79          outputFolder = new File( "target/copy" + a.nextLong() + "/" );
80          outputFolder.delete();
81          assertFalse( outputFolder.exists() );
82      }
83  
84      protected void tearDown()
85      {
86  
87      }
88  
89      public void testDirectoryName()
90          throws MojoExecutionException
91      {
92          File folder = new File( "target/a" );
93          final Artifact artifact = artifacts.get( 0 );
94          File name = DependencyUtil.getFormattedOutputDirectory( false, false, false, false, false, folder, artifact );
95          // object is the same.
96          assertEquals( folder, name );
97  
98          name = DependencyUtil.getFormattedOutputDirectory( false, false, false, true, false, folder, artifact );
99          String expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "one"
100             + File.separatorChar + "1.1";
101         assertTrue( expectedResult.equalsIgnoreCase( name.getAbsolutePath() ) );
102 
103         name = DependencyUtil.getFormattedOutputDirectory( false,  true, false, false, false, folder, artifact );
104         expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars";
105         assertTrue( expectedResult.equalsIgnoreCase( name.getAbsolutePath() ) );
106 
107         name = DependencyUtil.getFormattedOutputDirectory( true,  false, false, false, false, folder, artifact );
108         expectedResult = folder.getAbsolutePath() + File.separatorChar + "compile";
109         assertEquals( expectedResult,  name.getAbsolutePath() );
110         assertTrue( expectedResult.equalsIgnoreCase( name.getAbsolutePath() ) );
111 
112         name = DependencyUtil.getFormattedOutputDirectory( false, false, true, false, false, folder, artifact );
113         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources-1.1-jar";
114         assertEquals( expectedResult, name.getAbsolutePath() );
115 
116         name = DependencyUtil.getFormattedOutputDirectory( false, false, true, false, true, folder, artifact );
117         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources-jar";
118         assertEquals( expectedResult, name.getAbsolutePath() );
119 
120         name = DependencyUtil.getFormattedOutputDirectory( false, true, true, false, false, folder, artifact );
121         expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar
122             + "one-sources-1.1-jar";
123         assertEquals( expectedResult, name.getAbsolutePath() );
124 
125         name = DependencyUtil.getFormattedOutputDirectory( false, true, true, false, true, folder, artifact );
126         expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar
127             + "one-sources-jar";
128         assertEquals( expectedResult, name.getAbsolutePath() );
129 
130         name = DependencyUtil.getFormattedOutputDirectory( true, false, true, false, true, folder, artifact );
131         expectedResult = folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar
132             + "one-sources-jar";
133         assertEquals( expectedResult, name.getAbsolutePath() );
134     }
135 
136     public void testDirectoryName2()
137         throws MojoExecutionException
138     {
139         File folder = new File( "target/a" );
140         final Artifact artifact = artifacts.get( 1 );
141         File name = DependencyUtil.getFormattedOutputDirectory( false, false, false, false, false, folder, artifact );
142         // object is the same.
143         assertEquals( folder, name );
144 
145         name = DependencyUtil.getFormattedOutputDirectory( false, true, false, false, false, folder, artifact );
146         String expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars";
147         assertEquals( expectedResult, name.getAbsolutePath() );
148 
149         name = DependencyUtil.getFormattedOutputDirectory( false, false, false, true, false, folder, artifact );
150         expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "two"
151             + File.separatorChar + "1.1-SNAPSHOT";
152         assertEquals( expectedResult, name.getAbsolutePath() );
153 
154         name = DependencyUtil.getFormattedOutputDirectory( false, false, true, false, false, folder, artifact );
155         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-war";
156         assertEquals( expectedResult, name.getAbsolutePath() );
157 
158         name = DependencyUtil.getFormattedOutputDirectory( false, true, true, false, false, folder, artifact );
159         expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar
160             + "two-1.1-SNAPSHOT-war";
161         assertEquals( expectedResult, name.getAbsolutePath() );
162 
163         name = DependencyUtil.getFormattedOutputDirectory( false, false, true, false, true, folder, artifact );
164         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-war";
165         assertEquals( expectedResult, name.getAbsolutePath() );
166 
167         name = DependencyUtil.getFormattedOutputDirectory( false, true, true, false, true, folder, artifact );
168         expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-war";
169         assertEquals( expectedResult, name.getAbsolutePath() );
170     }
171 
172     public void testDirectoryNameSources()
173         throws MojoExecutionException
174     {
175         File folder = new File( "target/a" );
176         File name = DependencyUtil.getFormattedOutputDirectory( false, false, true, false, true, folder, sources );
177         String expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources";
178         assertEquals( expectedResult, name.getAbsolutePath() );
179 
180         name = DependencyUtil.getFormattedOutputDirectory( false, false, true, false, false, folder, sources );
181         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources-1.1-SNAPSHOT-sources";
182         assertEquals( expectedResult, name.getAbsolutePath() );
183     }
184 
185     public void testFileName()
186         throws MojoExecutionException
187     {
188         Artifact artifact = artifacts.get( 0 );
189 
190         String name = DependencyUtil.getFormattedFileName( artifact, false );
191         String expectedResult = "one-1.1-sources.jar";
192         assertEquals( expectedResult, name );
193         name = DependencyUtil.getFormattedFileName( artifact, true );
194         expectedResult = "one-sources.jar";
195         assertEquals( expectedResult, name );
196     }
197 
198     public void testTestJar()
199     {
200         ArtifactHandler ah = new DefaultArtifactHandlerStub( "test-jar", null );
201         VersionRange vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
202         Artifact artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "test-jar", null, ah,
203                                                  false );
204 
205         String name = DependencyUtil.getFormattedFileName( artifact, false );
206         String expectedResult = "two-1.1-SNAPSHOT.jar";
207         assertEquals( expectedResult, name );
208 
209     }
210 
211     public void testFileNameClassifier()
212         throws MojoExecutionException
213     {
214         ArtifactHandler ah = new DefaultArtifactHandlerStub( "jar", "sources" );
215         VersionRange vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
216         Artifact artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "jar", "sources", ah,
217                                                  false );
218 
219         String name = DependencyUtil.getFormattedFileName( artifact, false );
220         String expectedResult = "two-1.1-SNAPSHOT-sources.jar";
221         assertEquals( expectedResult, name );
222 
223         name = DependencyUtil.getFormattedFileName( artifact, true );
224         expectedResult = "two-sources.jar";
225         assertEquals( expectedResult, name );
226 
227         ah = new DefaultArtifactHandlerStub( "war", null );
228         artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false );
229         name = DependencyUtil.getFormattedFileName( artifact, true );
230         expectedResult = "two.war";
231         assertEquals( expectedResult, name );
232 
233     }
234 
235     public void testFileNameClassifierWithFile()
236         throws MojoExecutionException
237     {
238         // specifically testing the default operation that getFormattedFileName
239         // returns
240         // the actual name of the file if available unless remove version is
241         // set.
242         ArtifactHandler ah = new DefaultArtifactHandlerStub( "war", "sources" );
243         VersionRange vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
244         Artifact artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "sources", ah,
245                                                  false );
246         File file = new File( "/target", "test-file-name.jar" );
247         artifact.setFile( file );
248 
249         String name = DependencyUtil.getFormattedFileName( artifact, false );
250         String expectedResult = "two-1.1-SNAPSHOT-sources.war";
251         assertEquals( expectedResult, name );
252 
253         name = DependencyUtil.getFormattedFileName( artifact, true );
254         expectedResult = "two-sources.war";
255         assertEquals( expectedResult, name );
256 
257         artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false );
258         name = DependencyUtil.getFormattedFileName( artifact, true );
259         expectedResult = "two.war";
260         assertEquals( expectedResult, name );
261 
262         // test that we pickup the correct extension in the file name if set.
263         ah = new DefaultArtifactHandlerStub( "jar", null );
264         artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false );
265         name = DependencyUtil.getFormattedFileName( artifact, true );
266         expectedResult = "two.jar";
267         assertEquals( expectedResult, name );
268 
269     }
270     
271     public void testTokenizer()
272     {
273         String [] tokens = DependencyUtil.tokenizer( " alpha,bravo, charlie , delta kappa, theta" );
274         String[] expected = new String[] { "alpha", "bravo", "charlie", "delta kappa", "theta" };
275         // easier to see in the JUnit reports
276         assertEquals( StringUtils.join( expected, ", " ), StringUtils.join( tokens, ", " ) );
277         assertEquals( expected.length, tokens.length );
278         
279         tokens = DependencyUtil.tokenizer( " \r\n a, \t \n \r b \t \n \r" );
280         assertEquals( 2, tokens.length );
281         assertEquals( "a", tokens[0] );
282         assertEquals( "b", tokens[1] );
283         
284         tokens = DependencyUtil.tokenizer( null );
285         assertEquals( 0, tokens.length );
286 
287         tokens = DependencyUtil.tokenizer( "  " );
288         assertEquals( 0, tokens.length );
289     }
290 }