You are viewing a plain text version of this content. The canonical link for it is here.
Posted to surefire-commits@maven.apache.org by kr...@apache.org on 2011/04/27 23:20:16 UTC
svn commit: r1097246 [4/5] - in /maven/surefire/trunk:
maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/
maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/
maven-surefire-common/src/main/java/org/apache/maven/plug...
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=1097246&r1=1097245&r2=1097246&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 Apr 27 21:20:12 2011
@@ -19,11 +19,15 @@ package org.apache.maven.surefire.util.i
* under the License.
*/
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
import java.util.StringTokenizer;
+import org.apache.maven.surefire.util.NestedRuntimeException;
/**
* <p>Common <code>String</code> manipulation routines.</p>
- *
+ * <p/>
* <p>Originally from
* <a href="http://jakarta.apache.org/turbine/">Turbine</a> and the
* GenerationJavaCore library.</p>
@@ -39,14 +43,14 @@ import java.util.StringTokenizer;
* @author Holger Krauth
* @author <a href="mailto:alex@purpletech.com">Alexander Day Chaffee</a>
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
- * @since 1.0
* @version $Id: StringUtils.java 8001 2009-01-03 13:17:09Z vsiveton $
* @noinspection JavaDoc
- *
+ * <p/>
* A quick borrow from plexus-utils by Kristian Rosenvold, to restore jdk1.3 compat
* Threw away all the unused stuff.
- *
+ * <p/>
* NOTE: This class is not part of any api and is public purely for technical reasons !
+ * @since 1.0
*/
public class StringUtils
{
@@ -107,7 +111,7 @@ public class StringUtils
/**
* <p>Replace all occurrences of a String within another String.</p>
- *
+ * <p/>
* <p>A <code>null</code> reference passed to this method is a no-op.</p>
*
* @param text text to search and replace in
@@ -145,11 +149,559 @@ public class StringUtils
*
* @param str the String to check
* @return <code>true</code> if the String is <code>null</code>, or
- * length zero once trimmed
+ * length zero once trimmed
*/
public static boolean isBlank( String str )
{
return ( ( str == null ) || ( str.trim().length() == 0 ) );
}
+
+
+ // Ripped from commons-lang StringEscapeUtils. Maybe Use dependency instead
+ public static void unescapeJava( StringWriter out, String str )
+ {
+ if ( out == null )
+ {
+ throw new IllegalArgumentException( "The Writer must not be null" );
+ }
+ if ( str == null )
+ {
+ return;
+ }
+ int sz = str.length();
+ StringBuffer unicode = new StringBuffer( 4 );
+ boolean hadSlash = false;
+ boolean inUnicode = false;
+ for ( int i = 0; i < sz; i++ )
+ {
+ char ch = str.charAt( i );
+ if ( inUnicode )
+ {
+ // if in unicode, then we're reading unicode
+ // values in somehow
+ unicode.append( ch );
+ if ( unicode.length() == 4 )
+ {
+ // unicode now contains the four hex digits
+ // which represents our unicode character
+ try
+ {
+ int value = Integer.parseInt( unicode.toString(), 16 );
+ out.write( (char) value );
+ unicode.setLength( 0 );
+ inUnicode = false;
+ hadSlash = false;
+ }
+ catch ( NumberFormatException nfe )
+ {
+ throw new NestedRuntimeException( "Unable to parse unicode value: " + unicode, nfe );
+ }
+ }
+ continue;
+ }
+ if ( hadSlash )
+ {
+ // handle an escaped value
+ hadSlash = false;
+ switch ( ch )
+ {
+ case '\\':
+ out.write( '\\' );
+ break;
+ case '\'':
+ out.write( '\'' );
+ break;
+ case '\"':
+ out.write( '"' );
+ break;
+ case 'r':
+ out.write( '\r' );
+ break;
+ case 'f':
+ out.write( '\f' );
+ break;
+ case 't':
+ out.write( '\t' );
+ break;
+ case 'n':
+ out.write( '\n' );
+ break;
+ case 'b':
+ out.write( '\b' );
+ break;
+ case 'u':
+ {
+ // uh-oh, we're in unicode country....
+ inUnicode = true;
+ break;
+ }
+ default:
+ out.write( ch );
+ break;
+ }
+ continue;
+ }
+ else if ( ch == '\\' )
+ {
+ hadSlash = true;
+ continue;
+ }
+ out.write( ch );
+ }
+ if ( hadSlash )
+ {
+ // then we're in the weird case of a \ at the end of the
+ // string, let's output it anyway.
+ out.write( '\\' );
+ }
+ }
+
+ // Ripped from commons-lang StringEscapeUtils. Maybe Use dependency instead
+ public static int unescapeJava( byte[] out, String str )
+ {
+ int outPos = 0;
+ if ( out == null )
+ {
+ throw new IllegalArgumentException( "The Writer must not be null" );
+ }
+ if ( str == null )
+ {
+ return 0;
+ }
+ int sz = str.length();
+ StringBuffer unicode = new StringBuffer( 4 );
+ boolean hadSlash = false;
+ boolean inUnicode = false;
+ for ( int i = 0; i < sz; i++ )
+ {
+ char ch = str.charAt( i );
+ if ( inUnicode )
+ {
+ // if in unicode, then we're reading unicode
+ // values in somehow
+ unicode.append( ch );
+ if ( unicode.length() == 4 )
+ {
+ // unicode now contains the four hex digits
+ // which represents our unicode character
+ try
+ {
+ int value = Integer.parseInt( unicode.toString(), 16 );
+ out[outPos++] = (byte) value;
+ unicode.setLength( 0 );
+ inUnicode = false;
+ hadSlash = false;
+ }
+ catch ( NumberFormatException nfe )
+ {
+ throw new NestedRuntimeException( "Unable to parse unicode value: " + unicode, nfe );
+ }
+ }
+ continue;
+ }
+ if ( hadSlash )
+ {
+ // handle an escaped value
+ hadSlash = false;
+ switch ( ch )
+ {
+ case '\\':
+ out[outPos++] = '\\';
+ break;
+ case '\'':
+ out[outPos++] = '\'';
+ break;
+ case '\"':
+ out[outPos++] = '"';
+ break;
+ case 'r':
+ out[outPos++] = '\r';
+ break;
+ case 'f':
+ out[outPos++] = '\f';
+ break;
+ case 't':
+ out[outPos++] = '\t';
+ break;
+ case 'n':
+ out[outPos++] = '\n';
+ break;
+ case 'b':
+ out[outPos++] = '\b';
+ break;
+ case 'u':
+ {
+ // uh-oh, we're in unicode country....
+ inUnicode = true;
+ break;
+ }
+ default:
+ out[outPos++] = (byte) ch;
+ break;
+ }
+ continue;
+ }
+ else if ( ch == '\\' )
+ {
+ hadSlash = true;
+ continue;
+ }
+ out[outPos++] = (byte) ch;
+ }
+ if ( hadSlash )
+ {
+ // then we're in the weird case of a \ at the end of the
+ // string, let's output it anyway.
+ out[outPos++] = '\\';
+ }
+ return outPos;
+ }
+
+ // Ripped from commons-lang StringEscapeUtils. With a minor modification, we unicode-quote commas
+ // to avoid csv decoding problems ;)
+
+ /**
+ * @param out write to receieve the escaped string
+ * @param str String to escape values in, may be null
+ * @param escapeSingleQuote escapes single quotes if <code>true</code>
+ * @throws java.io.IOException if an IOException occurs
+ */
+ public static void escapeJavaStyleString( Writer out, String str, boolean escapeSingleQuote )
+ throws IOException
+ {
+ if ( out == null )
+ {
+ throw new IllegalArgumentException( "The Writer must not be null" );
+ }
+ if ( str == null )
+ {
+ return;
+ }
+ int sz;
+ sz = str.length();
+ for ( int i = 0; i < sz; i++ )
+ {
+ char ch = str.charAt( i );
+
+ // handle unicode
+ if ( ch > 0xfff )
+ {
+ out.write( "\\u" + hex( ch ) );
+ }
+ else if ( ch > 0xff )
+ {
+ out.write( "\\u0" + hex( ch ) );
+ }
+ else if ( ch > 0x7f || ch == ',' )
+ { // Kr - this line modified from commons
+ out.write( "\\u00" + hex( ch ) );
+ }
+ else if ( ch < 32 )
+ {
+ switch ( ch )
+ {
+ case '\b':
+ out.write( '\\' );
+ out.write( 'b' );
+ break;
+ case '\n':
+ out.write( '\\' );
+ out.write( 'n' );
+ break;
+ case '\t':
+ out.write( '\\' );
+ out.write( 't' );
+ break;
+ case '\f':
+ out.write( '\\' );
+ out.write( 'f' );
+ break;
+ case '\r':
+ out.write( '\\' );
+ out.write( 'r' );
+ break;
+ default:
+ if ( ch > 0xf )
+ {
+ out.write( "\\u00" + hex( ch ) );
+ }
+ else
+ {
+ out.write( "\\u000" + hex( ch ) );
+ }
+ break;
+ }
+ }
+ else
+ {
+ switch ( ch )
+ {
+ case '\'':
+ if ( escapeSingleQuote )
+ {
+ out.write( '\\' );
+ }
+ out.write( '\'' );
+ break;
+ case '"':
+ out.write( '\\' );
+ out.write( '"' );
+ break;
+ case '\\':
+ out.write( '\\' );
+ out.write( '\\' );
+ break;
+ case '/':
+ out.write( '\\' );
+ out.write( '/' );
+ break;
+ default:
+ out.write( ch );
+ break;
+ }
+ }
+ }
+ }
+
+ public static void escapeJavaStyleString( ByteBuffer 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 )
+ {
+ throw new IllegalArgumentException( "The Writer must not be null" );
+ }
+ final int inputLength = str.length;
+ if ( str == null || inputLength == 0 )
+ {
+ return 0;
+ }
+ int outputPos = outoff;
+ 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[outputPos++] = '\\';
+ out[outputPos++] = 'b';
+ break;
+ case '\n':
+ out[outputPos++] = '\\';
+ out[outputPos++] = 'n';
+ break;
+ case '\t':
+ out[outputPos++] = '\\';
+ out[outputPos++] = 't';
+ break;
+ case '\f':
+ out[outputPos++] = '\\';
+ out[outputPos++] = 'f';
+ break;
+ case '\r':
+ out[outputPos++] = '\\';
+ out[outputPos++] = '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[outputPos++] = '\\';
+ out[outputPos++] = '\'';
+ break;
+ case '"':
+ out[outputPos++] = '\\';
+ out[outputPos++] = '"';
+ break;
+ case '\\':
+ out[outputPos++] = '\\';
+ out[outputPos++] = '\\';
+ break;
+ case '/':
+ out[outputPos++] = '\\';
+ out[outputPos++] = '/';
+ break;
+ default:
+ out[outputPos++] = (byte) ch;
+ break;
+ }
+ }
+ }
+ return outputPos - outoff;
+ }
+
+ private static int writeOut( ByteBuffer out, int outputPos, final String msg )
+ {
+ byte[] bytes = msg.getBytes();
+ for ( int cnt = 0; cnt < bytes.length; cnt++ )
+ {
+ out.append( bytes[cnt] );
+ }
+ return outputPos;
+ }
+
+
+ private static int writeOut( byte[] out, int outputPos, final String msg )
+ {
+ byte[] bytes = msg.getBytes();
+ for ( int cnt = 0; cnt < bytes.length; cnt++ )
+ {
+ out[outputPos++] = bytes[cnt];
+ }
+ return outputPos;
+ }
+
+
+ public static String hex( char ch )
+ {
+ return Integer.toHexString( ch ).toUpperCase();
+ }
+
+ /**
+ * Courtesy of commons-lang StringEscapeUtils, slightly modified, see below
+ *
+ * @param str String to escape values in, may be null
+ * @return the escaped string
+ */
+ public static void escapeJavaStyleString( StringBuffer 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();
+ }
+ }
}
Added: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueue.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueue.java?rev=1097246&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueue.java (added)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueue.java Wed Apr 27 21:20:12 2011
@@ -0,0 +1,94 @@
+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.
+ */
+
+/**
+ * A producer/consumer queue that is optimized for *one* producer thread
+ * and *one* consumer thread, and solely optimized for efficient inserts
+ * by the producer, minimizing producer locking for hand-off to
+ * a second consumer.
+ *
+ * The producer can actually come in on different threads
+ * (because lastInserted is volatile), but can/will lose
+ * items if they arrive concurrently. Take only supports a single
+ * client.
+ *
+ * This runs like crazy, but is not the most garbage friendly around.
+ *
+ * TwoThreadBlockingQueue insert 5000000 elements in = 52ms
+ * LinkedBlockingQueue insert 5000000 elements in = 179ms
+ * LikedBlockingDeque insert 5000000 elements in = 114ms
+ * ArrayList insert 5000000 elements in = 18ms (sized at correct size from start)
+ *
+ * @author Kristian Rosenvold
+ */
+public class TwoThreadBlockingQueue
+ implements BlockingQueue
+{
+ private volatile Element lastInserted;
+ private volatile Element lastTaken;
+ private volatile Element first;
+
+ public static final Object poison = new Object();
+
+ public void add( Object object )
+ {
+ Element next = new Element( object);
+ if (lastInserted == null){
+ first = lastInserted = next;
+ } else {
+ lastInserted.next = next;
+ lastInserted = next;
+ }
+ }
+
+ public Object take()
+ throws InterruptedException
+ {
+ if (lastTaken == null){
+ while (first == null){
+ Thread.sleep(1);
+ }
+ lastTaken = first;
+ first = null;
+ } else {
+ Element next = lastTaken.next;
+ while (next == null){
+ Thread.sleep(1);
+ next = lastTaken.next;
+ }
+ lastTaken = next;
+ }
+ return lastTaken.object;
+ }
+
+ private static class Element
+ {
+ private final Object object;
+
+ private volatile Element next;
+
+ Element( Object object )
+ {
+ this.object = object;
+ }
+ }
+
+}
Propchange: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueue.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AsynchRunListenerTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AsynchRunListenerTest.java?rev=1097246&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AsynchRunListenerTest.java (added)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AsynchRunListenerTest.java Wed Apr 27 21:20:12 2011
@@ -0,0 +1,79 @@
+package org.apache.maven.surefire.report;
+
+/*
+ * 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 junit.framework.TestCase;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class AsynchRunListenerTest
+ extends TestCase
+{
+
+ class MockConsoleOutputReceiver
+ implements ConsoleOutputReceiver
+ {
+ byte[] buf;
+
+ int off;
+
+ int len;
+
+ boolean stdout;
+
+ public void writeTestOutput( byte[] buf, int off, int len, boolean stdout )
+ {
+ this.buf = buf;
+ this.off = off;
+ this.len = len;
+ this.stdout = stdout;
+ }
+
+ public byte[] getBuf()
+ {
+ return buf;
+ }
+
+ public int getLen()
+ {
+ return len;
+ }
+ }
+
+ public void testCombiner()
+ {
+ final MockConsoleOutputReceiver consoleOutputReceiver = new MockConsoleOutputReceiver();
+ AsynchRunListener.JoinableTestOutput joinableTestOutput =
+ new AsynchRunListener.JoinableTestOutput( "ABC".getBytes(), 0, 3, true, consoleOutputReceiver );
+ AsynchRunListener.JoinableTestOutput joinableTestOutput2 =
+ new AsynchRunListener.JoinableTestOutput( "DEF".getBytes(), 0, 3, true, consoleOutputReceiver );
+
+ final AsynchRunListener.JoinableTestOutput append = joinableTestOutput.append( joinableTestOutput2 );
+
+ append.run();
+ final byte[] expected = "ABCDEF".getBytes();
+ for ( int i = 0; i < expected.length; i++ )
+ {
+ assertEquals( expected[i], consoleOutputReceiver.getBuf()[i] );
+ }
+ assertEquals( expected.length, consoleOutputReceiver.getLen() );
+ }
+}
Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AsynchRunListenerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/TestConsoleOutputRunListenerTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/TestConsoleOutputRunListenerTest.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/TestConsoleOutputRunListenerTest.java (original)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/TestConsoleOutputRunListenerTest.java Wed Apr 27 21:20:12 2011
@@ -19,7 +19,8 @@ package org.apache.maven.surefire.report
* under the License.
*/
-import java.util.Arrays;
+import java.util.ArrayList;
+import org.apache.maven.plugin.surefire.report.ReporterManagerFactory;
import junit.framework.TestCase;
@@ -49,13 +50,12 @@ public class TestConsoleOutputRunListene
private ReporterFactory createReporterFactory()
{
ReporterConfiguration reporterConfiguration = getTestReporterConfiguration();
- return new ReporterManagerFactory( this.getClass().getClassLoader(), reporterConfiguration );
+ return new ReporterManagerFactory( this.getClass().getClassLoader(), reporterConfiguration, new ArrayList() );
}
public static ReporterConfiguration getTestReporterConfiguration()
{
- return new ReporterConfiguration( Arrays.asList( new Object[]{ ConsoleReporter.class.getName() } ), null,
- Boolean.TRUE, null );
+ return new ReporterConfiguration( null, Boolean.TRUE, ConsoleReporter.class.getName(), null, null, null );
}
}
Modified: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/XMLReporterTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/XMLReporterTest.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/XMLReporterTest.java (original)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/XMLReporterTest.java Wed Apr 27 21:20:12 2011
@@ -19,9 +19,10 @@ package org.apache.maven.surefire.report
* under the License.
*/
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
public class XMLReporterTest
extends TestCase
@@ -37,9 +38,10 @@ public class XMLReporterTest
throws Exception
{
super.setUp();
- reporter = new XMLReporter( ForkingConsoleReporterTest.getTestReporterConfiguration() );
+ reporter = new XMLReporter( new ReporterConfiguration( null, Boolean.TRUE ) );
message = "junit.framework.AssertionFailedError";
- reportEntry = new SimpleReportEntry( this.getClass().getName(), "XMLReporterTest", new PojoStackTraceWriter( "", "", new AssertionFailedError() ) );
+ reportEntry = new SimpleReportEntry( this.getClass().getName(), "XMLReporterTest",
+ new PojoStackTraceWriter( "", "", new AssertionFailedError() ) );
}
/*
Added: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/suite/RunResultTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/suite/RunResultTest.java?rev=1097246&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/suite/RunResultTest.java (added)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/suite/RunResultTest.java Wed Apr 27 21:20:12 2011
@@ -0,0 +1,62 @@
+package org.apache.maven.surefire.suite;
+
+/*
+ * 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 junit.framework.TestCase;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class RunResultTest
+ extends TestCase
+{
+ public void testGetAsString()
+ throws Exception
+ {
+
+ }
+
+ public void testFromString()
+ throws Exception
+ {
+ RunResult original = new RunResult( 4,3,2,1, true,false);
+ final String asString = original.getAsString();
+ final RunResult runResult = RunResult.fromString( asString );
+ verifySame( original, runResult );
+ }
+ public void testFromString2()
+ throws Exception
+ {
+ RunResult original = new RunResult( 5,6,7,8, false,true );
+ final String asString = original.getAsString();
+ final RunResult runResult = RunResult.fromString( asString );
+ verifySame( original, runResult );
+ }
+
+ private void verifySame( RunResult original, RunResult runResult )
+ {
+ assertEquals( original.getCompletedCount(), runResult.getCompletedCount());
+ assertEquals( original.getErrors(), runResult.getErrors() );
+ assertEquals( original.getFailures(), runResult.getFailures());
+ assertEquals( original.getSkipped(), runResult.getSkipped());
+ assertEquals( original.isFailure(), runResult.isFailure());
+ assertEquals( original.isTimeout(), runResult.isTimeout());
+ }
+}
Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/suite/RunResultTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/StringUtilsTest.java (from r1097226, maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java)
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/StringUtilsTest.java?p2=maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/StringUtilsTest.java&p1=maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java&r1=1097226&r2=1097246&rev=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java (original)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/StringUtilsTest.java Wed Apr 27 21:20:12 2011
@@ -1,4 +1,4 @@
-package org.apache.maven.surefire.report;
+package org.apache.maven.surefire.util.internal;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,30 +19,37 @@ package org.apache.maven.surefire.report
* under the License.
*/
-import java.util.ArrayList;
+import junit.framework.TestCase;
/**
- * Test for {@link ForkingConsoleReporter}
- *
- * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
- * @version $Id$
+ * @author Kristian Rosenvold
*/
-public class ForkingConsoleReporterTest
- extends AbstractConsoleReporterTestCase
+public class StringUtilsTest
+ extends TestCase
{
- protected void setUp()
- throws Exception
+ public void testUnescape()
{
- super.setUp();
- ReporterConfiguration reporterConfiguration = getTestReporterConfiguration();
- ForkingConsoleReporter consoleReporter = new ForkingConsoleReporter( reporterConfiguration );
- setConsoleReporter( consoleReporter );
+ byte[] buffer = new byte[80];
+ final int abc = StringUtils.unescapeJava( buffer, "ABC" );
+ assertEquals( 3, abc );
}
- public static ReporterConfiguration getTestReporterConfiguration()
+ public void testUnescapeWithEscape()
{
- return new ReporterConfiguration( new ArrayList(), null, Boolean.TRUE, null );
+ byte[] buffer = new byte[80];
+ final int abc = StringUtils.unescapeJava( buffer, "AB\tC" );
+ assertEquals( 4, abc );
+ }
+
+ public void testEscape()
+ {
+ ByteBuffer buffer = new ByteBuffer( 80 );
+ StringUtils.escapeJavaStyleString( buffer, "AB\tC".getBytes(), 0, 4 );
+ assertEquals( 5, buffer.getlength() );
+ String temp = buffer.toString();
+ assertEquals( "AB\\tC", temp );
+
}
}
Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/StringUtilsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/StringUtilsTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueueTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueueTest.java?rev=1097246&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueueTest.java (added)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueueTest.java Wed Apr 27 21:20:12 2011
@@ -0,0 +1,196 @@
+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 java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.concurrent.Callable;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class TwoThreadBlockingQueueTest
+ extends TestCase
+{
+ final int num = 100000;
+
+ public void testPut()
+ throws Exception
+ {
+ BlockingQueue twoThreadBlockingQueue = new TwoThreadBlockingQueue();
+
+ String[] items = generate( num );
+ long start = System.currentTimeMillis();
+ for ( int i = 0; i < num; i++ )
+ {
+ twoThreadBlockingQueue.add( items[i] );
+ }
+ long elapsed = System.currentTimeMillis() - start;
+ //System.out.println( "TwoThreadBlockingQueue insert " + num + " elements in = " + elapsed );
+ System.gc();
+ }
+
+ public void testFunkyPut()
+ throws Exception
+ {
+ FunkyTwoThreadBlockingQueue twoThreadBlockingQueue = new FunkyTwoThreadBlockingQueue();
+
+ String[] items = generate( num );
+ long start = System.currentTimeMillis();
+ for ( int i = 0; i < num; i++ )
+ {
+ twoThreadBlockingQueue.put( items[i] );
+ }
+ long elapsed = System.currentTimeMillis() - start;
+ //System.out.println( "FunkyTwoThreadBlockingQueue insert " + num + " elements in = " + elapsed );
+ System.gc();
+ }
+
+
+ public void testPutAndTake()
+ throws Exception
+ {
+ final FunkyTwoThreadBlockingQueue twoThreadBlockingQueue = new FunkyTwoThreadBlockingQueue();
+
+ Callable consumer = new Callable()
+ {
+ public Object call()
+ throws Exception
+ {
+ int num = 0;
+ Object taken;
+ do
+ {
+ taken = twoThreadBlockingQueue.take();
+ if (taken != TwoThreadBlockingQueue.poison) {
+ assertEquals( "item" + num++, taken );
+ }
+ }
+ while ( taken != TwoThreadBlockingQueue.poison);
+ return taken;
+ }
+ };
+
+ FutureTask futureTask = new FutureTask( consumer );
+ Thread thread = new Thread( futureTask );
+ thread.start();
+
+ String[] items = generate( num );
+ long start = System.currentTimeMillis();
+ for ( int i = 0; i < num; i++ )
+ {
+ twoThreadBlockingQueue.put( items[i] );
+ }
+ twoThreadBlockingQueue.put( TwoThreadBlockingQueue.poison );
+ long elapsed = System.currentTimeMillis() - start;
+
+ futureTask.get();
+
+ // System.out.println( "TwoThreadBlockingQueue produced and taken " + num + " elements in = " + elapsed );
+ System.gc();
+ }
+
+ public void testLBQPut()
+ throws Exception
+ {
+ LinkedBlockingQueue twoThreadBlockingQueue = new LinkedBlockingQueue();
+
+ String[] items = generate( num );
+ long start = System.currentTimeMillis();
+ for ( int i = 0; i < num; i++ )
+ {
+ twoThreadBlockingQueue.put( items[i] );
+ }
+ long elapsed = System.currentTimeMillis() - start;
+ //System.out.println( "LinkedBlockingQueue insert " + num + " elements in = " + elapsed );
+ System.gc();
+ }
+
+ public void testLDBQPut()
+ throws Exception
+ {
+ LinkedBlockingDeque twoThreadBlockingQueue = new LinkedBlockingDeque();
+
+ String[] items = generate( num );
+ long start = System.currentTimeMillis();
+ for ( int i = 0; i < num; i++ )
+ {
+ twoThreadBlockingQueue.put( items[i] );
+ }
+ long elapsed = System.currentTimeMillis() - start;
+ //System.out.println( "LinkedBlockingDeque insert " + num + " elements in = " + elapsed );
+
+ System.gc();
+ }
+
+ public void testArrayList()
+ throws Exception
+ {
+ ArrayList twoThreadBlockingQueue = new ArrayList( num);
+
+ String[] items = generate( num );
+ long start = System.currentTimeMillis();
+ for ( int i = 0; i < num; i++ )
+ {
+ twoThreadBlockingQueue.add( items[i] );
+ }
+ long elapsed = System.currentTimeMillis() - start;
+ //System.out.println( "ArrayList insert " + num + " elements in = " + elapsed );
+ System.gc();
+ }
+
+ public void testLinkedList()
+ throws Exception
+ {
+ LinkedList twoThreadBlockingQueue = new LinkedList( );
+
+ String[] items = generate( num );
+ long start = System.currentTimeMillis();
+ for ( int i = 0; i < num; i++ )
+ {
+ twoThreadBlockingQueue.add( items[i] );
+ }
+ long elapsed = System.currentTimeMillis() - start;
+ //System.out.println( "LinkedList insert " + num + " elements in = " + elapsed );
+ System.gc();
+ }
+
+
+ public void testTake()
+ throws Exception
+ {
+
+ }
+
+ String[] generate( int num )
+ {
+ String[] result = new String[num];
+ for ( int i = 0; i < num; i++ )
+ {
+ result[i] = "item" + i;
+ }
+ return result;
+ }
+}
Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/internal/TwoThreadBlockingQueueTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: maven/surefire/trunk/surefire-booter/pom.xml
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/pom.xml?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/pom.xml (original)
+++ maven/surefire/trunk/surefire-booter/pom.xml Wed Apr 27 21:20:12 2011
@@ -17,7 +17,8 @@
~ specific language governing permissions and limitations
~ under the License.
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
@@ -56,6 +57,32 @@
<target>1.3</target>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <minimizeJar>true</minimizeJar>
+ <artifactSet>
+ <includes>
+ <include>commons-lang:commons-lang</include>
+ </includes>
+ </artifactSet>
+ <relocations>
+ <relocation>
+ <pattern>org.apache.commons.lang</pattern>
+ <shadedPattern>org.apache.maven.surefire.shade.org.apache.commons.lang</shadedPattern>
+ </relocation>
+ </relocations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
</project>
\ No newline at end of file
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterConstants.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterConstants.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterConstants.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterConstants.java Wed Apr 27 21:20:12 2011
@@ -29,7 +29,6 @@ public interface BooterConstants
{
String INCLUDES_PROPERTY_PREFIX = "includes";
String EXCLUDES_PROPERTY_PREFIX = "excludes";
- String REPORT_PROPERTY_PREFIX = "report.";
String PARAMS_SUFIX = ".params";
String TYPES_SUFIX = ".types";
String USESYSTEMCLASSLOADER = "useSystemClassLoader";
@@ -38,6 +37,7 @@ public interface BooterConstants
String ISTRIMSTACKTRACE = "isTrimStackTrace";
String REPORTSDIRECTORY = "reportsDirectory";
String FORKTIMEOUT = "forkTimeout";
+ String FORKMODE = "forkMode";
String TESTARTIFACT_VERSION = "testFwJarVersion";
String TESTARTIFACT_CLASSIFIER = "testFwJarClassifier";
String REQUESTEDTEST = "requestedTest";
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java Wed Apr 27 21:20:12 2011
@@ -19,15 +19,14 @@ package org.apache.maven.surefire.booter
* under the License.
*/
-import org.apache.maven.surefire.report.ReporterConfiguration;
-import org.apache.maven.surefire.testset.DirectoryScannerParameters;
-import org.apache.maven.surefire.testset.TestArtifactInfo;
-import org.apache.maven.surefire.testset.TestRequest;
-
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
+import org.apache.maven.surefire.report.ReporterConfiguration;
+import org.apache.maven.surefire.testset.DirectoryScannerParameters;
+import org.apache.maven.surefire.testset.TestArtifactInfo;
+import org.apache.maven.surefire.testset.TestRequest;
/**
* Knows how to serialize and deserialize the booter configuration.
@@ -61,7 +60,6 @@ public class BooterDeserializer
{
final File reportsDirectory = new File( properties.getProperty( REPORTSDIRECTORY ) );
- Integer timeout = properties.getIntegerObjectProperty( FORKTIMEOUT );
final String testNgVersion = properties.getProperty( TESTARTIFACT_VERSION );
final String testArtifactClassifier = properties.getProperty( TESTARTIFACT_CLASSIFIER );
final Object testForFork = properties.getTypeDecoded( FORKTESTSET );
@@ -69,7 +67,6 @@ public class BooterDeserializer
final String requestedTestMethod = properties.getProperty( REQUESTEDTESTMETHOD );
final File sourceDirectory = properties.getFileProperty( SOURCE_DIRECTORY );
- final List reports = properties.getStringList( REPORT_PROPERTY_PREFIX );
final List excludesList = properties.getStringList( EXCLUDES_PROPERTY_PREFIX );
final List includesList = properties.getStringList( INCLUDES_PROPERTY_PREFIX );
@@ -82,15 +79,16 @@ public class BooterDeserializer
properties.getBooleanObjectProperty( FAILIFNOTESTS ), runOrder );
TestArtifactInfo testNg = new TestArtifactInfo( testNgVersion, testArtifactClassifier );
- TestRequest testSuiteDefinition = new TestRequest( testSuiteXmlFiles, sourceDirectory, requestedTest, requestedTestMethod );
+ TestRequest testSuiteDefinition =
+ new TestRequest( testSuiteXmlFiles, sourceDirectory, requestedTest, requestedTestMethod );
- ReporterConfiguration reporterConfiguration = new ReporterConfiguration( reports, reportsDirectory,
- properties.getBooleanObjectProperty(
- ISTRIMSTACKTRACE ), timeout );
+ ReporterConfiguration reporterConfiguration =
+ new ReporterConfiguration( reportsDirectory, properties.getBooleanObjectProperty( ISTRIMSTACKTRACE ) );
+ String forkMode = properties.getProperty( FORKMODE );
return new ProviderConfiguration( dirScannerParams, properties.getBooleanProperty( FAILIFNOTESTS ),
reporterConfiguration, testNg, testSuiteDefinition,
- properties.getProperties(), testForFork );
+ properties.getProperties(), testForFork, forkMode );
}
public StartupConfiguration getProviderConfiguration()
@@ -99,13 +97,14 @@ public class BooterDeserializer
boolean useSystemClassLoader = properties.getBooleanProperty( USESYSTEMCLASSLOADER );
boolean useManifestOnlyJar = properties.getBooleanProperty( USEMANIFESTONLYJAR );
String providerConfiguration = properties.getProperty( PROVIDER_CONFIGURATION );
+ String forkMode = properties.getProperty( FORKMODE );
ClassLoaderConfiguration classLoaderConfiguration =
new ClassLoaderConfiguration( useSystemClassLoader, useManifestOnlyJar );
ClasspathConfiguration classpathConfiguration = new ClasspathConfiguration( properties );
- return StartupConfiguration.inForkedVm( providerConfiguration, classpathConfiguration,
- classLoaderConfiguration );
+ return StartupConfiguration.inForkedVm( providerConfiguration, classpathConfiguration, classLoaderConfiguration,
+ forkMode );
}
}
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java Wed Apr 27 21:20:12 2011
@@ -23,6 +23,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
+import org.apache.maven.surefire.suite.RunResult;
/**
* The part of the booter that is unique to a forked vm.
@@ -51,6 +52,7 @@ public class ForkedBooter
{
try
{
+ long start = System.currentTimeMillis();
if ( args.length > 1 )
{
SystemPropertyManager.setSystemProperties( new File( args[1] ) );
@@ -62,16 +64,16 @@ public class ForkedBooter
ProviderConfiguration booterConfiguration = booterDeserializer.deserialize();
final StartupConfiguration providerConfiguration = booterDeserializer.getProviderConfiguration();
- SurefireStarter starter = new SurefireStarter( providerConfiguration, booterConfiguration );
+
+ SurefireStarter starter = new SurefireStarter( providerConfiguration, booterConfiguration, true );
Object forkedTestSet = booterConfiguration.getTestForFork();
- Properties p = booterConfiguration.getProviderProperties();
- final int result = forkedTestSet != null
- ? starter.runSuitesInProcess( forkedTestSet, surefirePropertiesFile, p )
- : starter.runSuitesInProcess();
+ final RunResult result = forkedTestSet != null
+ ? starter.runSuitesInProcessWhenForked(forkedTestSet )
+ : starter.runSuitesInProcessWhenForked();
// noinspection CallToSystemExit
- System.exit( result );
+ System.exit( result.getBooterCode() );
}
catch ( Throwable t )
{
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderConfiguration.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderConfiguration.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderConfiguration.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderConfiguration.java Wed Apr 27 21:20:12 2011
@@ -22,6 +22,7 @@ package org.apache.maven.surefire.booter
import java.io.File;
import java.util.List;
import java.util.Properties;
+import org.apache.maven.surefire.forking.ForkConfigurationInfo;
import org.apache.maven.surefire.report.ReporterConfiguration;
import org.apache.maven.surefire.testset.DirectoryScannerParameters;
import org.apache.maven.surefire.testset.TestArtifactInfo;
@@ -62,9 +63,12 @@ public class ProviderConfiguration
private final Object forkTestSet;
+ private final String forkMode;
+
public ProviderConfiguration( DirectoryScannerParameters directoryScannerParameters, boolean failIfNoTests,
ReporterConfiguration reporterConfiguration, TestArtifactInfo testArtifact,
- TestRequest testSuiteDefinition, Properties providerProperties, Object forkTestSet )
+ TestRequest testSuiteDefinition, Properties providerProperties, Object forkTestSet,
+ String forkMode )
{
this.providerProperties = providerProperties;
this.reporterConfiguration = reporterConfiguration;
@@ -73,6 +77,7 @@ public class ProviderConfiguration
this.dirScannerParams = directoryScannerParameters;
this.failIfNoTests = failIfNoTests;
this.forkTestSet = forkTestSet;
+ this.forkMode = forkMode;
}
@@ -128,6 +133,11 @@ public class ProviderConfiguration
return forkTestSet;
}
+ public ForkConfigurationInfo getForkConfigurationInfo( boolean isInFork )
+ {
+ return new ForkConfigurationInfo( forkMode, isInFork ? Boolean.TRUE : Boolean.FALSE );
+ }
+
public String getTestForForkString()
{
if ( forkTestSet instanceof File )
@@ -137,11 +147,15 @@ public class ProviderConfiguration
return (String) forkTestSet;
}
+ public String getForkMode()
+ {
+ return forkMode;
+ }
+
public boolean isSurefireForkReturnCode( int returnCode )
{
- return TESTS_SUCCEEDED_EXIT_CODE == returnCode ||
- NO_TESTS_EXIT_CODE == returnCode ||
- TESTS_FAILED_EXIT_CODE == returnCode;
+ return TESTS_SUCCEEDED_EXIT_CODE == returnCode || NO_TESTS_EXIT_CODE == returnCode
+ || TESTS_FAILED_EXIT_CODE == returnCode;
}
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java Wed Apr 27 21:20:12 2011
@@ -19,16 +19,15 @@ package org.apache.maven.surefire.booter
* under the License.
*/
-import org.apache.maven.surefire.providerapi.SurefireProvider;
-
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
+import org.apache.maven.surefire.forking.ForkConfigurationInfo;
+import org.apache.maven.surefire.providerapi.SurefireProvider;
/**
* Creates the surefire provider.
* <p/>
- * Todo: This class does a little bit too little ;)
*
* @author Kristian Rosenvold
*/
@@ -44,15 +43,22 @@ public class ProviderFactory
private final SurefireReflector surefireReflector;
+ private final ForkConfigurationInfo forkConfigurationInfo;
+
+ private final Object reporterManagerFactory;
+
public ProviderFactory( StartupConfiguration startupConfiguration, ProviderConfiguration providerConfiguration,
- ClassLoader surefireClassLoader, ClassLoader testsClassLoader )
+ ClassLoader surefireClassLoader, ClassLoader testsClassLoader,
+ ForkConfigurationInfo forkMode, Object reporterManagerFactory )
{
this.providerConfiguration = providerConfiguration;
this.surefireClassLoader = surefireClassLoader;
this.startupConfiguration = startupConfiguration;
this.surefireReflector = new SurefireReflector( surefireClassLoader );
this.testsClassLoader = testsClassLoader;
+ this.forkConfigurationInfo = forkMode;
+ this.reporterManagerFactory = reporterManagerFactory;
}
public SurefireProvider createProvider()
@@ -61,13 +67,15 @@ public class ProviderFactory
Thread.currentThread().setContextClassLoader( surefireClassLoader );
StartupConfiguration starterConfiguration = startupConfiguration;
- final Object o = surefireReflector.createBooterConfiguration();
+
+ final Object o = surefireReflector.createBooterConfiguration( surefireClassLoader, reporterManagerFactory );
surefireReflector.setTestSuiteDefinitionAware( o, providerConfiguration.getTestSuiteDefinition() );
surefireReflector.setProviderPropertiesAware( o, providerConfiguration.getProviderProperties() );
surefireReflector.setReporterConfigurationAware( o, providerConfiguration.getReporterConfiguration() );
surefireReflector.setTestClassLoaderAware( o, surefireClassLoader, testsClassLoader );
surefireReflector.setTestArtifactInfoAware( o, providerConfiguration.getTestArtifact() );
surefireReflector.setIfDirScannerAware( o, providerConfiguration.getDirScannerParams() );
+ surefireReflector.setForkConfigurationInfo( o, this.forkConfigurationInfo );
Object provider = surefireReflector.instantiateProvider( starterConfiguration.getProviderClassName(), o );
Thread.currentThread().setContextClassLoader( context );
@@ -109,5 +117,4 @@ public class ProviderFactory
}
}
}
-
}
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/StartupConfiguration.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/StartupConfiguration.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/StartupConfiguration.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/StartupConfiguration.java Wed Apr 27 21:20:12 2011
@@ -38,24 +38,27 @@ public class StartupConfiguration
private final boolean redirectTestOutputToFile;
+ private final String forkMode;
+
public StartupConfiguration( String providerClassName, ClasspathConfiguration classpathConfiguration,
- ClassLoaderConfiguration classLoaderConfiguration, boolean forkRequested,
- boolean inForkedVm, boolean redirectTestOutputToFile )
+ ClassLoaderConfiguration classLoaderConfiguration, String forkMode, boolean inForkedVm,
+ boolean redirectTestOutputToFile )
{
this.providerClassName = providerClassName;
this.classpathConfiguration = classpathConfiguration;
this.classLoaderConfiguration = classLoaderConfiguration;
- isForkRequested = forkRequested;
+ this.forkMode = forkMode;
+ isForkRequested = !"never".equals( forkMode );
isInForkedVm = inForkedVm;
this.redirectTestOutputToFile = redirectTestOutputToFile;
}
public static StartupConfiguration inForkedVm( String providerClassName,
ClasspathConfiguration classpathConfiguration,
- ClassLoaderConfiguration classLoaderConfiguration )
+ ClassLoaderConfiguration classLoaderConfiguration, String forkMode )
{
- return new StartupConfiguration( providerClassName, classpathConfiguration, classLoaderConfiguration, false,
+ return new StartupConfiguration( providerClassName, classpathConfiguration, classLoaderConfiguration, forkMode,
true, false );
}
@@ -90,7 +93,8 @@ public class StartupConfiguration
return classLoaderConfiguration;
}
- public boolean isShadefire(){
- return providerClassName.startsWith( "org.apache.maven.surefire.shadefire");
+ public boolean isShadefire()
+ {
+ return providerClassName.startsWith( "org.apache.maven.surefire.shadefire" );
}
}
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireStarter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireStarter.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireStarter.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireStarter.java Wed Apr 27 21:20:12 2011
@@ -19,18 +19,14 @@ package org.apache.maven.surefire.booter
* under the License.
*/
+import java.io.IOException;
+import java.io.PrintStream;
import org.apache.maven.surefire.providerapi.SurefireProvider;
-import org.apache.maven.surefire.report.ReporterConfiguration;
import org.apache.maven.surefire.report.ReporterException;
import org.apache.maven.surefire.suite.RunResult;
import org.apache.maven.surefire.testset.TestSetFailedException;
import org.apache.maven.surefire.util.NestedRuntimeException;
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Properties;
-
/**
* Invokes surefire with the correct classloader setup.
* <p/>
@@ -46,50 +42,91 @@ import java.util.Properties;
*/
public class SurefireStarter
{
- private static final int NO_TESTS = 254;
-
private final ProviderConfiguration providerConfiguration;
private final StartupConfiguration startupConfiguration;
- private final String SUREFIRE_TEST_CLASSPATH = "surefire.test.class.path";
+ private final static String SUREFIRE_TEST_CLASSPATH = "surefire.test.class.path";
- public SurefireStarter( StartupConfiguration startupConfiguration, ProviderConfiguration providerConfiguration )
+ private final boolean inFork;
+
+ public SurefireStarter( StartupConfiguration startupConfiguration, ProviderConfiguration providerConfiguration,
+ boolean inFork )
{
this.providerConfiguration = providerConfiguration;
this.startupConfiguration = startupConfiguration;
+ this.inFork = inFork;
}
- public int runSuitesInProcess( Object testSet, File surefirePropertiesFile, Properties p )
+ public RunResult runSuitesInProcessWhenForked( Object testSet )
throws SurefireExecutionException, IOException
{
writeSurefireTestClasspathProperty();
final ClasspathConfiguration classpathConfiguration = startupConfiguration.getClasspathConfiguration();
+ // todo: Find out....
+ // Why is the classloader structure created differently when a testSet is specified ?
+ // Smells like a legacy bug. Need to check issue tracker.
ClassLoader testsClassLoader = classpathConfiguration.createTestClassLoaderConditionallySystem(
startupConfiguration.useSystemClassLoader() );
ClassLoader surefireClassLoader = classpathConfiguration.createSurefireClassLoader( testsClassLoader );
- final RunResult runResult = invokeProvider( testSet, testsClassLoader, surefireClassLoader );
- updateResultsProperties( runResult, p );
- SystemPropertyManager.writePropertiesFile( surefirePropertiesFile, "surefire", p );
- return processRunCount( runResult );
+ SurefireReflector surefireReflector = new SurefireReflector( surefireClassLoader );
+
+ final Object forkingReporterFactory = createForkingReporterFactory( surefireReflector );
+
+ return invokeProvider( testSet, testsClassLoader, surefireClassLoader, forkingReporterFactory );
+ }
+
+ private Object createForkingReporterFactory( SurefireReflector surefireReflector )
+ {
+ return surefireReflector.createForkingReporterFactory(
+ this.providerConfiguration.getReporterConfiguration().isTrimStackTrace(),
+ this.providerConfiguration.getReporterConfiguration().getOriginalSystemOut() );
+ }
+
+ // todo: Fix duplication in this method and runSuitesInProcess
+ // This should be fixed "at a higher level", because this whole way
+ // of organizing the code stinks.
+
+ public RunResult runSuitesInProcessWhenForked()
+ throws SurefireExecutionException
+ {
+ ClassLoader testsClassLoader = createInProcessTestClassLoader();
+
+ ClassLoader surefireClassLoader = createSurefireClassloader( testsClassLoader );
+
+ SurefireReflector surefireReflector = new SurefireReflector( surefireClassLoader );
+
+ final Object factory = createForkingReporterFactory( surefireReflector );
+
+ return invokeProvider( null, testsClassLoader, surefireClassLoader, factory );
}
- public int runSuitesInProcess()
+ public RunResult runSuitesInProcess()
throws SurefireExecutionException
{
// The test classloader must be constructed first to avoid issues with commons-logging until we properly
// separate the TestNG classloader
ClassLoader testsClassLoader = createInProcessTestClassLoader();
- final ClasspathConfiguration classpathConfiguration = startupConfiguration.getClasspathConfiguration();
+ ClassLoader surefireClassLoader = createSurefireClassloader( testsClassLoader );
- ClassLoader surefireClassLoader = classpathConfiguration.createSurefireClassLoader( testsClassLoader );
+ SurefireReflector surefireReflector = new SurefireReflector( surefireClassLoader );
- final RunResult runResult = invokeProvider( null, testsClassLoader, surefireClassLoader );
- return processRunCount( runResult);
+ final Object factory =
+ surefireReflector.createReportingReporterFactory( this.providerConfiguration.getReporterConfiguration() );
+
+ return invokeProvider( null, testsClassLoader, surefireClassLoader, factory );
+ }
+
+ private ClassLoader createSurefireClassloader( ClassLoader testsClassLoader )
+ throws SurefireExecutionException
+ {
+ final ClasspathConfiguration classpathConfiguration = startupConfiguration.getClasspathConfiguration();
+
+ return classpathConfiguration.createSurefireClassLoader( testsClassLoader );
}
private ClassLoader createInProcessTestClassLoader()
@@ -118,32 +155,18 @@ public class SurefireStarter
classpathConfiguration.getTestClasspath().writeToSystemProperty( SUREFIRE_TEST_CLASSPATH );
}
- private static final String RESULTS_ERRORS = "errors";
-
- private static final String RESULTS_COMPLETED_COUNT = "completedCount";
-
- private static final String RESULTS_FAILURES = "failures";
-
- private static final String RESULTS_SKIPPED = "skipped";
-
-
- private void updateResultsProperties( RunResult runResult, Properties results )
- {
- results.setProperty( RESULTS_ERRORS, String.valueOf( runResult.getErrors() ) );
- results.setProperty( RESULTS_COMPLETED_COUNT, String.valueOf( runResult.getCompletedCount() ) );
- results.setProperty( RESULTS_FAILURES, String.valueOf( runResult.getFailures() ) );
- results.setProperty( RESULTS_SKIPPED, String.valueOf( runResult.getSkipped() ) );
- }
-
- private RunResult invokeProvider( Object testSet, ClassLoader testsClassLoader, ClassLoader surefireClassLoader )
+ private RunResult invokeProvider( Object testSet, ClassLoader testsClassLoader, ClassLoader surefireClassLoader,
+ Object factory )
{
final PrintStream orgSystemOut = System.out;
final PrintStream orgSystemErr = System.err;
// Note that System.out/System.err are also read in the "ReporterConfiguration" instatiation
// in createProvider below. These are the same values as here.
+
ProviderFactory providerFactory =
- new ProviderFactory( startupConfiguration, providerConfiguration, surefireClassLoader, testsClassLoader );
- final SurefireProvider provider = providerFactory.createProvider( );
+ new ProviderFactory( startupConfiguration, providerConfiguration, surefireClassLoader, testsClassLoader,
+ providerConfiguration.getForkConfigurationInfo( inFork ), factory );
+ final SurefireProvider provider = providerFactory.createProvider();
try
{
@@ -163,23 +186,4 @@ public class SurefireStarter
System.setErr( orgSystemErr );
}
}
-
- /**
- * Returns the process return code based on the RunResult
- *
- * @param runCount The run result
- * @return The process result code
- * @throws SurefireExecutionException When an exception is found
- */
- private int processRunCount( RunResult runCount )
- throws SurefireExecutionException
- {
-
- if ( runCount.getCompletedCount() == 0 && providerConfiguration.isFailIfNoTests().booleanValue() )
- {
- return NO_TESTS;
- }
-
- return runCount.getBooterCode();
- }
}
Modified: maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/ForkTimeoutTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/ForkTimeoutTest.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/ForkTimeoutTest.java (original)
+++ maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/ForkTimeoutTest.java Wed Apr 27 21:20:12 2011
@@ -19,6 +19,7 @@ package org.apache.maven.surefire.booter
* under the License.
*/
+import java.util.Iterator;
import org.apache.maven.surefire.providerapi.AbstractProvider;
import org.apache.maven.surefire.providerapi.SurefireProvider;
import org.apache.maven.surefire.report.ReporterConfiguration;
@@ -26,8 +27,6 @@ import org.apache.maven.surefire.report.
import org.apache.maven.surefire.suite.RunResult;
import org.apache.maven.surefire.testset.TestSetFailedException;
-import java.util.Iterator;
-
import junit.framework.TestCase;
/**
@@ -41,7 +40,7 @@ public class ForkTimeoutTest
{
final Integer forkTimeout1 = new Integer( 100 );
SurefireProvider surefireProvider = new TestProvider();
- ReporterConfiguration reporterConfiguration = new ReporterConfiguration( null, null, null, forkTimeout1 );
+ ReporterConfiguration reporterConfiguration = new ReporterConfiguration( null, null );
new ForkTimeout( 100, reporterConfiguration, surefireProvider );
try
{
Modified: maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java (original)
+++ maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java Wed Apr 27 21:20:12 2011
@@ -20,20 +20,19 @@ nse agreements. See the NOTICE file
* under the License.
*/
-import org.apache.maven.surefire.report.ReporterConfiguration;
-import org.apache.maven.surefire.testset.DirectoryScannerParameters;
-import org.apache.maven.surefire.testset.TestArtifactInfo;
-import org.apache.maven.surefire.testset.TestRequest;
-
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Properties;
+import org.apache.maven.surefire.report.ReporterConfiguration;
+import org.apache.maven.surefire.testset.DirectoryScannerParameters;
+import org.apache.maven.surefire.testset.TestArtifactInfo;
+import org.apache.maven.surefire.testset.TestRequest;
+import org.apache.maven.surefire.util.NestedRuntimeException;
import junit.framework.TestCase;
-import org.apache.maven.surefire.util.NestedRuntimeException;
/**
* @author Kristian Rosenvold
@@ -91,7 +90,7 @@ public class SurefireReflectorTest
private ReporterConfiguration getReporterConfiguration()
{
- return new ReporterConfiguration( new ArrayList(), new File( "CDE" ), Boolean.TRUE, null );
+ return new ReporterConfiguration( new File( "CDE" ), Boolean.TRUE );
}
public void testTestClassLoaderAware()
Modified: maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgExecuteErrorIT.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgExecuteErrorIT.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgExecuteErrorIT.java (original)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgExecuteErrorIT.java Wed Apr 27 21:20:12 2011
@@ -18,12 +18,11 @@ package org.apache.maven.surefire.its;
* under the License.
*/
+import java.io.File;
import org.apache.maven.it.VerificationException;
import org.apache.maven.it.Verifier;
import org.apache.maven.it.util.ResourceExtractor;
-import java.io.File;
-
/**
* Test for checking that the output from a forked suite is properly captured even if the suite encounters a severe error.
*
@@ -47,6 +46,6 @@ public class CheckTestNgExecuteErrorIT
} // expected
verifier.resetStreams();
- assertTrue( new File( testDir, "target/surefire-reports/TestSuite-output.txt" ).length() > 0 );
+ verifier.verifyTextInLog( "at org.apache.maven.surefire.testng.TestNGExecutor.run" );
}
}
Modified: maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire628ConsoleOutputBeforeAndAfterClassIT.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire628ConsoleOutputBeforeAndAfterClassIT.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire628ConsoleOutputBeforeAndAfterClassIT.java (original)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire628ConsoleOutputBeforeAndAfterClassIT.java Wed Apr 27 21:20:12 2011
@@ -20,7 +20,7 @@ package org.apache.maven.surefire.its;
/**
- * SUREFIRE-621 Asserts that console output always goes somewhere ;)
+ * Asserts that console output always goes somewhere ;)
*
* @author Kristian Rosenvold
*/
Copied: maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire674BuildFailingWhenFailsafeErrorsIT.java (from r1097226, maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire628ConsoleOutputBeforeAndAfterClassIT.java)
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire674BuildFailingWhenFailsafeErrorsIT.java?p2=maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire674BuildFailingWhenFailsafeErrorsIT.java&p1=maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire628ConsoleOutputBeforeAndAfterClassIT.java&r1=1097226&r2=1097246&rev=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire628ConsoleOutputBeforeAndAfterClassIT.java (original)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/Surefire674BuildFailingWhenFailsafeErrorsIT.java Wed Apr 27 21:20:12 2011
@@ -19,32 +19,35 @@ package org.apache.maven.surefire.its;
*/
+import org.apache.maven.it.VerificationException;
+
+import junit.framework.Assert;
+
/**
- * SUREFIRE-621 Asserts that console output always goes somewhere ;)
+ * SUREFIRE-674 Asserts that the build fails when tests have errors
*
* @author Kristian Rosenvold
*/
-public class Surefire628ConsoleOutputBeforeAndAfterClassIT
+public class Surefire674BuildFailingWhenFailsafeErrorsIT
extends SurefireVerifierTestClass
{
- public Surefire628ConsoleOutputBeforeAndAfterClassIT()
+ public Surefire674BuildFailingWhenFailsafeErrorsIT()
{
- super( "/surefire-628-consoleoutputbeforeandafterclass" );
+ super( "/failsafe-buildfail" );
}
- public void testJunit3ParallelBuildResultCount()
+ public void testBuildFailingWhenErrors()
throws Exception
{
- failNever();
- executeTest();
-
- verifyTextInLog( "628Test1" );
- verifyTextInLog( "Before628Test1" );
- verifyTextInLog( "After628Test1" );
- verifyTextInLog( "628Test2" );
- verifyTextInLog( "Before628Test2" );
- verifyTextInLog( "After628Test2" );
+ try
+ {
+ executeVerify();
+ Assert.fail( "The verifier should throw an exception" );
+ }
+ catch ( VerificationException ignore )
+ {
+ }
+ verifyTextInLog( "BUILD FAILURE" );
}
-
}
\ No newline at end of file
Modified: maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/SurefireVerifierTestClass.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/SurefireVerifierTestClass.java?rev=1097246&r1=1097245&r2=1097246&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/SurefireVerifierTestClass.java (original)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/SurefireVerifierTestClass.java Wed Apr 27 21:20:12 2011
@@ -39,7 +39,7 @@ import junit.framework.TestCase;
/**
* Contains commonly used featurtes for most tests, encapsulating
* common use cases.
- *
+ * <p/>
* Also includes thread-safe access to the extracted resource
* files, which AbstractSurefireIntegrationTestClass does not.
* Thread safe only for running in "classes" mode.
@@ -84,8 +84,6 @@ public abstract class SurefireVerifierTe
{
String tempDirPath = System.getProperty( "maven.test.tmpdir", System.getProperty( "java.io.tmpdir" ) );
File tempDir = new File( tempDirPath, this.getClass().getSimpleName() );
- System.out.println( "tempDir = " + tempDir );
-
File testDir = new File( tempDir, resourcePath );
FileUtils.deleteDirectory( testDir );
@@ -199,6 +197,12 @@ public abstract class SurefireVerifierTe
return execute( "test" );
}
+ protected Verifier executeVerify()
+ throws VerificationException
+ {
+ return execute( "verify" );
+ }
+
protected Verifier execute( String goal )
throws VerificationException
{
@@ -235,7 +239,7 @@ public abstract class SurefireVerifierTe
protected File getSiteFile( String moduleName, String fileName )
{
- File targetDir = getSubFile(moduleName + "/target/site" );
+ File targetDir = getSubFile( moduleName + "/target/site" );
return new File( targetDir, fileName );
}
@@ -355,7 +359,8 @@ public abstract class SurefireVerifierTe
}
catch ( InvalidVersionSpecificationException e )
{
- throw (RuntimeException) new IllegalArgumentException( "Invalid version range: " + versionRangeStr ).initCause( e );
+ throw (RuntimeException) new IllegalArgumentException(
+ "Invalid version range: " + versionRangeStr ).initCause( e );
}
ArtifactVersion version = getMavenVersion();
Added: maven/surefire/trunk/surefire-integration-tests/src/test/resources/failsafe-buildfail/invoker.properties
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/resources/failsafe-buildfail/invoker.properties?rev=1097246&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/resources/failsafe-buildfail/invoker.properties (added)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/resources/failsafe-buildfail/invoker.properties Wed Apr 27 21:20:12 2011
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+invoker.buildResult=failure
Propchange: maven/surefire/trunk/surefire-integration-tests/src/test/resources/failsafe-buildfail/invoker.properties
------------------------------------------------------------------------------
svn:eol-style = native