1 package org.apache.maven.shared.filtering;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
40
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
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
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
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
138
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
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
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 }