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