1   package org.apache.maven.surefire.its;
2   
3   
4   import java.io.File;
5   import java.io.FileInputStream;
6   import java.io.IOException;
7   import java.util.ArrayList;
8   import java.util.Properties;
9   
10  import junit.framework.TestCase;
11  
12  import org.apache.maven.it.Verifier;
13  import org.apache.maven.it.util.ResourceExtractor;
14  
15  /**
16   * Test working directory configuration, SUREFIRE-416
17   * 
18   * @author <a href="mailto:dfabulich@apache.org">Dan Fabulich</a>
19   * 
20   */
21  public class WorkingDirectoryTest
22      extends TestCase
23  {
24      
25      private File testDir;
26      private File childTestDir;
27      private File targetDir;
28      private File outFile;
29  
30      public void setUp() throws IOException {
31          testDir = ResourceExtractor.simpleExtractResources( getClass(), "/working-directory" );
32          childTestDir = new File( testDir, "child" );
33          targetDir = new File( childTestDir, "target" );
34          outFile = new File( targetDir, "out.txt" );
35          outFile.delete();
36      }
37      
38      public void testWorkingDirectory ()
39          throws Exception
40      {
41          Verifier verifier = new Verifier( testDir.getAbsolutePath() );
42          verifier.executeGoal( "test" );
43          verifier.verifyErrorFreeLog();
44          verifier.resetStreams();
45          
46          HelperAssertions.assertTestSuiteResults( 1, 0, 0, 0, childTestDir );
47          verifyOutputDirectory( childTestDir );
48      }
49      
50      public void verifyOutputDirectory( File childTestDir )
51          throws IOException
52      {
53          assertTrue( "out.txt doesn't exist: " + outFile.getAbsolutePath(), outFile.exists() );
54          Properties p = new Properties();
55          FileInputStream is = new FileInputStream( outFile );
56          p.load( is );
57          is.close();
58          String userDirPath = p.getProperty( "user.dir" );
59          assertNotNull( "user.dir was null in property file", userDirPath );
60          File userDir = new File( userDirPath );
61          assertEquals( "wrong user.dir", childTestDir.getAbsolutePath(), userDir.getAbsolutePath() );
62      }
63      
64      public void testWorkingDirectoryNoFork()
65          throws Exception
66      {
67          Verifier verifier = new Verifier( testDir.getAbsolutePath() );
68          ArrayList goals = new ArrayList();
69          goals.add( "test");
70          goals.add( "-DforkMode=never" );
71          verifier.executeGoals( goals );
72          verifier.verifyErrorFreeLog();
73          verifier.resetStreams();
74  
75          HelperAssertions.assertTestSuiteResults( 1, 0, 0, 0, childTestDir );
76          verifyOutputDirectory( childTestDir );
77      }
78      
79      public void testWorkingDirectoryChildOnly()
80          throws Exception
81      {   
82          Verifier verifier = new Verifier( childTestDir.getAbsolutePath() );
83          verifier.executeGoal( "test" );
84          verifier.verifyErrorFreeLog();
85          verifier.resetStreams();
86  
87          HelperAssertions.assertTestSuiteResults( 1, 0, 0, 0, childTestDir );
88          verifyOutputDirectory( childTestDir );
89      }
90  
91      
92      
93      public void testWorkingDirectoryChildOnlyNoFork()
94          throws Exception
95      {
96          
97          Verifier verifier = new Verifier( childTestDir.getAbsolutePath() );
98          ArrayList goals = new ArrayList();
99          goals.add( "test");
100         goals.add( "-DforkMode=never" );
101         verifier.executeGoals( goals );
102         verifier.verifyErrorFreeLog();
103         verifier.resetStreams();
104 
105         HelperAssertions.assertTestSuiteResults( 1, 0, 0, 0, childTestDir );
106         verifyOutputDirectory( childTestDir );
107     }
108 }