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          File destFolder =
83              DependencyUtil.getFormattedOutputDirectory( false, useSubDirectoryPerType, useSubDirectoryPerArtifact,
84                                                          false, false, outputFolder, artifact );
85          File destFile = new File( destFolder, DependencyUtil.getFormattedFileName( artifact, removeVersion ) );
86  
87          destFile.getParentFile().mkdirs();
88          assertTrue( destFile.createNewFile() );
89          return destFile;
90      }
91  
92      public void testDestFileRelease()
93          throws  IOException, ArtifactFilterException
94      {
95          DestFileFilter filter = new DestFileFilter( outputFolder );
96          Artifact artifact = fact.getReleaseArtifact();
97  
98          assertTrue( filter.isArtifactIncluded( artifact ) );
99          createFile( artifact );
100         assertFalse( filter.isArtifactIncluded( artifact) );
101 
102         filter.setOverWriteReleases( true );
103         assertTrue( filter.isArtifactIncluded( artifact ) );
104     }
105 
106     public void testDestFileSnapshot()
107         throws  IOException, ArtifactFilterException
108     {
109         DestFileFilter filter = new DestFileFilter( outputFolder );
110         Artifact artifact = fact.getSnapshotArtifact();
111 
112         assertTrue( filter.isArtifactIncluded( artifact ) );
113         createFile( artifact );
114         assertFalse( filter.isArtifactIncluded( artifact ) );
115 
116         filter.setOverWriteSnapshots( true );
117         assertTrue( filter.isArtifactIncluded( artifact ) );
118     }
119 
120     public void testDestFileStripVersion()
121         throws  IOException, ArtifactFilterException
122     {
123         DestFileFilter filter = new DestFileFilter( outputFolder );
124         Artifact artifact = fact.getSnapshotArtifact();
125         filter.setRemoveVersion( true );
126 
127         assertTrue( filter.isArtifactIncluded( artifact) );
128         createFile( artifact, false, false, true );
129         assertFalse( filter.isArtifactIncluded( artifact ) );
130 
131         filter.setOverWriteSnapshots( true );
132         assertTrue( filter.isArtifactIncluded( artifact ) );
133     }
134 
135     public void testDestFileSubPerArtifact()
136         throws  IOException, ArtifactFilterException
137     {
138         DestFileFilter filter = new DestFileFilter( outputFolder );
139         Artifact artifact = fact.getSnapshotArtifact();
140         filter.setUseSubDirectoryPerArtifact( true );
141 
142         assertTrue( filter.isArtifactIncluded( artifact ) );
143         createFile( artifact, true, false, false );
144         assertFalse( filter.isArtifactIncluded( artifact ) );
145 
146         filter.setOverWriteSnapshots( true );
147         assertTrue( filter.isArtifactIncluded( artifact ) );
148     }
149 
150     public void testDestFileSubPerType()
151         throws MojoExecutionException, IOException, ArtifactFilterException
152     {
153         DestFileFilter filter = new DestFileFilter( outputFolder );
154         Artifact artifact = fact.getSnapshotArtifact();
155         filter.setUseSubDirectoryPerType( true );
156 
157         assertTrue( filter.isArtifactIncluded( artifact) );
158         createFile( artifact, false, true, false );
159         assertFalse( filter.isArtifactIncluded( artifact ) );
160 
161         filter.setOverWriteSnapshots( true );
162         assertTrue( filter.isArtifactIncluded( artifact ) );
163     }
164 
165     public void testDestFileOverwriteIfNewer()
166         throws MojoExecutionException, IOException, ArtifactFilterException
167     {
168         DestFileFilter filter = new DestFileFilter( outputFolder );
169 
170         fact.setCreateFiles( true );
171         Artifact artifact = fact.getSnapshotArtifact();
172         File artifactFile = artifact.getFile();
173         artifactFile.setLastModified( artifactFile.lastModified() );
174         filter.setOverWriteIfNewer( true );
175 
176         // should pass because the file doesn't exist yet.
177         assertTrue( filter.isArtifactIncluded( artifact) );
178 
179         // create the file in the destination
180         File destFile = createFile( artifact, false, false, false );
181 
182         // set the last modified timestamp to be older than the source
183         destFile.setLastModified( artifactFile.lastModified() - 1000 );
184         assertTrue( filter.isArtifactIncluded( artifact ) );
185 
186         // now set the last modified timestamp to be newer than the source
187         destFile.setLastModified( artifactFile.lastModified() + 1000 );
188 
189         assertFalse( filter.isArtifactIncluded( artifact ) );
190     }
191 
192     public void testGettersSetters()
193     {
194         DestFileFilter filter = new DestFileFilter( null );
195         assertTrue( filter.getOutputFileDirectory() == null );
196         filter.setOutputFileDirectory( outputFolder );
197         assertSame( outputFolder, filter.getOutputFileDirectory() );
198 
199         filter.setOverWriteIfNewer( true );
200         assertTrue( filter.isOverWriteIfNewer() );
201         filter.setOverWriteIfNewer( false );
202         assertFalse( filter.isOverWriteIfNewer() );
203 
204         filter.setOverWriteReleases( true );
205         assertTrue( filter.isOverWriteReleases() );
206         filter.setOverWriteReleases( false );
207         assertFalse( filter.isOverWriteReleases() );
208 
209         filter.setOverWriteSnapshots( true );
210         assertTrue( filter.isOverWriteSnapshots() );
211         filter.setOverWriteSnapshots( false );
212         assertFalse( filter.isOverWriteSnapshots() );
213 
214         filter.setUseSubDirectoryPerArtifact( true );
215         assertTrue( filter.isUseSubDirectoryPerArtifact() );
216         filter.setUseSubDirectoryPerArtifact( false );
217         assertFalse( filter.isUseSubDirectoryPerArtifact() );
218 
219         filter.setUseSubDirectoryPerType( true );
220         assertTrue( filter.isUseSubDirectoryPerType() );
221         filter.setUseSubDirectoryPerType( false );
222         assertFalse( filter.isUseSubDirectoryPerType() );
223 
224         filter.setRemoveVersion( true );
225         assertTrue( filter.isRemoveVersion() );
226         filter.setRemoveVersion( false );
227         assertFalse( filter.isRemoveVersion() );
228     }
229 }