[ http://jira.codehaus.org/browse/SUREFIRE-455?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dan Fabulich closed SUREFIRE-455. --------------------------------- Resolution: Fixed Fix Version/s: 2.4.2 Thanks for your work here. We actually have an integration test for this that verified XML validity, but it didn't catch this case (I examined the XML by eye and it looked fine). I've enhanced the integration test to examine the messages explicitly to catch this case. Interestingly, this highlighted a bug in the way we handle non-visible control characters (e.g. the null charater \0). You added code to explicitly filter out null characters in your patch. That was a reasonable choice, but I decided that we didn't want to throw away information. Also, it's not just nulls; all non-visible control characters except for \t \n and \r are invalid in XML 1.0, even in entity form. So I deliberately introduced SUREFIRE-456 to handle this case. Submitted revision 620660. > XML delimiter characters in attribute and text content are escaped twice. > -------------------------------------------------------------------------- > > Key: SUREFIRE-455 > URL: http://jira.codehaus.org/browse/SUREFIRE-455 > Project: Maven Surefire > Issue Type: Bug > Components: xml generation > Affects Versions: 2.4, 2.4.1 > Reporter: Todor Todorov > Fix For: 2.4.2 > > Attachments: surefire-api.patch > > > XML delimiter characters (left angle bracket, ampersand, etc.) are escaped > twice in _TEST-*.xml_ files in _surefire-reports_ directory. For example the > left angle bracket is replaced with &lt; instead of < and the right > angle bracket with &gt; instead of > > {code:xml} > <testcase time="2.306" classname="MyTest" name="testItem"> > <failure message="expected:&lt;10&gt; but was:&lt;7&gt;" > type="junit.framework.AssertionFailedError"> > junit.framework.AssertionFailedError: expected:&lt;10&gt; but > was:&lt;7&gt; > at junit.framework.Assert.fail(Assert.java:47) > at junit.framework.Assert.failNotSame(Assert.java:278) > at junit.framework.Assert.assertSame(Assert.java:242) > at MyTest.testItem(MyTest.java:38) > </failure> > </testcase> > {code} > The problem is that both *org.apache.maven.surefire.report.XMLReporter* and > *org.apache.maven.surefire.util.PrettyPrintXMLWriter* are escaping the XML > content. As a result the ampersand character is escaped once more time. In > addition *org.apache.maven.surefire.util.PrettyPrintXMLWriter#escapeXml* has > implementation error: three characters (ampersand, left angle bracket and > right angle bracket) are replaced with *&amp;* > In the attached patch (for surefire-2.4.1) I removed > *org.apache.maven.surefire.report.XMLReporter#escapeAttribute* method and > fixed *org.apache.maven.surefire.util.PrettyPrintXMLWriter#escapeXml* > implementation. Afterwards the XML report was generated as expected: > {code:xml} > <testcase time="2.306" classname="MyTest" name="testItem"> > <failure message="expected:<10> but was:<7>" > type="junit.framework.AssertionFailedError"> > junit.framework.AssertionFailedError: expected:<10> but was:<7> > at junit.framework.Assert.fail(Assert.java:47) > at junit.framework.Assert.failNotSame(Assert.java:278) > at junit.framework.Assert.assertSame(Assert.java:242) > at MyTest.testItem(MyTest.java:38) > </failure> > </testcase> > {code} -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira