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.markers.DefaultFileMarkerHandler;
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 TestMarkerFileFilter
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 void testMarkerFile() throws ArtifactFilterException
76         
77      {
78          MarkerFileFilter filter = new MarkerFileFilter( true, true, false, new DefaultFileMarkerHandler( outputFolder ) );
79          Set result = filter.filter( artifacts );
80          assertEquals( 2, result.size() );
81  
82          filter.setOverWriteReleases( false );
83          filter.setOverWriteSnapshots( false );
84          result = filter.filter( artifacts );
85          assertEquals( 2, result.size() );
86      }
87  
88      public void testMarkerSnapshots() throws ArtifactFilterException, MojoExecutionException, IOException
89         
90      {
91          DefaultFileMarkerHandler handler = new DefaultFileMarkerHandler( fact.getSnapshotArtifact(), outputFolder );
92          handler.setMarker();
93  
94          MarkerFileFilter filter = new MarkerFileFilter( true, false, false, new DefaultFileMarkerHandler( outputFolder ) );
95          Set result = filter.filter( artifacts );
96          assertEquals( 1, result.size() );
97  
98          filter.setOverWriteSnapshots( true );
99          result = filter.filter( artifacts );
100         assertEquals( 2, result.size() );
101         assertTrue( handler.clearMarker() );
102         DependencyTestUtils.removeDirectory( outputFolder );
103         assertFalse( outputFolder.exists() );
104     }
105 
106     public void testMarkerRelease()
107         throws IOException, ArtifactFilterException, MojoExecutionException
108     {
109         DefaultFileMarkerHandler handler = new DefaultFileMarkerHandler( fact.getReleaseArtifact(), outputFolder );
110         handler.setMarker();
111 
112         MarkerFileFilter filter = new MarkerFileFilter( false, false, false,
113                                                         new DefaultFileMarkerHandler( outputFolder ) );
114         Set result = filter.filter( artifacts);
115         assertEquals( 1, result.size() );
116 
117         filter.setOverWriteReleases( true );
118         result = filter.filter( artifacts);
119         assertEquals( 2, result.size() );
120 
121         assertTrue( handler.clearMarker() );
122         DependencyTestUtils.removeDirectory( outputFolder );
123         assertFalse( outputFolder.exists() );
124     }
125 
126     public void testMarkerTimestamp()
127         throws IOException, MojoExecutionException, ArtifactFilterException
128     {
129         DependencyArtifactStubFactory fileFact = new DependencyArtifactStubFactory( outputFolder, true );
130         Artifact snap = fileFact.getSnapshotArtifact();
131         Artifact release = fileFact.getReleaseArtifact();
132         HashSet tempArtifacts = new HashSet();
133         tempArtifacts.add( snap );
134         tempArtifacts.add( release );
135         snap.getFile().setLastModified( snap.getFile().lastModified() + 1500 );
136         DefaultFileMarkerHandler handler = new DefaultFileMarkerHandler( snap, outputFolder );
137         handler.setMarker();
138         MarkerFileFilter filter = new MarkerFileFilter( false, false, true, new DefaultFileMarkerHandler( outputFolder ) );
139         Set result = filter.filter( tempArtifacts);
140         assertEquals( 2, result.size() );
141 
142         snap.getFile().setLastModified( snap.getFile().lastModified() - 10000 );
143 
144         result = filter.filter( tempArtifacts );
145         assertEquals( 1, result.size() );
146 
147         assertTrue( handler.clearMarker() );
148         assertFalse( handler.isMarkerSet() );
149         snap.getFile().delete();
150         release.getFile().delete();
151         DependencyTestUtils.removeDirectory( outputFolder );
152         assertFalse( outputFolder.exists() );
153     }
154 
155     public void testGettersSetters()
156     {
157         MarkerFileFilter filter = new MarkerFileFilter( true, false, true, new DefaultFileMarkerHandler( outputFolder ) );
158         assertEquals( true, filter.isOverWriteReleases() );
159         assertEquals( false, filter.isOverWriteSnapshots() );
160         assertEquals( true, filter.isOverWriteIfNewer() );
161 
162         filter.setOverWriteReleases( false );
163         filter.setOverWriteSnapshots( true );
164         filter.setOverWriteIfNewer( false );
165 
166         assertEquals( false, filter.isOverWriteReleases() );
167         assertEquals( true, filter.isOverWriteSnapshots() );
168         assertEquals( false, filter.isOverWriteIfNewer() );
169 
170     }
171 
172 }