(no commit message)
[utils] / support / general / src / test / java / org / wamblee / test / AssertionUtils.java
index 8d179db7ad1d488a9d53361c414b3adea6d1e5f8..a0216a8b994128fa314c69c9954580e9ed7e9180 100644 (file)
  */
 package org.wamblee.test;
 
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
 import junit.framework.TestCase;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 /**
  * Useful assertions for use in test cases.
  *
  * @author Erik Brakkee
  */
 public final class AssertionUtils {
+       
+       private static final Log LOG = LogFactory.getLog(AssertionUtils.class);
 
     /**
      * Disabled constructor.
@@ -35,7 +41,7 @@ public final class AssertionUtils {
     private AssertionUtils() {
         // Empty
     }
-
+    
     /**
      * Asserts that two object arrays are equal.
      * 
@@ -44,9 +50,10 @@ public final class AssertionUtils {
      * @param aActual
      *            Actual object array.
      */
-    public static void assertEquals(Object[] aExpected, Object[] aActual) {
+    public static <T> void assertEquals(T[] aExpected, T[] aActual) {
         assertEquals("", aExpected, aActual);
     }
+    
 
     /**
      * Asserts that two object arrays are equal.
@@ -58,9 +65,11 @@ public final class AssertionUtils {
      * @param aActual
      *            Actual array.
      */
-    public static void assertEquals(String aMsg, Object[] aExpected,
-            Object[] aActual) {
-        TestCase.assertEquals(aMsg + ": Array lengths ", aExpected.length,
+    public static <T> void assertEquals(String aMsg, T[] aExpected,
+            T[] aActual) {
+        TestCase.assertEquals(aMsg + " expected " + 
+                Arrays.asList(aExpected) + ", actual " + 
+                Arrays.asList(aActual) + ": Array lengths ", aExpected.length,
                 aActual.length);
 
         for (int i = 0; i < aExpected.length; i++) {
@@ -68,6 +77,7 @@ public final class AssertionUtils {
                     aActual[i]);
         }
     }
+    
 
     /**
      * Asserts that two objects are equal, and in case the object is an Object[]
@@ -80,8 +90,8 @@ public final class AssertionUtils {
      * @param aActual
      *            Actual result.
      */
-    public static void assertEquals(String aMsg, Object aExpected,
-            Object aActual) {
+    public static <T> void assertEquals(String aMsg, T aExpected,
+            T aActual) {
         if (aExpected instanceof Object[]) {
             AssertionUtils.assertEquals(aMsg, (Object[]) aExpected,
                     (Object[]) aActual);
@@ -103,7 +113,8 @@ public final class AssertionUtils {
      * @param aActual
      *            Actual result.
      */
-    public static void assertEquals(String aMsg, Map aExpectedMap, Map aActual) {
+    public static <Key,Value> void assertEquals(String aMsg, 
+            Map<Key,Value> aExpectedMap, Map<Key,Value> aActual) {
         TestCase.assertEquals("Map sizes differ", aExpectedMap.size(), aActual
                 .size());
 
@@ -117,4 +128,29 @@ public final class AssertionUtils {
                     aExpectedMap.get(key), aActual.get(key));
         }
     }
+   
+    public static interface ErroneousCode { 
+       void run() throws Exception; 
+    }
+    
+    /** 
+     * Asserts that an exception occurs.
+     * @param aRunnable Test cases should create a subclass of this which contains the 
+     * code that should throw an exception.   
+     * @param aType Type of exception that is expected.   
+     */
+    public static void assertException(ErroneousCode aObject, Class aType) { 
+       try { 
+               aObject.run();
+               throw new RuntimeException("No exception occurred");
+       } catch (Throwable t) { 
+               if ( aType.isInstance(t)) { 
+                       LOG.info("Expected exception occured " + t.getMessage());
+                       return; // ok 
+               }
+               else { 
+                       throw new RuntimeException(t);
+               }
+       }
+    }
 }