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