You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kr...@apache.org on 2013/01/07 10:14:56 UTC

git commit: o Fixed broken IT

Updated Branches:
  refs/heads/master 44e006ace -> c1283673d


o Fixed broken IT


Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/c1283673
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/c1283673
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/c1283673

Branch: refs/heads/master
Commit: c1283673d47726e6ef69634199dc6cf3f198c56a
Parents: 44e006a
Author: Kristian Rosenvold <kr...@apache.org>
Authored: Mon Jan 7 04:14:11 2013 +0100
Committer: Kristian Rosenvold <kr...@apache.org>
Committed: Mon Jan 7 04:14:11 2013 +0100

----------------------------------------------------------------------
 .../surefire/report/StatelessXmlReporter.java      |   67 ++++++++++++++-
 .../surefire/report/TestSuiteXmlParserTest.java    |   17 ++++
 2 files changed, 81 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/c1283673/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
index ec150b6..b4f1111 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
@@ -211,7 +211,7 @@ public class StatelessXmlReporter
 
         if ( report.getMessage() != null && report.getMessage().length() > 0 )
         {
-            ppw.addAttribute( "message", report.getMessage() );
+            ppw.addAttribute( "message", extraEscape( report.getMessage(), true ) );
         }
 
         if ( report.getStackTraceWriter() != null )
@@ -235,7 +235,7 @@ public class StatelessXmlReporter
 
         if ( stackTrace != null )
         {
-            ppw.writeText( stackTrace );
+            ppw.writeText( extraEscape( stackTrace, false ) );
         }
 
         ppw.endElement(); // entry type
@@ -252,7 +252,7 @@ public class StatelessXmlReporter
         if ( stdOut != null && stdOut.trim().length() > 0 )
         {
             xmlWriter.startElement( name );
-            xmlWriter.writeText( stdOut );
+            xmlWriter.writeText( extraEscape( stdOut, false ) );
             xmlWriter.endElement();
         }
     }
@@ -296,4 +296,65 @@ public class StatelessXmlReporter
         }
         xmlWriter.endElement();
     }
+
+    /**
+     * Handle stuff that may pop up in java that is not legal in xml
+     *
+     * @param message   The string
+     * @param attribute
+     * @return The escaped string
+     */
+    private static String extraEscape( String message, boolean attribute )
+    {
+        // Someday convert to xml 1.1 which handles everything but 0 inside string
+        if ( !containsEscapesIllegalnXml10( message ) )
+        {
+            return message;
+        }
+        return escapeXml( message, attribute );
+    }
+
+    private static boolean containsEscapesIllegalnXml10( String message )
+    {
+        int size = message.length();
+        for ( int i = 0; i < size; i++ )
+        {
+            if ( isIllegalEscape( message.charAt( i ) ) )
+            {
+                return true;
+            }
+
+        }
+        return false;
+    }
+
+    private static boolean isIllegalEscape( char c )
+    {
+        return c < 32 && c != '\n' && c != '\r' && c != '\t';
+    }
+
+    private static String escapeXml( String text, boolean attribute )
+    {
+        StringBuilder sb = new StringBuilder( text.length() * 2 );
+        for ( int i = 0; i < text.length(); i++ )
+        {
+            char c = text.charAt( i );
+            if ( isIllegalEscape( c ) )
+            {
+                // uh-oh!  This character is illegal in XML 1.0!
+                // http://www.w3.org/TR/1998/REC-xml-19980210#charsets
+                // we're going to deliberately doubly-XML escape it...
+                // there's nothing better we can do! :-(
+                // SUREFIRE-456
+                sb.append( attribute ? "&#" : "&amp#" ).append( (int) c ).append(
+                    ';' ); // & Will be encoded to amp inside xml encodingSHO
+            }
+            else
+            {
+                sb.append( c );
+            }
+        }
+        return sb.toString();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/c1283673/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java
----------------------------------------------------------------------
diff --git a/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java b/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java
index 0b8c871..a71158a 100644
--- a/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java
+++ b/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java
@@ -96,6 +96,23 @@ public class TestSuiteXmlParserTest
 
     }
 
+    public void notTestParserBadFile() // Determine problem with xml file.
+        throws IOException, SAXException, ParserConfigurationException
+    {
+        TestSuiteXmlParser parser = new TestSuiteXmlParser();
+
+        Collection<ReportTestSuite> oldResult = parser.parse(
+            "../surefire-integration-tests/target/Surefire224WellFormedXmlFailuresIT/testWellFormedXmlFailures/target/surefire-reports/TEST-wellFormedXmlFailures.TestSurefire3.xml" );
+
+        assertNotNull( oldResult );
+
+        assertEquals( 1, oldResult.size() );
+        ReportTestSuite next = oldResult.iterator().next();
+        assertEquals( 2, next.getNumberOfTests() );
+
+
+    }
+
     public void testParserHitsFailsafeSummary()
         throws IOException, SAXException, ParserConfigurationException
     {