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