1 package org.apache.maven.shared.filtering;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.util.ArrayList;
8 import java.util.HashMap;
9 import java.util.HashSet;
10 import java.util.List;
11 import java.util.Properties;
12
13 import org.apache.maven.model.Resource;
14 import org.codehaus.plexus.PlexusTestCase;
15 import org.codehaus.plexus.util.FileUtils;
16 import org.codehaus.plexus.util.IOUtil;
17 import org.sonatype.plexus.build.incremental.ThreadBuildContext;
18 import org.sonatype.plexus.build.incremental.test.TestIncrementalBuildContext;
19
20 public class IncrementalResourceFilteringTest
21 extends PlexusTestCase
22 {
23
24 File outputDirectory = new File( getBasedir(), "target/IncrementalResourceFilteringTest" );
25
26 File unitDirectory = new File( getBasedir(), "src/test/units-files/incremental" );
27
28 protected void setUp()
29 throws Exception
30 {
31 super.setUp();
32 if ( outputDirectory.exists() )
33 {
34 FileUtils.forceDelete( outputDirectory );
35 }
36 outputDirectory.mkdirs();
37 }
38
39 public void testSimpleIncrementalFiltering()
40 throws Exception
41 {
42
43 filter( "time" );
44
45 assertTime( "time", "file01.txt" );
46 assertTime( "time", "file02.txt" );
47
48
49 HashSet changedFiles = new HashSet();
50 changedFiles.add( "file01.txt" );
51
52 TestIncrementalBuildContext ctx = new TestIncrementalBuildContext( unitDirectory, changedFiles, new HashMap() );
53 ThreadBuildContext.setThreadBuildContext( ctx );
54
55 filter( "notime" );
56 assertTime( "notime", "file01.txt" );
57 assertTime( "time", "file02.txt" );
58
59 assertTrue( ctx.getRefreshFiles().contains( new File( outputDirectory, "file01.txt" ) ) );
60
61
62 HashSet deletedFiles = new HashSet();
63 deletedFiles.add( "file01.txt" );
64
65 ctx = new TestIncrementalBuildContext( unitDirectory, new HashSet(), changedFiles, new HashMap() );
66 ThreadBuildContext.setThreadBuildContext( ctx );
67
68 filter( "moretime" );
69 assertFalse( new File( outputDirectory, "file01.txt" ).exists() );
70 assertTime( "time", "file02.txt" );
71
72 assertTrue( ctx.getRefreshFiles().contains( new File( outputDirectory, "file01.txt" ) ) );
73
74 }
75
76 public void testOutputChange()
77 throws Exception
78 {
79
80 filter( "time" );
81
82
83 HashSet changedFiles = new HashSet();
84 changedFiles.add( "target/IncrementalResourceFilteringTest" );
85 TestIncrementalBuildContext ctx = new TestIncrementalBuildContext( unitDirectory, changedFiles, new HashMap() );
86 ThreadBuildContext.setThreadBuildContext( ctx );
87
88 filter( "notime" );
89 assertTime( "notime", "file01.txt" );
90 assertTime( "notime", "file02.txt" );
91
92 assertTrue( ctx.getRefreshFiles().contains( new File( outputDirectory, "file01.txt" ) ) );
93 assertTrue( ctx.getRefreshFiles().contains( new File( outputDirectory, "file02.txt" ) ) );
94
95 }
96
97 public void testFilterChange()
98 throws Exception
99 {
100
101 filter( "time" );
102
103
104 HashSet changedFiles = new HashSet();
105 changedFiles.add( "filters.txt" );
106 TestIncrementalBuildContext ctx = new TestIncrementalBuildContext( unitDirectory, changedFiles, new HashMap() );
107 ThreadBuildContext.setThreadBuildContext( ctx );
108
109 filter( "notime" );
110 assertTime( "notime", "file01.txt" );
111 assertTime( "notime", "file02.txt" );
112
113 assertTrue( ctx.getRefreshFiles().contains( new File( outputDirectory, "file01.txt" ) ) );
114 assertTrue( ctx.getRefreshFiles().contains( new File( outputDirectory, "file02.txt" ) ) );
115
116 }
117
118 public void testFilterDeleted()
119 throws Exception
120 {
121
122 filter( "time" );
123
124
125 HashSet deletedFiles = new HashSet();
126 deletedFiles.add( "filters.txt" );
127 TestIncrementalBuildContext ctx =
128 new TestIncrementalBuildContext( unitDirectory, new HashSet(), deletedFiles, new HashMap() );
129 ThreadBuildContext.setThreadBuildContext( ctx );
130
131 filter( "notime" );
132 assertTime( "notime", "file01.txt" );
133 assertTime( "notime", "file02.txt" );
134
135 assertTrue( ctx.getRefreshFiles().contains( new File( outputDirectory, "file01.txt" ) ) );
136 assertTrue( ctx.getRefreshFiles().contains( new File( outputDirectory, "file02.txt" ) ) );
137 }
138
139 private void assertTime( String time, String relpath )
140 throws IOException
141 {
142 Properties properties = new Properties();
143
144 InputStream is = new FileInputStream( new File( outputDirectory, relpath ) );
145 try
146 {
147 properties.load( is );
148 }
149 finally
150 {
151 IOUtil.close( is );
152 }
153
154 assertEquals( time, properties.getProperty( "time" ) );
155 }
156
157 private void filter( String time )
158 throws Exception, MavenFilteringException
159 {
160 File baseDir = new File( getBasedir() );
161 StubMavenProject mavenProject = new StubMavenProject( baseDir );
162 mavenProject.setVersion( "1.0" );
163 mavenProject.setGroupId( "org.apache" );
164 mavenProject.setName( "test project" );
165
166 Properties projectProperties = new Properties();
167 projectProperties.put( "time", time );
168 projectProperties.put( "java.version", "zloug" );
169 mavenProject.setProperties( projectProperties );
170 MavenResourcesFiltering mavenResourcesFiltering =
171 (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
172
173 String unitFilesDir = new File( unitDirectory, "files" ).getPath();
174
175 Resource resource = new Resource();
176 List resources = new ArrayList();
177 resources.add( resource );
178 resource.setDirectory( unitFilesDir );
179 resource.setFiltering( true );
180
181 List filtersFile = new ArrayList();
182 filtersFile.add( new File( unitDirectory, "filters.txt" ).getPath() );
183
184 mavenResourcesFiltering.filterResources( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
185 new ArrayList(), new StubMavenSession() );
186 }
187
188 }