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 ? "&#" : "&#" ).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
{