View Javadoc
1   package org.apache.maven.shared.filtering;
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.Reader;
24  import java.io.StringReader;
25  import java.util.ArrayList;
26  import java.util.Arrays;
27  import java.util.Collections;
28  import java.util.LinkedHashSet;
29  import java.util.List;
30  import java.util.Properties;
31  
32  import org.apache.maven.project.MavenProject;
33  import org.apache.maven.shared.utils.io.FileUtils;
34  import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
35  import org.apache.maven.shared.utils.io.IOUtil;
36  import org.codehaus.plexus.PlexusTestCase;
37  
38  /**
39   * @author Olivier Lamy
40   * @version $Id: DefaultMavenFileFilterTest.java 1567425 2014-02-11 22:30:39Z rfscholte $
41   */
42  public class DefaultMavenFileFilterTest
43      extends PlexusTestCase
44  {
45      
46      
47  
48      File to = new File( getBasedir(), "target/reflection-test.properties" );
49  
50      protected void setUp()
51          throws Exception
52      {
53          super.setUp();
54          if ( to.exists() )
55          {
56              FileUtils.forceDelete( to );
57          }
58      }
59  
60      public void testNotOverwriteFile()
61          throws Exception
62      {
63          MavenFileFilter mavenFileFilter = (MavenFileFilter) lookup( MavenFileFilter.class.getName(), "default" );
64  
65          File from = new File( getBasedir(), "src/test/units-files/reflection-test.properties" );
66  
67          mavenFileFilter.copyFile( from, to, false, null, null );
68  
69          from = new File( getBasedir(), "src/test/units-files/reflection-test-older.properties" );
70  
71          // very old file :-)
72          from.setLastModified( 1 );
73  
74          to.setLastModified( System.currentTimeMillis() );
75  
76          mavenFileFilter.copyFile( from, to, false, null, null );
77  
78          Properties properties = PropertyUtils.loadPropertyFile( to, null );
79          assertEquals( "${pom.version}", properties.getProperty( "version" ) );
80  
81      }
82  
83      public void testOverwriteFile()
84          throws Exception
85      {
86          MavenFileFilter mavenFileFilter = (MavenFileFilter) lookup( MavenFileFilter.class.getName(), "default" );
87  
88          File from = new File( getBasedir(), "src/test/units-files/reflection-test.properties" );
89  
90          mavenFileFilter.copyFile( from, to, false, null, null );
91  
92          from = new File( getBasedir(), "src/test/units-files/reflection-test-older.properties" );
93  
94          // very old file :-)
95          from.setLastModified( 1 );
96  
97          to.setLastModified( System.currentTimeMillis() );
98  
99          mavenFileFilter.copyFile( from, to, false, null, null, true );
100 
101         Properties properties = PropertyUtils.loadPropertyFile( to, null );
102         assertEquals( "older file", properties.getProperty( "version" ) );
103 
104     }
105 
106     public void testNullSafeDefaultFilterWrappers()
107         throws Exception
108     {
109         MavenFileFilter mavenFileFilter = (MavenFileFilter) lookup( MavenFileFilter.class.getName(), "default" );
110 
111         mavenFileFilter.getDefaultFilterWrappers( null, null, false, null, null );
112 
113         // shouldn't fail
114     }
115 
116     public void testMultiFilterFileInheritance()
117         throws Exception
118     {
119         DefaultMavenFileFilter mavenFileFilter = new DefaultMavenFileFilter();
120 
121         File testDir = new File( getBasedir(), "src/test/units-files/MSHARED-177" );
122 
123         List<String> filters = new ArrayList<String>();
124 
125         filters.add( new File( testDir, "first_filter_file.properties" ).getAbsolutePath() );
126         filters.add( new File( testDir, "second_filter_file.properties" ).getAbsolutePath() );
127         filters.add( new File( testDir, "third_filter_file.properties" ).getAbsolutePath() );
128 
129         final Properties filterProperties = new Properties();
130 
131         mavenFileFilter.loadProperties( filterProperties, new File( getBasedir() ), filters, new Properties() );
132 
133         assertTrue( filterProperties.getProperty( "third_filter_key" ).equals( "first and second" ) );
134     }
135     
136 
137     // MSHARED-161: DefaultMavenFileFilter.getDefaultFilterWrappers loads
138     // filters from the current directory instead of using basedir
139     public void testMavenBasedir()
140         throws Exception
141     {
142         MavenFileFilter mavenFileFilter = (MavenFileFilter) lookup( MavenFileFilter.class.getName(), "default" );
143 
144         AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
145         req.setFileFilters( Collections.singletonList( "src/main/filters/filefilter.properties" ) );
146 
147         MavenProject mavenProject = new StubMavenProject( new File( "src/test/units-files/MSHARED-161" ) );
148         mavenProject.getBuild().setFilters( Collections.singletonList( "src/main/filters/buildfilter.properties" ) );
149         req.setMavenProject( mavenProject );
150         req.setInjectProjectBuildFilters( true );
151 
152         List<FilterWrapper> wrappers = mavenFileFilter.getDefaultFilterWrappers( req );
153         
154         Reader reader = wrappers.get(0).getReader( new StringReader( "${filefilter} ${buildfilter}" ) );
155         
156         assertEquals( "true true", IOUtil.toString( reader ) );
157     }
158 
159     // MSHARED-198: custom delimiters doesn't work as expected
160     public void testCustomDelimiters()
161         throws Exception
162     {
163         MavenFileFilter mavenFileFilter = (MavenFileFilter) lookup( MavenFileFilter.class.getName(), "default" );
164 
165         AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
166         Properties additionalProperties = new Properties();
167         additionalProperties.setProperty( "FILTER.a.ME", "DONE" );
168         req.setAdditionalProperties( additionalProperties );
169         req.setDelimiters( new LinkedHashSet<String>( Arrays.asList( "aaa*aaa", "abc*abc" ) ) );
170 
171         List<FilterWrapper> wrappers = mavenFileFilter.getDefaultFilterWrappers( req );
172 
173         Reader reader = wrappers.get( 0 ).getReader( new StringReader( "aaaFILTER.a.MEaaa" ) );
174         assertEquals( "DONE", IOUtil.toString( reader ) );
175 
176         reader = wrappers.get( 0 ).getReader( new StringReader( "abcFILTER.a.MEabc" ) );
177         assertEquals( "DONE", IOUtil.toString( reader ) );
178     }
179     
180     // MSHARED-199: Filtering doesn't work if 2 delimiters are used on the same line, the first one being left open
181     public void testLineWithSingleAtAndExpression() throws Exception
182     {
183         MavenFileFilter mavenFileFilter = (MavenFileFilter) lookup( MavenFileFilter.class.getName(), "default" );
184 
185         AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
186         Properties additionalProperties = new Properties();
187         additionalProperties.setProperty( "foo", "bar" );
188         req.setAdditionalProperties( additionalProperties );
189 
190         List<FilterWrapper> wrappers = mavenFileFilter.getDefaultFilterWrappers( req );
191 
192         Reader reader = wrappers.get( 0 ).getReader( new StringReader( "toto@titi.com ${foo}" ) );
193         assertEquals( "toto@titi.com bar", IOUtil.toString( reader ) );
194     }
195 }