1 //$Id: ExceptionAsserter.java 209 2005-12-18 17:45:49Z jg_hamburg $ 2 /******************************************************************************** 3 * DDTUnit, a Datadriven Approach to Unit- and Moduletesting 4 * Copyright (c) 2004, Joerg and Kai Gellien 5 * All rights reserved. 6 * 7 * The Software is provided under the terms of the Common Public License 1.0 8 * as provided with the distribution of DDTUnit in the file cpl-v10.html. 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * + Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 16 * + Redistributions in binary form must reproduce the above 17 * copyright notice, this list of conditions and the following 18 * disclaimer in the documentation and/or other materials provided 19 * with the distribution. 20 * 21 * + Neither the name of the authors or DDTUnit, nor the 22 * names of its contributors may be used to endorse or promote 23 * products derived from this software without specific prior 24 * written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 27 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 28 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 29 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR 30 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 31 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 32 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 33 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 34 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 35 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 36 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 ********************************************************************************/ 38 package junitx.ddtunit.data; 39 40 import junit.framework.AssertionFailedError; 41 import junitx.ddtunit.DDTException; 42 import junitx.framework.ThrowableAssert; 43 44 /** 45 * @author jg 46 */ 47 public class ExceptionAsserter extends AssertObject { 48 49 /** 50 * defines equals action analogue to JUnit assertEquals 51 */ 52 public static final String EXCEPTION_ACTION_ISEQUAL = "ISEQUAL"; 53 54 /** 55 * defines equals action analogue to JUnit assertEquals 56 */ 57 public static final String EXCEPTION_ACTION_ISSIMILAR = "ISSIMILAR"; 58 59 /** 60 * defines equals action analogue to JUnit assertEquals 61 */ 62 public static final String EXCEPTION_ACTION_ISINSTANCEOF = "ISINSTANCEOF"; 63 64 /** 65 * @param assertId 66 * @param assertType 67 * @param exceptionAction 68 */ 69 public ExceptionAsserter(String exceptionId, String exceptionType, 70 String exceptionAction) { 71 super(exceptionId, exceptionType, exceptionAction); 72 } 73 74 /** 75 * validate internal expression. 76 * 77 * @param mark as processed if set to true, else multiple validation is 78 * possible. 79 * 80 * @see junitx.ddtunit.data.AssertObject#validate() 81 */ 82 public void validate(boolean mark) { 83 if (!this.actualObjectSet) { 84 throw new DDTException("Actual object for assertion not provided"); 85 } else if (EXCEPTION_ACTION_ISEQUAL.equals(this.action.toUpperCase())) { 86 this.markAsProcessed = mark; 87 ThrowableAssert.assertEquals("Unexpected exception", 88 (Throwable) getValue(), (Throwable) getActualObject()); 89 } else if (EXCEPTION_ACTION_ISSIMILAR.equals(this.action.toUpperCase())) { 90 this.markAsProcessed = mark; 91 ThrowableAssert.assertSimilar("Unexpected exception", 92 (Throwable) getValue(), (Throwable) getActualObject()); 93 } else if (EXCEPTION_ACTION_ISINSTANCEOF.equals(this.action 94 .toUpperCase())) { 95 this.markAsProcessed = mark; 96 try { 97 Class expectedClazz = Class.forName(this.getType()); 98 if (!expectedClazz.isInstance(this.getActualObject())) { 99 throw new AssertionFailedError( 100 "Unexpected exception: expected <" 101 + this.getType() + "> got <" 102 + this.getActualType() + ">"); 103 } 104 } catch (ClassNotFoundException ex) { 105 throw new DDTException( 106 "Error instanciating expected exception of type " 107 + this.getType(), ex); 108 } 109 } else { 110 throw new DDTException("Unsupported action " + this.action); 111 } 112 } 113 114 public Object clone() { 115 ExceptionAsserter newObj = new ExceptionAsserter(this.getId(), this 116 .getType(), this.getAction()); 117 newObj.setValue(this.getValue()); 118 return newObj; 119 } 120 121 }