You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2011/07/08 19:15:22 UTC

svn commit: r1144388 - in /jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3: TestBase.java TestLock.java TestNodeTypeRegistry.java

Author: thomasm
Date: Fri Jul  8 17:15:22 2011
New Revision: 1144388

URL: http://svn.apache.org/viewvc?rev=1144388&view=rev
Log:
assertThrows(myObject).methodCall()

Modified:
    jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBase.java
    jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestLock.java
    jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNodeTypeRegistry.java

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBase.java?rev=1144388&r1=1144387&r2=1144388&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBase.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBase.java Fri Jul  8 17:15:22 2011
@@ -17,6 +17,10 @@
 package org.apache.jackrabbit.j3;
 
 import java.io.File;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
 import java.util.HashMap;
 import java.util.Map;
 import javax.jcr.LoginException;
@@ -88,4 +92,64 @@ public abstract class TestBase extends T
         return Integer.parseInt(System.getProperty("test.scale", "1"));
     }
 
+    protected <T> T assertThrows(final Class<?> exceptionClass, final T obj) {
+        return assertThrows(new Thread.UncaughtExceptionHandler() {
+            public void uncaughtException(Thread t, Throwable e) {
+                if (!exceptionClass.isAssignableFrom(e.getClass())) {
+                    e.printStackTrace();
+                    fail("Expected: " + exceptionClass + ", got: " + e);
+                }
+            }
+        }, exceptionClass.toString(), obj);
+    }
+
+    @SuppressWarnings("unchecked")
+    protected
+    <T> T assertThrows(final Thread.UncaughtExceptionHandler handler, final String expected, final T obj) {
+        Class<?> c = obj.getClass();
+        return (T) Proxy.newProxyInstance(c.getClassLoader(),
+                c.getInterfaces(), new InvocationHandler() {
+            private Exception called = new Exception("No method called");
+            public void finalize() {
+                if (called != null) {
+                    called.printStackTrace(System.err);
+                }
+            }
+            public Object invoke(Object proxy, Method method, Object[] args) throws Exception {
+                try {
+                    called = null;
+                    Object ret = method.invoke(obj, args);
+                    fail(method.getDeclaringClass().getName() + "." + method.getName() +
+                            " did not throw an exception of type " + expected +
+                            ", but returned " + ret);
+                    return ret;
+                } catch (InvocationTargetException e) {
+                    handler.uncaughtException(null, e.getTargetException());
+                    Class<?> retClass = method.getReturnType();
+                    if (!retClass.isPrimitive()) {
+                        return null;
+                    }
+                    if (retClass == boolean.class) {
+                        return false;
+                    } else if (retClass == byte.class) {
+                        return (byte) 0;
+                    } else if (retClass == char.class) {
+                        return (char) 0;
+                    } else if (retClass == short.class) {
+                        return (short) 0;
+                    } else if (retClass == int.class) {
+                        return 0;
+                    } else if (retClass == long.class) {
+                        return 0L;
+                    } else if (retClass == float.class) {
+                        return 0F;
+                    } else if (retClass == double.class) {
+                        return 0D;
+                    }
+                    return null;
+                }
+            }
+        });
+    }
+
 }

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestLock.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestLock.java?rev=1144388&r1=1144387&r2=1144388&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestLock.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestLock.java Fri Jul  8 17:15:22 2011
@@ -34,14 +34,8 @@ public class TestLock extends TestBase {
         lockManager.lock("/testLock", false, false, 0, "test");
         Session session2 = openSession();
         Node n2 = session2.getNode("/testLock");
-        try {
-            n2.addNode("test");
-            fail();
-        } catch (LockException e) {
-            // expected
-        }
+        assertThrows(LockException.class, n2).addNode("test");
         session2.logout();
-
         n.remove();
         session.save();
     }

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNodeTypeRegistry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNodeTypeRegistry.java?rev=1144388&r1=1144387&r2=1144388&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNodeTypeRegistry.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNodeTypeRegistry.java Fri Jul  8 17:15:22 2011
@@ -31,12 +31,7 @@ public class TestNodeTypeRegistry extend
 
     public void testUndefineBuiltIn() throws RepositoryException {
         NodeTypeManager m = session.getWorkspace().getNodeTypeManager();
-        try {
-            m.unregisterNodeType("nt:base");
-            fail();
-        } catch (RepositoryException e) {
-            // expected
-        }
+        assertThrows(RepositoryException.class, m).unregisterNodeType("nt:base");
     }
 
     public void testCndParser() throws Exception {