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/06/24 17:48:52 UTC

git commit: [SUREFIRE-1006] Fixed cdata section

Updated Branches:
  refs/heads/master cb908dd79 -> 54c46be0a


[SUREFIRE-1006] Fixed cdata section


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

Branch: refs/heads/master
Commit: 54c46be0af7ce161f92f156df44569129ea9417c
Parents: cb908dd
Author: Kristian Rosenvold <kr...@apache.org>
Authored: Mon Jun 24 17:47:11 2013 +0200
Committer: Kristian Rosenvold <kr...@apache.org>
Committed: Mon Jun 24 17:47:11 2013 +0200

----------------------------------------------------------------------
 .../surefire/report/StatelessXmlReporter.java   | 47 ++++++++++----------
 .../report/StatelessXMLReporterTest.java        |  5 ++-
 2 files changed, 27 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/54c46be0/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 51308e9..a7e61b9 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
@@ -290,7 +290,9 @@ public class StatelessXmlReporter
                 xmlWriter.writeText( "" ); // Cheat sax to emit element
                 outputStreamWriter.flush();
                 stdOut.close();
+                eos.getUnderlying().write( "<![CDATA[".getBytes() ); // emit cdata
                 stdOut.writeTo( eos );
+                eos.getUnderlying().write( "]]>".getBytes() );
                 eos.flush();
             }
             catch ( IOException e )
@@ -361,17 +363,36 @@ public class StatelessXmlReporter
     private static class EncodingOutputStream
         extends FilterOutputStream
     {
+        private int c1;
+
+        private int c2;
+
+        private static final byte[] cdataEscapeString = "]]><![CDATA[>".getBytes();
 
         public EncodingOutputStream( OutputStream out )
         {
             super( out );
         }
 
+        public OutputStream getUnderlying()
+        {
+            return out;
+        }
+
+        private boolean isCdataEndBlock( int c )
+        {
+            return c1 == ']' && c2 == ']' && c == '>';
+        }
+
         @Override
         public void write( int b )
             throws IOException
         {
-            if ( isIllegalEscape( b ) )
+            if ( isCdataEndBlock( b ) )
+            {
+                out.write( cdataEscapeString );
+            }
+            else if ( isIllegalEscape( b ) )
             {
                 // uh-oh!  This character is illegal in XML 1.0!
                 // http://www.w3.org/TR/1998/REC-xml-19980210#charsets
@@ -382,32 +403,12 @@ public class StatelessXmlReporter
                 out.write( b );
                 out.write( ';' ); // & Will be encoded to amp inside xml encodingSHO
             }
-            else if ( '<' == b )
-            {
-                out.write( '&' );
-                out.write( 'l' );
-                out.write( 't' );
-                out.write( ';' ); // & Will be encoded to amp inside xml encodingSHO
-            }
-            else if ( '>' == b )
-            {
-                out.write( '&' );
-                out.write( 'g' );
-                out.write( 't' );
-                out.write( ';' ); // & Will be encoded to amp inside xml encodingSHO
-            }
-            else if ( '&' == b )
-            {
-                out.write( '&' );
-                out.write( 'a' );
-                out.write( 'm' );
-                out.write( 'p' );
-                out.write( ';' ); // & Will be encoded to amp inside xml encodingSHO
-            }
             else
             {
                 out.write( b );    //To change body of overridden methods use File | Settings | File Templates.
             }
+            c1 = c2;
+            c2 = b;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/54c46be0/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXMLReporterTest.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXMLReporterTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXMLReporterTest.java
index 2bf3a75..9c55898 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXMLReporterTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXMLReporterTest.java
@@ -89,7 +89,8 @@ public class StatelessXMLReporterTest
         stats.testSucceeded( testSetReportEntry );
         StackTraceWriter stackTraceWriter = new DeserializedStacktraceWriter( "A fud msg", "trimmed", "fail at foo" );
         DeferredFileOutputStream s = new DeferredFileOutputStream( 1000000, "fds", "fdx", new File( "" ) );
-        s.write( "std-o\u00DCt<null>!".getBytes("UTF-8") );
+        String expected = "st]]>d-o\u00DCt<null>!";
+        s.write( expected.getBytes( "UTF-8" ) );
         DeferredFileOutputStream s1 = new DeferredFileOutputStream( 1000000, "fds", "fdx", new File( "" ) );
         byte[] bytes = "std-\u0115rr?&-&amp;&#163;".getBytes("UTF-8");
         s1.write( bytes );
@@ -125,7 +126,7 @@ public class StatelessXMLReporterTest
         assertNotNull( errorNode );
         assertEquals( "A fud msg", errorNode.getAttribute( "message" ) );
         assertEquals( "fail at foo", errorNode.getAttribute( "type" ) );
-        assertEquals( "std-o\u00DCt<null>!", tcb.getChild( "system-out" ).getValue() );
+        assertEquals( expected, tcb.getChild( "system-out" ).getValue() );
         assertEquals( "std-\u0115rr?&-&amp;&#163;", tcb.getChild( "system-err" ).getValue() );
 
         expectedReportFile.delete();