-----Original Message-----
From: Stephen Connolly [mailto:stephen.alan.conno...@gmail.com]
Sent: Wednesday, August 03, 2011 3:22 PM
To: dev@maven.apache.org
Cc: comm...@maven.apache.org
Subject: Re: svn commit: r1153562 - in /maven/sandbox/trunk/plexus-
utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util: ExceptionUtilsTest.java
exceptionutils/TestExceptionWithDetail.java
fyi, you may have a little inefficiency when you have an expected
exception.
@Test(expected=...)
public void dosomethingblowsup() throws Exception {
dosomething();
}
is better than
@Test
public void dosomethingblowsup() throws Exception {
try {
dosomething();
fail();
} catch (...) {
// expected
}
}
unless you have further asserts to make on the expected exception.
- Stephen
---
Sent from my Android phone, so random spelling mistakes, random
nonsense
words and other nonsense are a direct result of using swype to type on
the
screen
On 3 Aug 2011 17:16,<strub...@apache.org> wrote:
Author: struberg
Date: Wed Aug 3 16:16:23 2011
New Revision: 1153562
URL: http://svn.apache.org/viewvc?rev=1153562&view=rev
Log:
refine ExceptionUtilsTest
almost done now!
Added:
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
WithDetail.java
- copied, changed from r1153297,
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
.java
Modified:
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java
Modified:
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plexus-utils-commons-
bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java?rev=
1153562&r1=1153561&r2=1153562&view=diff
=======================================================================
=======
---
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java
(original)
+++
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java
Wed Aug 3 16:16:23 2011
@@ -21,11 +21,14 @@ package org.codehaus.plexus.util;
import org.apache.maven.tck.FixPlexusBugs;
import org.codehaus.plexus.util.exceptionutils.TestException;
+import
org.codehaus.plexus.util.exceptionutils.TestExceptionWithDetail;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Assert;
import org.junit.matchers.JUnitMatchers;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.List;
@@ -245,7 +248,7 @@ public class ExceptionUtilsTest extends
// NPE safe test
try
{
- ExceptionUtils.getStackTrace( (Throwable) null );
+ ExceptionUtils.getStackTrace((Throwable) null);
fail( "getStackTrace(null) NPE expected" );
}
catch ( NullPointerException e )
@@ -274,7 +277,7 @@ public class ExceptionUtilsTest extends
// NPE safe test
try
{
- ExceptionUtils.getStackFrames( (Throwable) null );
+ ExceptionUtils.getStackFrames((Throwable) null);
fail( "getStackFrames(null) NPE expected" );
}
catch ( NullPointerException e )
@@ -315,7 +318,7 @@ public class ExceptionUtilsTest extends
String[] stackFrames = ExceptionUtils.getStackFrames( stackTrace );
assertNotNull( stackFrames );
- assertEquals( 23, stackFrames.length );
+ assertEquals(23, stackFrames.length);
assertEquals( "java.lang.NullPointerException: mymessage",
stackFrames[0]
);
assertThat( "stackFrames", stackFrames[1]
@@ -339,8 +342,26 @@ public class ExceptionUtilsTest extends
@Test
public void testGetThrowableCount()
{
- //X TODO refine test!
- logger.warning("TODO implement!");
+ NullPointerException npe = new NullPointerException( "dooh just a
random, nullpointer" );
+ SQLException sqlException = new SQLException( npe );
+ TestException testException = new TestException();
+ testException.setSourceException( sqlException );
+
+ assertThat( "getThrowableCount"
+ , ExceptionUtils.getThrowableCount( npe )
+ , is( 1 ));
+
+ assertThat( "getThrowableCount"
+ , ExceptionUtils.getThrowableCount( sqlException )
+ , is( 2 ));
+
+ assertThat( "getThrowableCount"
+ , ExceptionUtils.getThrowableCount( testException )
+ , is( 3 ));
+
+ // NPE safe test
+ // this method should NOT throw a NPE on a null argument!
+ ExceptionUtils.getThrowableCount( null );
}
/**
@@ -350,18 +371,109 @@ public class ExceptionUtilsTest extends
@Test
public void testIndexOfThrowable()
{
- //X TODO refine test!
- logger.warning("TODO implement!");
+ NullPointerException npe = new NullPointerException( "dooh just a
random, nullpointer" );
+ SQLException sqlException = new SQLException( npe );
+ TestException testException = new TestException();
+ testException.setSourceException( sqlException );
+
+ assertThat("indexOfThrowable"
+ , ExceptionUtils.indexOfThrowable(npe, NullPointerException.class)
+ , is(0));
+
+ assertThat( "indexOfThrowable for non contained Exception type"
+ , ExceptionUtils.indexOfThrowable( npe, SQLException.class )
+ , is( -1 ));
+
+
+ assertThat( "indexOfThrowable"
+ , ExceptionUtils.indexOfThrowable( testException,
NullPointerException.class )
+ , is( 2 ));
+
+ assertThat( "indexOfThrowable for non contained Exception type"
+ , ExceptionUtils.indexOfThrowable( testException,
SQLException.class )
+ , is( 1 ));
+
+ assertThat( "indexOfThrowable"
+ , ExceptionUtils.indexOfThrowable( testException,
TestException.class )
+ , is( 0 ));
+
+
+ // tests for indexOfThrowable with start index param
+ assertThat( "indexOfThrowable"
+ , ExceptionUtils.indexOfThrowable( testException,
NullPointerException.class, 2 )
+ , is( 2 ));
+
+ assertThat( "indexOfThrowable"
+ , ExceptionUtils.indexOfThrowable( testException,
SQLException.class, 2
)
+ , is( -1 ));
+
+ try
+ {
+ ExceptionUtils.indexOfThrowable( testException,
TestException.class, 3
);
+ fail( "indexOfThrowable with too large inces" );
+ }
+ catch ( IndexOutOfBoundsException e )
+ {
+ //nothing to do, Exception was expected
+ }
+
+ // NPE safe tests
+ try
+ {
+ ExceptionUtils.indexOfThrowable( null, TestException.class );
+ fail( "indexOfThrowable(null, Exception.class) NPE expected" );
+ }
+ catch ( IndexOutOfBoundsException e )
+ {
+ //nothing to do, Exception was expected
+ }
+ assertThat( "indexOfThrowable for null Exception type"
+ , ExceptionUtils.indexOfThrowable(npe, null)
+ , is(-1));
}
/**
+ * Most probably this only ever returns false on null in JDK> 1.4
+ * Because Throwable itself nowadays has a getCause() method which
+ * is in the method list...
+ *
* @see ExceptionUtils#isNestedThrowable(Throwable)
*/
@Test
public void testIsNestedThrowable()
{
- //X TODO refine test!
- logger.warning("TODO implement!");
+ NullPointerException npe = new NullPointerException( "dooh just a
random, nullpointer" );
+ SQLException sqlException = new SQLException( npe );
+ TestException testException = new TestException();
+ testException.setSourceException( sqlException );
+
+ assertThat( "isNestedThrowable"
+ , ExceptionUtils.isNestedThrowable( null )
+ , is( false ) );
+
+ assertThat("isNestedThrowable"
+ , ExceptionUtils.isNestedThrowable(npe)
+ , is(true));
+
+ assertThat( "isNestedThrowable"
+ , ExceptionUtils.isNestedThrowable( sqlException )
+ , is( true ) );
+
+ assertThat( "isNestedThrowable"
+ , ExceptionUtils.isNestedThrowable( new InvocationTargetException(
npe )
)
+ , is( true ) );
+
+ assertThat( "isNestedThrowable"
+ , ExceptionUtils.isNestedThrowable( new TestExceptionWithDetail() )
+ , is( true ) );
+
+ assertThat( "isNestedThrowable"
+ , ExceptionUtils.isNestedThrowable( new Exception() )
+ , is( true ) );
+
+ assertThat( "isNestedThrowable"
+ , ExceptionUtils.isNestedThrowable( new Throwable() )
+ , is( true ) );
}
/**
@@ -372,8 +484,32 @@ public class ExceptionUtilsTest extends
@Test
public void testPrintRootCauseStackTrace()
{
- //X TODO refine test!
- logger.warning("TODO implement!");
+ NullPointerException npe = new NullPointerException( "dooh just a
random, nullpointer" );
+ SQLException sqlException = new SQLException( npe );
+ TestException testException = new TestException();
+ testException.setSourceException( sqlException );
+
+ ByteArrayOutputStream bao = new ByteArrayOutputStream();
+ PrintStream outStream = new PrintStream( bao );
+ PrintStream originalErr = System.err;
+
+ try
+ {
+ System.setErr( outStream );
+ ExceptionUtils.printRootCauseStackTrace( npe );
+
+ assertThat( "stackFrames"
+ , bao.toString()
+ , JUnitMatchers.containsString( "java.lang.NullPointerException:
dooh
just a random, nullpointer"
+ + "\n\tat org.codehaus.plexus.util.ExceptionUtilsTest."
+ + "testPrintRootCauseStackTrace(ExceptionUtilsTest.java:" ) );
+ }
+ finally
+ {
+ System.setErr( originalErr );
+ }
+
+ //X TODO A FEW THINGS STILL MISSING! will continue later today...
}
}
Copied:
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
WithDetail.java
(from r1153297,
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
.java)
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plexus-utils-commons-
bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
WithDetail.java?p2=maven/sandbox/trunk/plexus-utils-commons-
bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
WithDetail.java&p1=maven/sandbox/trunk/plexus-utils-commons-
bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
.java&r1=1153297&r2=1153562&rev=1153562&view=diff
=======================================================================
=======
---
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
.java
(original)
+++
maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
WithDetail.java
Wed Aug 3 16:16:23 2011
@@ -23,36 +23,26 @@ package org.codehaus.plexus.util.excepti
/**
+ * This test exception has a 'detail' field.
*
* @author<a href="mailto:strub...@yahoo.de">Mark Struberg</a>
*/
-public class TestException extends Exception
+public class TestExceptionWithDetail extends Exception
{
- private Throwable cause;
- private Throwable specialCause;
+ private Throwable detail;
- public TestException()
+ public TestExceptionWithDetail()
{
super();
}
- public void setSourceException( Throwable cause )
+ public Throwable getDetail()
{
- this.cause = cause;
+ return detail;
}
- public Throwable getSourceException()
+ public void setDetail( Throwable detail )
{
- return cause;
- }
-
- public Throwable getSpecialCause()
- {
- return specialCause;
- }
-
- public void setSpecialCause( Throwable specialCause )
- {
- this.specialCause = specialCause;
+ this.detail = detail;
}
}