Added an unchecked exception that I find useful for marking code that the developer thinks will not cause an exception.
Added JUnit unit tests for this new exception.
This commit is contained in:
parent
bd6dc4c329
commit
955c46a7eb
3 changed files with 256 additions and 0 deletions
42
source/org/thdl/util/AllTests.java
Normal file
42
source/org/thdl/util/AllTests.java
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
The contents of this file are subject to the THDL Open Community License
|
||||||
|
Version 1.0 (the "License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License on the THDL web site
|
||||||
|
(http://www.thdl.org/).
|
||||||
|
|
||||||
|
Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific terms governing rights and limitations under the
|
||||||
|
License.
|
||||||
|
|
||||||
|
The Initial Developer of this software is the Tibetan and Himalayan Digital
|
||||||
|
Library (THDL). Portions created by the THDL are Copyright 2001 THDL.
|
||||||
|
All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s): ______________________________________.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.thdl.util;
|
||||||
|
|
||||||
|
import junit.framework.Test;
|
||||||
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author David Chandler
|
||||||
|
*
|
||||||
|
* Runs all JUnit test cases in this package.
|
||||||
|
*/
|
||||||
|
public class AllTests {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
junit.textui.TestRunner.run(AllTests.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Test suite() {
|
||||||
|
TestSuite suite = new TestSuite("Test for org.thdl.util");
|
||||||
|
//$JUnit-BEGIN$
|
||||||
|
suite.addTest(new TestSuite(ThdlLazyExceptionTest.class));
|
||||||
|
//$JUnit-END$
|
||||||
|
return suite;
|
||||||
|
}
|
||||||
|
}
|
94
source/org/thdl/util/ThdlLazyException.java
Normal file
94
source/org/thdl/util/ThdlLazyException.java
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
/*
|
||||||
|
The contents of this file are subject to the THDL Open Community License
|
||||||
|
Version 1.0 (the "License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License on the THDL web site
|
||||||
|
(http://www.thdl.org/).
|
||||||
|
|
||||||
|
Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific terms governing rights and limitations under the
|
||||||
|
License.
|
||||||
|
|
||||||
|
The Initial Developer of this software is the Tibetan and Himalayan Digital
|
||||||
|
Library (THDL). Portions created by the THDL are Copyright 2001 THDL.
|
||||||
|
All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s): ______________________________________.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.thdl.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author David Chandler
|
||||||
|
*
|
||||||
|
* <p>A ThdlLazyException wraps a "real" java.lang.Exception.
|
||||||
|
* ThdlLazyException, however, is unchecked. Thus, if you want
|
||||||
|
* to be a lazy Java programmer, you can use this idiom:</p>
|
||||||
|
* <pre>
|
||||||
|
* // Note that bleh does not throw any checked exceptions:
|
||||||
|
* public static void bleh() {
|
||||||
|
* try {
|
||||||
|
* Foo.bar();
|
||||||
|
* } catch (Throwable t) {
|
||||||
|
* // Nah, this'll never happen!
|
||||||
|
* throw new ThdlLazyException(e);
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* <p>Now your code appears to be well written, and no one but the user
|
||||||
|
* will ever know the difference.</p>
|
||||||
|
*
|
||||||
|
* <p>In Java 1.4 (1.3?), Sun introduced constructors for java.lang.Error that
|
||||||
|
* allow much the same thing. This code is Java 1 compatible, though, and
|
||||||
|
* is also a red flag, equivalent to a // FIXME comment.</p>
|
||||||
|
*/
|
||||||
|
public final class ThdlLazyException extends Error {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the wrapped exception
|
||||||
|
*/
|
||||||
|
private Throwable wrappedException = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for ThdlLazyException.
|
||||||
|
*/
|
||||||
|
public ThdlLazyException() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for ThdlLazyException.
|
||||||
|
* @param descrip description
|
||||||
|
*/
|
||||||
|
public ThdlLazyException(String descrip) {
|
||||||
|
super(descrip);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for ThdlLazyException.
|
||||||
|
* @param descrip description
|
||||||
|
* @param realException the exception the user should actually care about
|
||||||
|
*/
|
||||||
|
public ThdlLazyException(String descrip, Throwable realException) {
|
||||||
|
super(descrip);
|
||||||
|
wrappedException = realException;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for ThdlLazyException.
|
||||||
|
* @param realException the exception the user should actually care about
|
||||||
|
*/
|
||||||
|
public ThdlLazyException(Throwable realException) {
|
||||||
|
super();
|
||||||
|
wrappedException = realException;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the wrapped exception, the one about which you should actually
|
||||||
|
* be concerned.
|
||||||
|
*/
|
||||||
|
public Throwable getRealException() {
|
||||||
|
return wrappedException;
|
||||||
|
}
|
||||||
|
}
|
120
source/org/thdl/util/ThdlLazyExceptionTest.java
Normal file
120
source/org/thdl/util/ThdlLazyExceptionTest.java
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
/*
|
||||||
|
The contents of this file are subject to the THDL Open Community License
|
||||||
|
Version 1.0 (the "License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License on the THDL web site
|
||||||
|
(http://www.thdl.org/).
|
||||||
|
|
||||||
|
Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific terms governing rights and limitations under the
|
||||||
|
License.
|
||||||
|
|
||||||
|
The Initial Developer of this software is the Tibetan and Himalayan Digital
|
||||||
|
Library (THDL). Portions created by the THDL are Copyright 2001 THDL.
|
||||||
|
All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s): ______________________________________.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.thdl.util;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import java.io.IOException; /* a checked exception */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author David Chandler
|
||||||
|
*
|
||||||
|
* Tests the ThdlLazyException class.
|
||||||
|
*/
|
||||||
|
public class ThdlLazyExceptionTest extends TestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A helper class that has methods that throw both
|
||||||
|
* checked and unchecked exceptions.
|
||||||
|
*/
|
||||||
|
private class Helper {
|
||||||
|
Helper() { }
|
||||||
|
void throwChecked() throws IOException {
|
||||||
|
throw new java.io.IOException("sure");
|
||||||
|
}
|
||||||
|
void saysItThrowsNothing() {
|
||||||
|
try {
|
||||||
|
throwChecked();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ThdlLazyException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Helper helper;
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
helper = new Helper();
|
||||||
|
}
|
||||||
|
protected void tearDown() throws Exception {
|
||||||
|
helper = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for ThdlLazyExceptionTest.
|
||||||
|
* @param arg0
|
||||||
|
*/
|
||||||
|
public ThdlLazyExceptionTest(String arg0) {
|
||||||
|
super(arg0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
junit.textui.TestRunner.run(ThdlLazyExceptionTest.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test for void ThdlLazyException()
|
||||||
|
*/
|
||||||
|
public void testThdlLazyException() {
|
||||||
|
Helper x = new Helper();
|
||||||
|
try {
|
||||||
|
x.saysItThrowsNothing();
|
||||||
|
fail("No exception was thrown.");
|
||||||
|
} catch (ThdlLazyException jle) {
|
||||||
|
/* good. */
|
||||||
|
assertTrue(jle.getRealException() instanceof IOException);
|
||||||
|
} /* don't catch anything else. */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test for void ThdlLazyException(String)
|
||||||
|
*/
|
||||||
|
public void testThdlLazyExceptionString() {
|
||||||
|
String msg = "foo";
|
||||||
|
ThdlLazyException e = new ThdlLazyException(msg);
|
||||||
|
assertTrue(msg.equals(e.getMessage()));
|
||||||
|
assertTrue(null == e.getRealException());
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test for void ThdlLazyException(String, Throwable)
|
||||||
|
*/
|
||||||
|
public void testThdlLazyExceptionStringThrowable() {
|
||||||
|
String msg = "foo";
|
||||||
|
IOException ioe = new IOException("bah");
|
||||||
|
ThdlLazyException e = new ThdlLazyException(msg, ioe);
|
||||||
|
assertTrue(msg.equals(e.getMessage()));
|
||||||
|
assertTrue(ioe.equals(e.getRealException()));
|
||||||
|
assertTrue("bah".equals(e.getRealException().getMessage()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test for void ThdlLazyException(Throwable)
|
||||||
|
*/
|
||||||
|
public void testThdlLazyExceptionThrowable() {
|
||||||
|
IOException ioe = new IOException("bah");
|
||||||
|
ThdlLazyException e = new ThdlLazyException(ioe);
|
||||||
|
assertTrue(ioe.equals(e.getRealException()));
|
||||||
|
assertTrue("bah".equals(e.getRealException().getMessage()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetRealException() {
|
||||||
|
testThdlLazyExceptionThrowable();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue