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