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 <krosenv...@apache.org> Authored: Mon Jan 7 04:14:11 2013 +0100 Committer: Kristian Rosenvold <krosenv...@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 {