Support Throwables in expectException()

Also fixed some bugs in the junit tests.
Renamed expectException() to assertThrows().
Added test cases.

Change-Id: I13dff0007e35c2d2521a4ca40bb65e6820416ed1
Issue-ID: POLICY-1148
Signed-off-by: Jim Hahn <jrh3@att.com>
diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/test/PolicyAssert.java b/utils-test/src/main/java/org/onap/policy/common/utils/test/PolicyAssert.java
index fdd098f..43bb779 100644
--- a/utils-test/src/main/java/org/onap/policy/common/utils/test/PolicyAssert.java
+++ b/utils-test/src/main/java/org/onap/policy/common/utils/test/PolicyAssert.java
@@ -34,21 +34,24 @@
      *
      * @param clazz class of exception that is expected
      * @param func function
-     * @return object
+     * @return the exception that was thrown
+     * @throws AssertionError if the function does not throw an exception or throws the
+     *         wrong type of exception
      */
-    public static <T> T assertException(Class<T> clazz, RunnableWithEx func) {
+    public static <T extends Throwable> T assertThrows(Class<T> clazz, RunnableWithEx func) {
         try {
             func.run();
-            throw new AssertionError("missing exception");
 
-        } catch (Exception e) {
+        } catch (Throwable thrown) {
             try {
-                return clazz.cast(e);
+                return clazz.cast(thrown);
 
-            } catch (ClassCastException e2) {
-                throw new AssertionError("incorrect exception type", e2);
+            } catch (ClassCastException thrown2) {
+                throw new AssertionError("incorrect exception type", thrown2);
             }
         }
+
+        throw new AssertionError("missing exception");
     }
 
     /**
@@ -56,6 +59,6 @@
      */
     @FunctionalInterface
     public static interface RunnableWithEx {
-        public void run() throws Exception;
+        public void run() throws Throwable;
     }
 }
diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/test/PolicyAssertTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/test/PolicyAssertTest.java
index 2831905..f41d7b3 100644
--- a/utils-test/src/test/java/org/onap/policy/common/utils/test/PolicyAssertTest.java
+++ b/utils-test/src/test/java/org/onap/policy/common/utils/test/PolicyAssertTest.java
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -22,7 +22,7 @@
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.onap.policy.common.utils.test.PolicyAssert.assertException;
+import static org.onap.policy.common.utils.test.PolicyAssert.assertThrows;
 
 import org.junit.Test;
 
@@ -32,36 +32,54 @@
 
     @Test
     public void test_ExpectedEx() {
-        assertException(IllegalArgumentException.class, () -> {
+        // exact type
+        assertThrows(IllegalArgumentException.class, () -> {
             throw new IllegalArgumentException(EXPECTED);
         });
+
+        // cast to superclass is supported
+        assertThrows(RuntimeException.class, () -> {
+            throw new IllegalArgumentException(EXPECTED);
+        });
+
+        // supports errors
+        assertThrows(LinkageError.class, () -> {
+            throw new LinkageError(EXPECTED);
+        });
+
+        // supports any throwable
+        assertThrows(Throwable.class, () -> {
+            throw new Throwable(EXPECTED);
+        });
     }
 
     @Test
     public void test_IncorrectEx() {
         try {
-            assertException(IllegalStateException.class, () -> {
+            assertThrows(IllegalStateException.class, () -> {
                 throw new IllegalArgumentException(EXPECTED);
             });
 
-            fail("incorrect exception type");
-
         } catch (AssertionError err) {
             assertTrue(err.getMessage().contains("incorrect exception type"));
+            return;
         }
+
+        fail("test failed for incorrect exception type");
     }
 
     @Test
     public void test_MissingEx() {
         try {
-            assertException(IllegalArgumentException.class, () -> {
+            assertThrows(IllegalArgumentException.class, () -> {
             });
 
-            fail("missing exception");
-
         } catch (AssertionError err) {
             assertTrue(err.getMessage().contains("missing exception"));
+            return;
         }
+
+        fail("test failed for missing exception");
     }
 
 }