View Javadoc

1   package org.apache.maven.plugin.dependency.utils.filters;
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.io.IOException;
24  import java.util.HashSet;
25  import java.util.Set;
26  
27  import junit.framework.TestCase;
28  
29  import org.apache.maven.artifact.Artifact;
30  import org.apache.maven.plugin.MojoExecutionException;
31  import org.apache.maven.plugin.dependency.testUtils.DependencyArtifactStubFactory;
32  import org.apache.maven.plugin.dependency.testUtils.DependencyTestUtils;
33  import org.apache.maven.plugin.dependency.utils.DependencyUtil;
34  import org.apache.maven.plugin.logging.Log;
35  import org.apache.maven.plugin.testing.SilentLog;
36  import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
37  
38  /**
39   * @author brianf
40   * 
41   */
42  public class TestDestFileFilter
43      extends TestCase
44  {
45      Set<Artifact> artifacts = new HashSet<Artifact>();
46  
47      Log log = new SilentLog();
48  
49      File outputFolder;
50  
51      DependencyArtifactStubFactory fact;
52  
53      protected void setUp()
54          throws Exception
55      {
56          super.setUp();
57  
58          outputFolder = new File( "target/markers/" );
59          DependencyTestUtils.removeDirectory( outputFolder );
60          assertFalse( outputFolder.exists() );
61  
62          this.fact = new DependencyArtifactStubFactory( outputFolder, false );
63          artifacts = fact.getReleaseAndSnapshotArtifacts();
64      }
65  
66      protected void tearDown()
67          throws IOException
68      {
69          DependencyTestUtils.removeDirectory( outputFolder );
70      }
71  
72      public File createFile( Artifact artifact )
73          throws IOException
74      {
75          return createFile( artifact, false, false, false );
76      }
77  
78      public File createFile( Artifact artifact, boolean useSubDirectoryPerArtifact, boolean useSubDirectoryPerType,
79                             boolean removeVersion)
80          throws IOException
81      {
82          return createFile(artifact, useSubDirectoryPerArtifact, useSubDirectoryPerType, removeVersion, false);
83      }
84      
85      public File createFile(Artifact artifact, boolean useSubDirectoryPerArtifact, boolean useSubDirectoryPerType,
86              boolean removeVersion, boolean removeClassifier)
87              throws IOException
88      {
89          File destFolder =
90                  DependencyUtil.getFormattedOutputDirectory(false, useSubDirectoryPerType, useSubDirectoryPerArtifact,
91                          false, false, outputFolder, artifact);
92          File destFile = new File(destFolder, DependencyUtil.getFormattedFileName(artifact, removeVersion, false, false, removeClassifier));
93  
94          destFile.getParentFile().mkdirs();
95          assertTrue(destFile.createNewFile());
96          return destFile;
97      }
98  
99      public void testDestFileRelease()
100         throws  IOException, ArtifactFilterException
101     {
102         DestFileFilter filter = new DestFileFilter( outputFolder );
103         Artifact artifact = fact.getReleaseArtifact();
104 
105         assertTrue( filter.isArtifactIncluded( artifact ) );
106         createFile( artifact );
107         assertFalse( filter.isArtifactIncluded( artifact) );
108 
109         filter.setOverWriteReleases( true );
110         assertTrue( filter.isArtifactIncluded( artifact ) );
111     }
112 
113     public void testDestFileSnapshot()
114         throws  IOException, ArtifactFilterException
115     {
116         DestFileFilter filter = new DestFileFilter( outputFolder );
117         Artifact artifact = fact.getSnapshotArtifact();
118 
119         assertTrue( filter.isArtifactIncluded( artifact ) );
120         createFile( artifact );
121         assertFalse( filter.isArtifactIncluded( artifact ) );
122 
123         filter.setOverWriteSnapshots( true );
124         assertTrue( filter.isArtifactIncluded( artifact ) );
125     }
126 
127     public void testDestFileStripVersion()
128         throws  IOException, ArtifactFilterException
129     {
130         DestFileFilter filter = new DestFileFilter( outputFolder );
131         Artifact artifact = fact.getSnapshotArtifact();
132         filter.setRemoveVersion( true );
133 
134         assertTrue( filter.isArtifactIncluded( artifact) );
135         createFile( artifact, false, false, true );
136         assertFalse( filter.isArtifactIncluded( artifact ) );
137 
138         filter.setOverWriteSnapshots( true );
139         assertTrue( filter.isArtifactIncluded( artifact ) );
140     }
141 
142     public void testDestFileStripClassifier()
143             throws IOException, ArtifactFilterException
144     {
145         DestFileFilter filter = new DestFileFilter(outputFolder);
146         Artifact artifact = fact.getSnapshotArtifact();
147         filter.setRemoveClassifier(true);
148 
149         assertTrue(filter.isArtifactIncluded(artifact));
150         createFile(artifact, false, false, false, true);
151         assertFalse(filter.isArtifactIncluded(artifact));
152 
153         filter.setOverWriteSnapshots(true);
154         assertTrue(filter.isArtifactIncluded(artifact));
155     }
156     
157     public void testDestFileSubPerArtifact()
158         throws  IOException, ArtifactFilterException
159     {
160         DestFileFilter filter = new DestFileFilter( outputFolder );
161         Artifact artifact = fact.getSnapshotArtifact();
162         filter.setUseSubDirectoryPerArtifact( true );
163 
164         assertTrue( filter.isArtifactIncluded( artifact ) );
165         createFile( artifact, true, false, false );
166         assertFalse( filter.isArtifactIncluded( artifact ) );
167 
168         filter.setOverWriteSnapshots( true );
169         assertTrue( filter.isArtifactIncluded( artifact ) );
170     }
171 
172     public void testDestFileSubPerType()
173         throws MojoExecutionException, IOException, ArtifactFilterException
174     {
175         DestFileFilter filter = new DestFileFilter( outputFolder );
176         Artifact artifact = fact.getSnapshotArtifact();
177         filter.setUseSubDirectoryPerType( true );
178 
179         assertTrue( filter.isArtifactIncluded( artifact) );
180         createFile( artifact, false, true, false );
181         assertFalse( filter.isArtifactIncluded( artifact ) );
182 
183         filter.setOverWriteSnapshots( true );
184         assertTrue( filter.isArtifactIncluded( artifact ) );
185     }
186 
187     public void testDestFileOverwriteIfNewer()
188         throws MojoExecutionException, IOException, ArtifactFilterException
189     {
190         DestFileFilter filter = new DestFileFilter( outputFolder );
191 
192         fact.setCreateFiles( true );
193         Artifact artifact = fact.getSnapshotArtifact();
194         File artifactFile = artifact.getFile();
195         artifactFile.setLastModified( artifactFile.lastModified() );
196         filter.setOverWriteIfNewer( true );
197 
198         // should pass because the file doesn't exist yet.
199         assertTrue( filter.isArtifactIncluded( artifact) );
200 
201         // create the file in the destination
202         File destFile = createFile( artifact, false, false, false );
203 
204         // set the last modified timestamp to be older than the source
205         destFile.setLastModified( artifactFile.lastModified() - 1000 );
206         assertTrue( filter.isArtifactIncluded( artifact ) );
207 
208         // now set the last modified timestamp to be newer than the source
209         destFile.setLastModified( artifactFile.lastModified() + 1000 );
210 
211         assertFalse( filter.isArtifactIncluded( artifact ) );
212     }
213 
214     public void testGettersSetters()
215     {
216         DestFileFilter filter = new DestFileFilter( null );
217         assertTrue( filter.getOutputFileDirectory() == null );
218         filter.setOutputFileDirectory( outputFolder );
219         assertSame( outputFolder, filter.getOutputFileDirectory() );
220 
221         filter.setOverWriteIfNewer( true );
222         assertTrue( filter.isOverWriteIfNewer() );
223         filter.setOverWriteIfNewer( false );
224         assertFalse( filter.isOverWriteIfNewer() );
225 
226         filter.setOverWriteReleases( true );
227         assertTrue( filter.isOverWriteReleases() );
228         filter.setOverWriteReleases( false );
229         assertFalse( filter.isOverWriteReleases() );
230 
231         filter.setOverWriteSnapshots( true );
232         assertTrue( filter.isOverWriteSnapshots() );
233         filter.setOverWriteSnapshots( false );
234         assertFalse( filter.isOverWriteSnapshots() );
235 
236         filter.setUseSubDirectoryPerArtifact( true );
237         assertTrue( filter.isUseSubDirectoryPerArtifact() );
238         filter.setUseSubDirectoryPerArtifact( false );
239         assertFalse( filter.isUseSubDirectoryPerArtifact() );
240 
241         filter.setUseSubDirectoryPerType( true );
242         assertTrue( filter.isUseSubDirectoryPerType() );
243         filter.setUseSubDirectoryPerType( false );
244         assertFalse( filter.isUseSubDirectoryPerType() );
245 
246         filter.setRemoveVersion( true );
247         assertTrue( filter.isRemoveVersion() );
248         filter.setRemoveVersion( false );
249         assertFalse( filter.isRemoveVersion() );
250     }
251 }