2 * Copyright 2006 the original author or authors.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.wamblee.test;
18 import java.util.Arrays;
19 import java.util.Comparator;
20 import java.util.Iterator;
21 import java.util.List;
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
28 import junit.framework.TestCase;
31 * Useful assertions for use in test cases.
33 * @author Erik Brakkee
35 public final class AssertionUtils {
37 private static final Log LOG = LogFactory.getLog(AssertionUtils.class);
40 * Disabled constructor.
43 private AssertionUtils() {
48 * Asserts that two object arrays are equal.
51 * Expected object array.
53 * Actual object array.
55 public static <T> void assertEquals(T[] aExpected, T[] aActual) {
56 assertEquals("", aExpected, aActual);
61 * Asserts that two object arrays are equal.
70 public static <T> void assertEquals(String aMsg, T[] aExpected,
72 TestCase.assertEquals(aMsg + " expected " +
73 Arrays.asList(aExpected) + ", actual " +
74 Arrays.asList(aActual) + ": Array lengths ", aExpected.length,
77 for (int i = 0; i < aExpected.length; i++) {
78 TestCase.assertEquals(aMsg + ": Element " + i, aExpected[i],
85 * Asserts that two objects are equal, and in case the object is an Object[]
86 * delegates to {@link #assertEquals(String, Object[], Object[]).
95 public static <T> void assertEquals(String aMsg, T aExpected,
97 if (aExpected instanceof Object[]) {
98 AssertionUtils.assertEquals(aMsg, (Object[]) aExpected,
104 TestCase.assertEquals(aMsg, aExpected, aActual);
108 * Asserts that two maps are equal by comparing all keys and by checking
109 * that the values for the same keys are the same.
113 * @param aExpectedMap
118 public static <Key,Value> void assertEquals(String aMsg,
119 Map<Key,Value> aExpectedMap, Map<Key,Value> aActual) {
120 TestCase.assertEquals("Map sizes differ", aExpectedMap.size(), aActual
123 Set keys = aExpectedMap.keySet();
125 for (Iterator i = keys.iterator(); i.hasNext();) {
126 String key = (String) i.next();
127 TestCase.assertTrue("Map does not containg entry for key:" + key,
128 aActual.containsKey(key));
129 AssertionUtils.assertEquals("Value of key " + key + " of map",
130 aExpectedMap.get(key), aActual.get(key));
134 public static interface ErroneousCode {
135 void run() throws Exception;
139 * Asserts that an exception occurs.
140 * @param aRunnable Test cases should create a subclass of this which contains the
141 * code that should throw an exception.
142 * @param aType Type of exception that is expected.
144 public static void assertException(ErroneousCode aObject, Class aType) {
147 throw new RuntimeException("No exception occurred");
148 } catch (Throwable t) {
149 if ( aType.isInstance(t)) {
150 LOG.info("Expected exception occured " + t.getMessage());
154 throw new RuntimeException(t);