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.FileInputStream;
24  import java.io.IOException;
25  import java.util.ArrayList;
26  import java.util.Collections;
27  import java.util.List;
28  import java.util.Properties;
29  
30  import org.apache.maven.execution.MavenSession;
31  import org.apache.maven.model.Resource;
32  import org.apache.maven.settings.Settings;
33  import org.codehaus.plexus.PlexusTestCase;
34  import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
35  import org.codehaus.plexus.interpolation.ValueSource;
36  import org.codehaus.plexus.util.FileUtils;
37  import org.codehaus.plexus.util.IOUtil;
38  
39  /**
40   * @author <a href="mailto:olamy@apache.org">olamy</a>
41   * @since 1.0-beta-1
42   * @version $Id: DefaultMavenResourcesFilteringTest.java 1058704 2011-01-13 18:29:54Z dennisl $
43   */
44  public class DefaultMavenResourcesFilteringTest
45      extends PlexusTestCase
46  {
47  
48      File outputDirectory = new File( getBasedir(), "target/DefaultMavenResourcesFilteringTest" );
49  
50      protected void setUp()
51          throws Exception
52      {
53          super.setUp();
54          if ( outputDirectory.exists() )
55          {
56              FileUtils.forceDelete( outputDirectory );
57          }
58          outputDirectory.mkdirs();
59      }
60  
61      public void testSimpleFiltering()
62          throws Exception
63      {
64          File baseDir = new File( "c:\\foo\\bar" );
65          StubMavenProject mavenProject = new StubMavenProject( baseDir );
66          mavenProject.setVersion( "1.0" );
67          mavenProject.setGroupId( "org.apache" );
68          mavenProject.setName( "test project" );
69  
70          Properties projectProperties = new Properties();
71          projectProperties.put( "foo", "bar" );
72          projectProperties.put( "java.version", "zloug" );
73          mavenProject.setProperties( projectProperties );
74          MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
75  
76          String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
77          File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
78  
79          Resource resource = new Resource();
80          List resources = new ArrayList();
81          resources.add( resource );
82          resource.setDirectory( unitFilesDir );
83          resource.setFiltering( true );
84  
85          List filtersFile = new ArrayList();
86          filtersFile.add( getBasedir() + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
87  
88          List nonFilteredFileExtensions = Collections.singletonList( "gif" );
89  
90          mavenResourcesFiltering.filterResources( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
91                                                   nonFilteredFileExtensions, new StubMavenSession() );
92  
93          assertFiltering( baseDir, initialImageFile, false, false );
94      }
95  
96      public void testSessionFiltering()
97          throws Exception
98      {
99          File baseDir = new File( "c:\\foo\\bar" );
100         StubMavenProject mavenProject = new StubMavenProject( baseDir );
101 
102         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
103 
104         String unitFilesDir = getBasedir() + "/src/test/units-files/session-filtering";
105 
106         Resource resource = new Resource();
107         List resources = new ArrayList();
108         resources.add( resource );
109         resource.setDirectory( unitFilesDir );
110         resource.setFiltering( true );
111 
112         List filtersFile = new ArrayList();
113         
114         Settings settings = new Settings();
115         settings.setLocalRepository( System.getProperty( "localRepository", System.getProperty( "maven.repo.local",
116                                                                                                 "/path/to/local/repo" ) ) );
117         
118         MavenSession session = new StubMavenSession( settings );
119         
120         mavenResourcesFiltering.filterResources( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
121                                                  Collections.EMPTY_LIST, session );
122         
123         Properties result = new Properties();
124         FileInputStream in = null;
125         try
126         {
127             in = new FileInputStream( new File( outputDirectory, "session-filter-target.txt" ) );
128             result.load( in );
129         }
130         finally
131         {
132             IOUtil.close( in );
133         }
134         
135         assertEquals( settings.getLocalRepository(), result.getProperty( "session.settings.local.repo" ) );
136         assertEquals( settings.getLocalRepository(), result.getProperty( "settings.local.repo" ) );
137         assertEquals( settings.getLocalRepository(), result.getProperty( "local.repo" ) );
138     }
139 
140     public void testWithMavenResourcesExecution()
141         throws Exception
142     {
143         File baseDir = new File( "c:\\foo\\bar" );
144         StubMavenProject mavenProject = new StubMavenProject( baseDir );
145         mavenProject.setVersion( "1.0" );
146         mavenProject.setGroupId( "org.apache" );
147         mavenProject.setName( "test project" );
148 
149         Properties projectProperties = new Properties();
150         projectProperties.put( "foo", "bar" );
151         projectProperties.put( "java.version", "zloug" );
152         mavenProject.setProperties( projectProperties );
153         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
154 
155         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
156         File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
157 
158         Resource resource = new Resource();
159         List resources = new ArrayList();
160         resources.add( resource );
161         resource.setDirectory( unitFilesDir );
162         resource.setFiltering( true );
163 
164         List filtersFile = new ArrayList();
165         filtersFile.add( getBasedir() + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
166 
167         List nonFilteredFileExtensions = Collections.singletonList( "gif" );
168         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, outputDirectory, mavenProject,
169                                                                                        "UTF-8", filtersFile,
170                                                                                        nonFilteredFileExtensions,
171                                                                                        new StubMavenSession() );
172         mavenResourcesExecution.setEscapeString( "\\" );
173         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
174         assertFiltering( baseDir, initialImageFile, true, false );
175     }
176 
177     public void testWithMavenResourcesExecutionWithAdditionnalProperties()
178         throws Exception
179     {
180         File baseDir = new File( "c:\\foo\\bar" );
181         StubMavenProject mavenProject = new StubMavenProject( baseDir );
182         mavenProject.setVersion( "1.0" );
183         mavenProject.setGroupId( "org.apache" );
184         mavenProject.setName( "test project" );
185 
186         Properties projectProperties = new Properties();
187         projectProperties.put( "foo", "bar" );
188         projectProperties.put( "java.version", "zloug" );
189         mavenProject.setProperties( projectProperties );
190         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
191 
192         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
193         File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
194 
195         Resource resource = new Resource();
196         List resources = new ArrayList();
197         resources.add( resource );
198         resource.setDirectory( unitFilesDir );
199         resource.setFiltering( true );
200 
201         List filtersFile = new ArrayList();
202         filtersFile.add( getBasedir() + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
203 
204         List nonFilteredFileExtensions = Collections.singletonList( "gif" );
205         Properties additionalProperties = new Properties();
206         additionalProperties.put( "greatDate", "1973-06-14" );
207         additionalProperties.put( "pom.version", "99.00" );
208         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, outputDirectory, mavenProject,
209                                                                                        "UTF-8", filtersFile,
210                                                                                        nonFilteredFileExtensions,
211                                                                                        new StubMavenSession() );
212         mavenResourcesExecution.setAdditionalProperties( additionalProperties );
213         mavenResourcesExecution.setEscapeString( "\\" );
214         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
215         assertFiltering( baseDir, initialImageFile, true, true );
216     }
217 
218     private void assertFiltering( File baseDir, File initialImageFile, boolean escapeTest, boolean additionnalProperties )
219         throws Exception
220     {
221         assertEquals( 7, outputDirectory.listFiles().length );
222         Properties result = new Properties();
223         FileInputStream in = null;
224         try
225         {
226             in = new FileInputStream( new File( outputDirectory, "empty-maven-resources-filtering.txt" ) );
227             result.load( in );
228         }
229         finally
230         {
231             IOUtil.close( in );
232         }
233 
234         assertTrue( result.isEmpty() );
235 
236         result = new Properties();
237         in = null;
238         try
239         {
240             in = new FileInputStream( new File( outputDirectory, "maven-resources-filtering.txt" ) );
241             result.load( in );
242         }
243         finally
244         {
245             IOUtil.close( in );
246         }
247         assertFalse( result.isEmpty() );
248 
249         if ( additionnalProperties )
250         {
251             assertEquals( "1973-06-14", result.getProperty( "goodDate" ) );
252             assertEquals( "99.00", result.get( "version" ) );
253         }
254         else
255         {
256             assertEquals( "1.0", result.get( "version" ) );
257         }
258         assertEquals( "org.apache", result.get( "groupId" ) );
259         assertEquals( "bar", result.get( "foo" ) );
260         assertEquals( "${foo.version}", result.get( "fooVersion" ) );
261 
262         assertEquals( "@@", result.getProperty( "emptyexpression" ) );
263         assertEquals( "${}", result.getProperty( "emptyexpression2" ) );
264         assertEquals( System.getProperty( "user.dir" ), result.getProperty( "userDir" ) );
265         String userDir = result.getProperty( "userDir" );
266         assertTrue( new File( userDir ).exists() );
267         assertEquals( new File( System.getProperty( "user.dir" ) ), new File( userDir ) );
268         assertEquals( System.getProperty( "java.version" ), result.getProperty( "javaVersion" ) );
269 
270         String userHome = result.getProperty( "userHome" );
271 
272         assertTrue( "'" + userHome + "' does not exist.", new File( userHome ).exists() );
273         assertEquals( new File( System.getProperty( "user.home" ) ), new File( userHome ) );
274 
275         if ( escapeTest )
276         {
277             assertEquals( "${java.version}", result.getProperty( "escapeJavaVersion" ) );
278             assertEquals( "@user.dir@", result.getProperty( "escapeuserDir" ) );
279         }
280         assertEquals( baseDir.toString(), result.get( "base" ) );
281         assertEquals( new File( baseDir.toString() ).getPath(), new File( result.getProperty( "base" ) ).getPath() );
282 
283         File imageFile = new File( outputDirectory, "happy_duke.gif" );
284         assertTrue( imageFile.exists() );
285         // assertEquals( initialImageFile.length(), imageFile.length() );
286         assertTrue( filesAreIdentical( initialImageFile, imageFile ) );
287     }
288 
289     public void testAddingTokens()
290         throws Exception
291     {
292         File baseDir = new File( "c:\\foo\\bar" );
293         final StubMavenProject mavenProject = new StubMavenProject( baseDir );
294         mavenProject.setVersion( "1.0" );
295         mavenProject.setGroupId( "org.apache" );
296         mavenProject.setName( "test project" );
297 
298         Properties projectProperties = new Properties();
299         projectProperties.put( "foo", "bar" );
300         projectProperties.put( "java.version", "zloug" );
301         mavenProject.setProperties( projectProperties );
302         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
303 
304         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
305         File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
306 
307         Resource resource = new Resource();
308         List resources = new ArrayList();
309         resources.add( resource );
310         resource.setDirectory( unitFilesDir );
311         resource.setFiltering( true );
312 
313         List filtersFile = new ArrayList();
314         filtersFile.add( getBasedir() + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
315 
316         List nonFilteredFileExtensions = Collections.singletonList( "gif" );
317 
318         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, outputDirectory, mavenProject,
319                                                                                        "UTF-8", null, nonFilteredFileExtensions,
320                                                                                        new StubMavenSession() );
321 
322         ValueSource vs = new PrefixedObjectValueSource( mavenResourcesExecution.getProjectStartExpressions(), mavenProject, true );
323 
324         mavenResourcesExecution.addFilerWrapperWithEscaping( vs, "@", "@", null );
325 
326         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
327         Properties result = PropertyUtils.loadPropertyFile( new File( outputDirectory, "maven-resources-filtering.txt" ), null );
328         assertFalse( result.isEmpty() );
329         assertEquals( mavenProject.getName(), result.get( "pomName" ) );
330         assertFiltering( baseDir, initialImageFile, false, false );
331     }
332 
333     public void testNoFiltering()
334         throws Exception
335     {
336         StubMavenProject mavenProject = new StubMavenProject( new File( getBasedir() ) );
337         mavenProject.setVersion( "1.0" );
338         mavenProject.setGroupId( "org.apache" );
339 
340         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
341 
342         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
343         File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
344 
345         Resource resource = new Resource();
346         List resources = new ArrayList();
347         resources.add( resource );
348 
349         resource.setDirectory( unitFilesDir );
350         resource.setFiltering( false );
351         mavenResourcesFiltering.filterResources( resources, outputDirectory, mavenProject, "UTF-8", null, Collections.EMPTY_LIST,
352                                                  new StubMavenSession() );
353 
354         assertEquals( 7, outputDirectory.listFiles().length );
355         Properties result = PropertyUtils.loadPropertyFile( new File( outputDirectory, "empty-maven-resources-filtering.txt" ), null );
356         assertTrue( result.isEmpty() );
357 
358         result = PropertyUtils.loadPropertyFile( new File( outputDirectory, "maven-resources-filtering.txt" ), null );
359         assertFalse( result.isEmpty() );
360 
361         assertEquals( "${pom.version}", result.get( "version" ) );
362         assertEquals( "${pom.groupId}", result.get( "groupId" ) );
363         assertEquals( "${foo}", result.get( "foo" ) );
364         assertEquals( "@@", result.getProperty( "emptyexpression" ) );
365         assertEquals( "${}", result.getProperty( "emptyexpression2" ) );
366         File imageFile = new File( outputDirectory, "happy_duke.gif" );
367         assertTrue( filesAreIdentical( initialImageFile, imageFile ) );
368     }
369 
370     public static boolean filesAreIdentical( File expected, File current )
371         throws IOException
372     {
373         if ( expected.length() != current.length() )
374         {
375             return false;
376         }
377         FileInputStream expectedIn = null;
378         FileInputStream currentIn = null;
379         try
380         {
381             expectedIn = new FileInputStream( expected );
382             currentIn = new FileInputStream( current );
383 
384             byte[] expectedBuffer = IOUtil.toByteArray( expectedIn );
385 
386             byte[] currentBuffer = IOUtil.toByteArray( currentIn );
387             if ( expectedBuffer.length != currentBuffer.length )
388             {
389                 return false;
390             }
391             for ( int i = 0, size = expectedBuffer.length; i < size; i++ )
392             {
393                 if ( expectedBuffer[i] != currentBuffer[i] )
394                 {
395                     return false;
396                 }
397             }
398         }
399         finally
400         {
401             IOUtil.close( expectedIn );
402             IOUtil.close( currentIn );
403         }
404         return true;
405     }
406 
407     public void testIncludeOneFile()
408         throws Exception
409     {
410         File baseDir = new File( "c:\\foo\\bar" );
411         StubMavenProject mavenProject = new StubMavenProject( baseDir );
412         mavenProject.setVersion( "1.0" );
413         mavenProject.setGroupId( "org.apache" );
414         mavenProject.setName( "test project" );
415 
416         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
417 
418         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
419 
420         Resource resource = new Resource();
421         List resources = new ArrayList();
422         resources.add( resource );
423         resource.setDirectory( unitFilesDir );
424         resource.setFiltering( true );
425         resource.addInclude( "includ*" );
426 
427         List filtersFile = new ArrayList();
428         filtersFile.add( getBasedir() + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
429 
430         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, outputDirectory, mavenProject,
431                                                                                        "UTF-8", filtersFile, Collections.EMPTY_LIST,
432                                                                                        new StubMavenSession() );
433         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
434 
435         File[] files = outputDirectory.listFiles();
436         assertEquals( 1, files.length );
437         assertEquals( "includefile.txt", files[0].getName() );
438 
439     }
440 
441     public void testIncludeOneFileAndDirectory()
442         throws Exception
443     {
444         File baseDir = new File( "c:\\foo\\bar" );
445         StubMavenProject mavenProject = new StubMavenProject( baseDir );
446         mavenProject.setVersion( "1.0" );
447         mavenProject.setGroupId( "org.apache" );
448         mavenProject.setName( "test project" );
449 
450         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
451 
452         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
453 
454         Resource resource = new Resource();
455         List resources = new ArrayList();
456         resources.add( resource );
457         resource.setDirectory( unitFilesDir );
458         resource.setFiltering( true );
459         resource.addInclude( "includ*" );
460         resource.addInclude( "**/includ*" );
461 
462         List filtersFile = new ArrayList();
463         filtersFile.add( getBasedir() + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
464 
465         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, outputDirectory, mavenProject,
466                                                                                        "UTF-8", filtersFile, Collections.EMPTY_LIST,
467                                                                                        new StubMavenSession() );
468         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
469 
470         File[] files = outputDirectory.listFiles();
471         assertEquals( 2, files.length );
472         File includeFile = new File( outputDirectory, "includefile.txt" );
473         assertTrue( includeFile.exists() );
474 
475         includeFile = new File( new File( outputDirectory, "includedir" ), "include.txt" );
476         assertTrue( includeFile.exists() );
477 
478     }
479 
480     public void testExcludeOneFile()
481         throws Exception
482     {
483         File baseDir = new File( "c:\\foo\\bar" );
484         StubMavenProject mavenProject = new StubMavenProject( baseDir );
485         mavenProject.setVersion( "1.0" );
486         mavenProject.setGroupId( "org.apache" );
487         mavenProject.setName( "test project" );
488 
489         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
490 
491         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
492 
493         Resource resource = new Resource();
494         List resources = new ArrayList();
495         resources.add( resource );
496         resource.setDirectory( unitFilesDir );
497         resource.setFiltering( true );
498         resource.addExclude( "*.gif" );
499         resource.addExclude( "**/excludedir/**" );
500 
501         List filtersFile = new ArrayList();
502         filtersFile.add( getBasedir() + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
503 
504         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, outputDirectory, mavenProject,
505                                                                                        "UTF-8", filtersFile, Collections.EMPTY_LIST,
506                                                                                        new StubMavenSession() );
507         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
508 
509         File[] files = outputDirectory.listFiles();
510         assertEquals( 5, files.length );
511         File includeFile = new File( outputDirectory, "includefile.txt" );
512         assertTrue( includeFile.exists() );
513 
514         includeFile = new File( new File( outputDirectory, "includedir" ), "include.txt" );
515         assertTrue( includeFile.exists() );
516 
517         File imageFile = new File( outputDirectory, "happy_duke.gif" );
518         assertFalse( imageFile.exists() );
519 
520         File excludeDir = new File( outputDirectory, "excludedir" );
521         assertFalse( excludeDir.exists() );
522     }
523 
524     public void testTargetAbsolutePath()
525         throws Exception
526     {
527         File baseDir = new File( "c:\\foo\\bar" );
528         StubMavenProject mavenProject = new StubMavenProject( baseDir );
529         mavenProject.setVersion( "1.0" );
530         mavenProject.setGroupId( "org.apache" );
531         mavenProject.setName( "test project" );
532 
533         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
534 
535         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
536 
537         Resource resource = new Resource();
538         List resources = new ArrayList();
539         resources.add( resource );
540         resource.setDirectory( unitFilesDir );
541         resource.setFiltering( true );
542         resource.addInclude( "includ*" );
543 
544         String targetPath = getBasedir() + "/target/testAbsolutePath/";
545         File targetPathFile = new File( targetPath );
546         resource.setTargetPath( targetPathFile.getAbsolutePath() );
547 
548         if ( !targetPathFile.exists() )
549         {
550             targetPathFile.mkdirs();
551         }
552         else
553         {
554             FileUtils.cleanDirectory( targetPathFile );
555         }
556         List filtersFile = new ArrayList();
557         filtersFile.add( getBasedir() + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
558 
559         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, outputDirectory, mavenProject,
560                                                                                        "UTF-8", filtersFile, Collections.EMPTY_LIST,
561                                                                                        new StubMavenSession() );
562         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
563 
564         File[] files = targetPathFile.listFiles();
565         assertEquals( 1, files.length );
566         assertEquals( "includefile.txt", files[0].getName() );
567     }
568 
569     public void testTargetPath()
570         throws Exception
571     {
572         File baseDir = new File( "c:\\foo\\bar" );
573         StubMavenProject mavenProject = new StubMavenProject( baseDir );
574         mavenProject.setVersion( "1.0" );
575         mavenProject.setGroupId( "org.apache" );
576         mavenProject.setName( "test project" );
577 
578         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
579 
580         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
581 
582         Resource resource = new Resource();
583         List resources = new ArrayList();
584         resources.add( resource );
585         resource.setDirectory( unitFilesDir );
586         resource.setFiltering( true );
587         resource.addInclude( "includ*" );
588         resource.setTargetPath( "testTargetPath" );
589         List filtersFile = new ArrayList();
590         filtersFile.add( getBasedir() + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
591 
592         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, outputDirectory, mavenProject,
593                                                                                        "UTF-8", filtersFile, Collections.EMPTY_LIST,
594                                                                                        new StubMavenSession() );
595         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
596 
597         File targetPathFile = new File( outputDirectory, "testTargetPath" );
598 
599         File[] files = targetPathFile.listFiles();
600         assertEquals( 1, files.length );
601         assertEquals( "includefile.txt", files[0].getName() );
602     }
603 
604     public void testEmptyDirectories()
605         throws Exception
606     {
607         File baseDir = new File( "c:\\foo\\bar" );
608         StubMavenProject mavenProject = new StubMavenProject( baseDir );
609         mavenProject.setVersion( "1.0" );
610         mavenProject.setGroupId( "org.apache" );
611         mavenProject.setName( "test project" );
612 
613         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
614 
615         List resources = new ArrayList();
616         resources.add( new Resource()
617         {
618             {
619                 setDirectory( getBasedir() + "/src/test/units-files/includeEmptyDirs" );
620             }
621         } );
622         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, outputDirectory, mavenProject,
623                                                                                        "UTF-8", Collections.EMPTY_LIST,
624                                                                                        Collections.EMPTY_LIST, new StubMavenSession() );
625         mavenResourcesExecution.setIncludeEmptyDirs( true );
626         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
627 
628         File[] childs = outputDirectory.listFiles();
629         assertEquals( 3, childs.length );
630 
631         for ( int i = 0, size = childs.length; i < size; i++ )
632         {
633             File file = childs[i];
634             if ( file.getName().endsWith( "dir1" ) || file.getName().endsWith( "empty-directory" )
635                 || file.getName().endsWith( "empty-directory-child" ) )
636             {
637                 if ( file.getName().endsWith( "dir1" ) )
638                 {
639                     assertEquals( 1, file.list().length );
640                     assertTrue( file.listFiles()[0].getName().endsWith( "foo.txt" ) );
641                 }
642                 if ( file.getName().endsWith( "empty-directory" ) )
643                 {
644                     assertEquals( 0, file.list().length );
645                 }
646                 if ( file.getName().endsWith( "empty-directory-child" ) )
647                 {
648                     assertEquals( 1, file.list().length );
649                     assertTrue( file.listFiles()[0].isDirectory() );
650                     assertEquals( 0, file.listFiles()[0].listFiles().length );
651                 }
652             }
653             else
654             {
655                 fail( "unknow child file found " + file.getName() );
656             }
657         }
658     }
659 
660     /**
661      * unit test for MSHARED-81 : http://jira.codehaus.org/browse/MSHARED-81
662      */
663     public void testMSHARED81()
664         throws Exception
665     {
666         StubMavenProject mavenProject = new StubMavenProject( new File( "/foo/bar" ) );
667 
668         mavenProject.setVersion( "1.0" );
669 
670         mavenProject.addProperty( "escaped", "this is escaped" );
671         mavenProject.addProperty( "escaped.at", "this is escaped.at" );
672         mavenProject.addProperty( "foo", "this is foo" );
673         mavenProject.addProperty( "bar", "this is bar" );
674 
675         MavenResourcesFiltering mavenResourcesFiltering = (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
676 
677         List resources = new ArrayList();
678         resources.add( new Resource()
679         {
680             {
681                 setDirectory( getBasedir() + "/src/test/units-files/MSHARED-81/resources" );
682                 setFiltering( false );
683             }
684         } );
685         resources.add( new Resource()
686         {
687             {
688                 setDirectory( getBasedir() + "/src/test/units-files/MSHARED-81/filtered" );
689                 setFiltering( true );
690             }
691         } );
692         File output = new File( outputDirectory, "MSHARED-81" );
693         MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( resources, output, mavenProject, "UTF-8",
694                                                                                        Collections.EMPTY_LIST, Collections.EMPTY_LIST,
695                                                                                        new StubMavenSession() );
696         mavenResourcesExecution.setIncludeEmptyDirs( true );
697         mavenResourcesExecution.setEscapeString( "\\" );
698 
699         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
700 
701         Properties filteredResult = PropertyUtils.loadPropertyFile( new File( output, "filtered.properties" ), null );
702 
703         Properties expectedFilteredResult = PropertyUtils.loadPropertyFile( new File( getBasedir()
704             + "/src/test/units-files/MSHARED-81", "expected-filtered.properties" ), null );
705 
706         System.out.println( "Expected:\n" );
707         expectedFilteredResult.list( System.out );
708         System.out.println( "\n\n\nGot:\n" );
709         filteredResult.list( System.out );
710 
711         assertEquals( expectedFilteredResult, filteredResult );
712 
713         Properties nonFilteredResult = PropertyUtils.loadPropertyFile( new File( output, "unfiltered.properties" ), null );
714 
715         Properties expectedNonFilteredResult = PropertyUtils.loadPropertyFile( new File( getBasedir()
716             + "/src/test/units-files/MSHARED-81/resources", "unfiltered.properties" ), null );
717 
718         assertTrue( nonFilteredResult.equals( expectedNonFilteredResult ) );
719     }
720 
721 }