1 16 package org.apache.commons.jelly.tags.junit; 17 18 import org.apache.commons.jelly.JellyException; 19 import org.apache.commons.jelly.JellyTagException; 20 import org.apache.commons.jelly.XMLOutput; 21 import org.apache.commons.jelly.util.ClassLoaderUtils; 22 import org.apache.commons.logging.Log; 23 import org.apache.commons.logging.LogFactory; 24 25 34 public class AssertThrowsTag extends AssertTagSupport { 35 36 37 private static final Log log = LogFactory.getLog(AssertThrowsTag.class); 38 39 42 private String var; 43 44 48 private String expected; 49 50 53 private ClassLoader classLoader; 54 55 public void doTag(XMLOutput output) throws JellyTagException { 58 Class throwableClass = null; 59 try { 60 throwableClass = getThrowableClass(); 61 invokeBody(output); 62 } 63 catch (Throwable t) { 64 if (t instanceof JellyException) { 65 JellyException je = (JellyException) t; 67 if (je.getCause() != null) { 68 t = je.getCause(); 69 } 70 } 71 if (var != null) { 72 context.setVariable(var, t); 73 } 74 if (throwableClass != null && !throwableClass.isAssignableFrom(t.getClass())) { 75 fail("Unexpected exception: " + t); 76 } 77 else { 78 return; 79 } 80 } 81 fail("No exception was thrown."); 82 } 83 84 92 public void setExpected(String expected) { 93 this.expected = expected; 94 } 95 96 99 public void setVar(String var) { 100 this.var = var; 101 } 102 103 106 public void setClassLoader(ClassLoader classLoader) { 107 this.classLoader = classLoader; 108 } 109 110 public ClassLoader getClassLoader() { 111 return ClassLoaderUtils.getClassLoader(classLoader, getClass()); 112 } 113 114 117 127 protected Class getThrowableClass() throws ClassNotFoundException { 128 if (expected == null) { 129 return Throwable .class; 130 } 131 132 Class throwableClass = null; 133 try { 134 throwableClass = getClassLoader().loadClass(expected); 135 } 136 catch (ClassNotFoundException e) { 137 try { 138 throwableClass = Thread.currentThread().getContextClassLoader().loadClass(expected); 139 } 140 catch (ClassNotFoundException e2) { 141 log.warn( "Could not find exception class: " + expected ); 142 throw e; 143 } 144 } 145 146 if (!Throwable .class.isAssignableFrom(throwableClass)) { 147 log.warn( "The class: " + expected + " is not an Exception class."); 148 return null; 149 } 150 return throwableClass; 151 } 152 } 153 | Popular Tags |