1   package org.apache.maven.surefire.its;
2   
3   
4   import junit.framework.TestCase;
5   import org.apache.maven.it.Verifier;
6   import org.apache.maven.it.util.ResourceExtractor;
7   import org.apache.maven.plugins.surefire.report.ReportTestCase;
8   import org.apache.maven.plugins.surefire.report.ReportTestSuite;
9   
10  import java.io.File;
11  import java.util.List;
12  
13  /**
14   * Test Surefire-224 (XML test reports are not well-formed when failure message contains quotes)
15   * 
16   * @author <a href="mailto:dfabulich@apache.org">Dan Fabulich</a>
17   * 
18   */
19  public class Surefire224WellFormedXmlFailuresTest
20      extends TestCase
21  {
22      public void testWellFormedXmlFailures ()
23          throws Exception
24      {
25          File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/surefire-224-wellFormedXmlFailures" );
26  
27          Verifier verifier = new Verifier( testDir.getAbsolutePath() );
28          verifier.executeGoal( "test" );
29          // DGF Don't verify error free log; we expect failures
30          // verifier.verifyErrorFreeLog();
31          verifier.resetStreams();
32          
33          HelperAssertions.assertTestSuiteResults( 4, 0, 4, 0, testDir );
34          
35          ReportTestSuite suite = (ReportTestSuite) HelperAssertions.extractReports( (new File[] { testDir }) ).get( 0 );
36          List testCases = suite.getTestCases();
37          assertEquals( "Wrong number of test case objects", 4, testCases.size() );
38          ReportTestCase current, testQuote = null, testLower = null, testGreater = null, testU0000 = null;
39          for ( int i = 0; i < testCases.size(); i++ )
40          {
41              current = (ReportTestCase) testCases.get( i );
42              if ( "testQuote".equals( current.getName() ) ) testQuote = current;
43              else if ( "testLower".equals( current.getName() ) ) testLower = current;
44              else if ( "testGreater".equals( current.getName() ) ) testGreater = current;
45              else if ( "testU0000".equals( current.getName() ) ) testU0000 = current;
46          }
47          assertEquals("Wrong error message", "\"", testQuote.getFailure().get( "message" ) );
48          assertEquals("Wrong error message", "<", testLower.getFailure().get( "message" ) );
49          assertEquals("Wrong error message", ">", testGreater.getFailure().get( "message" ) );
50          // SUREFIRE-456 we have to doubly-escape non-visible control characters like \u0000
51          assertEquals("Wrong error message", "&#0;", testU0000.getFailure().get( "message" ) );
52      }
53  }