Author: krosenvold Date: Wed May 4 08:30:59 2011 New Revision: 1099367 URL: http://svn.apache.org/viewvc?rev=1099367&view=rev Log: o Tweaked stream output
Added: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StreamUtils.java (with props) Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StringUtils.java Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java?rev=1099367&r1=1099366&r2=1099367&view=diff ============================================================================== --- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java (original) +++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java Wed May 4 08:30:59 2011 @@ -19,17 +19,19 @@ package org.apache.maven.surefire.booter * under the License. */ -import java.io.PrintStream; -import java.util.Enumeration; -import java.util.Properties; import org.apache.maven.surefire.report.ConsoleOutputReceiver; import org.apache.maven.surefire.report.DirectConsoleReporter; import org.apache.maven.surefire.report.ReportEntry; import org.apache.maven.surefire.report.RunListener; import org.apache.maven.surefire.report.StackTraceWriter; import org.apache.maven.surefire.util.internal.ByteBuffer; +import org.apache.maven.surefire.util.internal.StreamUtils; import org.apache.maven.surefire.util.internal.StringUtils; +import java.io.PrintStream; +import java.util.Enumeration; +import java.util.Properties; + /** * Encodes the full output of the test run to the stdout stream * @@ -147,7 +149,7 @@ public class ForkingRunListener { value = "null"; } - target.print( toPropertyString( key, value ) ); + toPropertyString( key, value ); } } } @@ -155,7 +157,8 @@ public class ForkingRunListener public void writeTestOutput( byte[] buf, int off, int len, boolean stdout ) { byte[] header = stdout ? stdOutHeader : stdErrHeader; - byte[] content = new byte[buf.length * 6 + 1]; // Unicode escapes can be up to 6 times length of regular char. Yuck. + byte[] content = + new byte[buf.length * 6 + 1]; // Unicode escapes can be up to 6 times length of regular char. Yuck. int i = StringUtils.escapeJavaStyleString( content, 0, buf, off, len ); content[i++] = (byte) '\n'; @@ -199,7 +202,7 @@ public class ForkingRunListener public void writeMessage( String message ) { byte[] buf = message.getBytes(); - ByteBuffer byteBuffer = new ByteBuffer( buf.length * 6); + ByteBuffer byteBuffer = new ByteBuffer( buf.length * 6 ); byteBuffer.append( BOOTERCODE_CONSOLE ); byteBuffer.comma(); byteBuffer.append( testSetChannelId ); @@ -212,16 +215,16 @@ public class ForkingRunListener target.flush(); } - private String toPropertyString( String key, String value ) + private void toPropertyString( String key, String value ) { - StringBuffer stringBuffer = new StringBuffer(); - append( stringBuffer, BOOTERCODE_SYSPROPS ).comma( stringBuffer ); - append( stringBuffer, Integer.toHexString( testSetChannelId.intValue() ) ).comma( stringBuffer ); - StringUtils.escapeJavaStyleString( stringBuffer, key ); - append( stringBuffer, "," ); - StringUtils.escapeJavaStyleString( stringBuffer, value ); - stringBuffer.append( "\n" ); - return stringBuffer.toString(); + target.write( BOOTERCODE_SYSPROPS ); + target.write( ',' ); + StreamUtils.toHex( target, testSetChannelId ); + target.write( ',' ); + StringUtils.escapeJavaStyleString( target, key ); + target.write( ',' ); + StringUtils.escapeJavaStyleString( target, value ); + target.write( '\n' ); } private String toString( byte operationCode, ReportEntry reportEntry, Integer testSetChannelId ) Added: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StreamUtils.java URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StreamUtils.java?rev=1099367&view=auto ============================================================================== --- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StreamUtils.java (added) +++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StreamUtils.java Wed May 4 08:30:59 2011 @@ -0,0 +1,70 @@ +package org.apache.maven.surefire.util.internal; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.surefire.util.NestedRuntimeException; + +import java.io.IOException; +import java.io.OutputStream; + +public class StreamUtils +{ + public static void toHex( OutputStream target, Integer i ) + { + if ( i != null ) + { + toHex( target, i.intValue() ); + } + } + + /** + * Convert the integer to an unsigned number. + * + * @param target The stream that will receive the encoded value + * @param i the value + */ + public static void toHex( OutputStream target, int i ) + { + byte[] buf = new byte[32]; + int charPos = 32; + int radix = 1 << 4; + int mask = radix - 1; + do + { + buf[--charPos] = (byte) digits[i & mask]; + i >>>= 4; + } + while ( i != 0 ); + + try + { + target.write( buf, charPos, ( 32 - charPos ) ); + } catch (IOException e) + { + throw new NestedRuntimeException(e); + } + } + + private final static char[] digits = + { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', + 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; + + +} Propchange: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StreamUtils.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StringUtils.java URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StringUtils.java?rev=1099367&r1=1099366&r2=1099367&view=diff ============================================================================== --- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StringUtils.java (original) +++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/StringUtils.java Wed May 4 08:30:59 2011 @@ -20,6 +20,7 @@ package org.apache.maven.surefire.util.i */ import java.io.IOException; +import java.io.PrintStream; import java.io.StringWriter; import java.io.Writer; import java.util.StringTokenizer; @@ -520,6 +521,100 @@ public class StringUtils } } + public static void escapeJavaStyleString( PrintStream out, byte[] str, int off, int len ) + { + if ( out == null ) + { + throw new IllegalArgumentException( "The Writer must not be null" ); + } + final int inputLength = str.length; + if ( str == null || inputLength == 0 ) + { + return; + } + int outputPos = 0; + int end = off + len; + for ( int i = off; i < end; i++ ) + { + char ch = (char) str[i]; + + // handle unicode + if ( ch > 0xfff ) + { + outputPos = writeOut( out, outputPos, "\\u" + hex( ch ) ); + } + else if ( ch > 0xff ) + { + outputPos = writeOut( out, outputPos, "\\u0" + hex( ch ) ); + } + else if ( ch > 0x7f || ch == ',' ) + { // Kr - this line modified from commons + outputPos = writeOut( out, outputPos, "\\u00" + hex( ch ) ); + } + else if ( ch < 32 ) + { + switch ( ch ) + { + case '\b': + out.append( '\\' ); + out.append( 'b' ); + break; + case '\n': + out.append( '\\' ); + out.append( 'n' ); + break; + case '\t': + out.append( '\\' ); + out.append( 't' ); + break; + case '\f': + out.append( '\\' ); + out.append( 'f' ); + break; + case '\r': + out.append( '\\' ); + out.append( 'r' ); + break; + default: + if ( ch > 0xf ) + { + outputPos = writeOut( out, outputPos, "\\u00" + hex( ch ) ); + } + else + { + outputPos = writeOut( out, outputPos, "\\u000" + hex( ch ) ); + } + break; + } + } + else + { + switch ( ch ) + { + case '\'': + out.append( '\\' ); + out.append( '\'' ); + break; + case '"': + out.append( '\\' ); + out.append( '"' ); + break; + case '\\': + out.append( '\\' ); + out.append( '\\' ); + break; + case '/': + out.append( '\\' ); + out.append( '/' ); + break; + default: + out.append( ch ); + break; + } + } + } + } + public static int escapeJavaStyleString( byte[] out, int outoff, byte[] str, int off, int len ) { if ( out == null ) @@ -625,6 +720,16 @@ public class StringUtils return outputPos; } + private static int writeOut( PrintStream out, int outputPos, final String msg ) + { + byte[] bytes = msg.getBytes(); + for ( int cnt = 0; cnt < bytes.length; cnt++ ) + { + out.write( bytes[cnt] ); + } + return outputPos; + } + private static int writeOut( byte[] out, int outputPos, final String msg ) { @@ -666,5 +771,24 @@ public class StringUtils ioe.printStackTrace(); } } + + public static void escapeJavaStyleString( PrintStream target, String str ) + { + if ( str == null ) + { + return; + } + try + { + StringWriter writer = new StringWriter( str.length() * 2 ); + escapeJavaStyleString( writer, str, true ); + target.append( writer.toString() ); // todo: be bit smarter + } + catch ( IOException ioe ) + { + // this should never ever happen while writing to a StringWriter + ioe.printStackTrace(); + } + } }