1 /* 2 * The JUnit-addons Software License, Version 1.0 3 * (based on the Apache Software License, Version 1.1) 4 * 5 * Copyright (c) 2002-2003 Vladimir R. Bossicard. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in 16 * the documentation and/or other materials provided with the 17 * distribution. 18 * 19 * 3. The end-user documentation included with the redistribution, if 20 * any, must include the following acknowlegement: 21 * "This product includes software developed by Vladimir R. 22 * Bossicard as well as other contributors 23 * (http://junit-addons.sourceforge.net/)." 24 * Alternately, this acknowlegement may appear in the software itself, 25 * if and wherever such third-party acknowlegements normally appear. 26 * 27 * 4. The name "JUnit-addons" must not be used to endorse or promote 28 * products derived from this software without prior written 29 * permission. For written permission, please contact 30 * vbossica@users.sourceforge.net. 31 * 32 * 5. Products derived from this software may not be called "JUnit-addons" 33 * nor may "JUnit-addons" appear in their names without prior written 34 * permission of the project managers. 35 * 36 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 37 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 39 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 43 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 44 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 45 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 46 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 47 * SUCH DAMAGE. 48 * ====================================================================== 49 * 50 * This software consists of voluntary contributions made by many 51 * individuals. For more information on the JUnit-addons Project, please 52 * see <http://junit-addons.sourceforge.net/>. 53 */ 54 55 package junitx.framework; 56 57 import java.io.PrintStream; 58 import java.io.PrintWriter; 59 60 /** 61 * Similar to the official class but supports chained exceptions. 62 * 63 * <h4>Usage</h4> 64 * To use this new class, you'll have to invoke the <tt>fail</tt> method of the 65 * <tt>junitx.framework.Assert</tt> class: 66 * 67 * <pre> 68 * junitx.framework.Assert.fail(exception); 69 * </pre> 70 * 71 * @version $Revision: 1.1 $ $Date: 2003/03/21 06:13:48 $ 72 * @author <a href="mailto:vbossica@users.sourceforge.net">Vladimir R. Bossicard</a> 73 */ 74 public class AssertionFailedError extends junit.framework.AssertionFailedError { 75 76 private Throwable cause; 77 78 /** 79 * Constructs a new throwable with the specified cause and a detail message 80 * of <tt>(cause==null ? null : cause.toString())</tt> (which typically 81 * contains the class and detail message of <tt>cause</tt>).<p> 82 * 83 * @param cause the cause (which is saved for later retrieval by the 84 * getCause() method). (A null value is permitted, and indicates that the 85 * cause is nonexistent or unknown.) 86 */ 87 public AssertionFailedError(Throwable cause) { 88 this(cause == null ? null : cause.toString(), cause); 89 } 90 91 /** 92 * Constructs a new throwable with the specified detail message and cause. 93 * 94 * Note that the detail message associated with cause is not automatically 95 * incorporated in this throwable's detail message. 96 * 97 * @param message the detail message (which is saved for later retrieval by 98 * the getMessage() method). 99 * @param cause the cause (which is saved for later retrieval by the 100 * getCause() method). (A null value is permitted, and indicates that the 101 * cause is nonexistent or unknown.) 102 */ 103 public AssertionFailedError(String message, 104 Throwable cause) { 105 super(message); 106 this.cause = cause; 107 } 108 109 /** 110 * Returns the cause of this throwable or null if the cause is nonexistent 111 * or unknown. (The cause is the throwable that caused this throwable to get 112 * thrown.) 113 */ 114 public Throwable getCause() { 115 return cause; 116 } 117 118 /** 119 * Prints this throwable and its backtrace to the standard error stream. This 120 * method prints a stack trace for this Throwable object on the error output 121 * stream that is the value of the field System.err. The first line of output 122 * contains the result of the toString() method for this object. Remaining lines 123 * represent data previously recorded by the method fillInStackTrace(). 124 * 125 * @see java.lang.Throwable#printStackTrace() 126 */ 127 public void printStackTrace() { 128 printStackTrace(System.err); 129 } 130 131 /** 132 * Prints this throwable and its backtrace to the specified print stream. 133 * s - PrintStream to use for output 134 * @see java.lang.Throwable#printStackTrace(PrintStream) 135 */ 136 public void printStackTrace(PrintStream s) { 137 super.printStackTrace(s); 138 if (this.cause != null) { 139 s.print("Caused by: "); 140 this.cause.printStackTrace(s); 141 } 142 } 143 144 /** 145 * Prints this throwable and its backtrace to the specified print writer. 146 * 147 * @param s <tt>PrintWriter</tt> to use for output 148 * @see java.lang.Throwable#printStackTrace(PrintWriter) 149 */ 150 public void printStackTrace(PrintWriter s) { 151 super.printStackTrace(s); 152 if (this.cause != null) { 153 s.print("Caused by: "); 154 this.cause.printStackTrace(s); 155 } 156 } 157 158 }