/* * Copyright 2006 the original author or authors. * * 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. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wamblee.test; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import junit.framework.TestCase; /** * Useful assertions for use in test cases. * * @author Erik Brakkee */ public final class AssertionUtils { /** * Disabled constructor. * */ private AssertionUtils() { // Empty } /** * Asserts that two collections are equal including equality of the elements. * @param aExpected * @param aActual */ public static void assertEquals(List aExpected, List aActual) { assertEquals(aExpected.toArray(), aActual.toArray()); } /** * Asserts that two collections are equal including equality of the elements. * @param aMsg * @param aExpected * @param aActual */ public static void assertEquals(String aMsg, List aExpected, List aActual) { assertEquals(aMsg, aExpected.toArray(), aActual.toArray()); } /** * Asserts that two object arrays are equal. * * @param aExpected * Expected object array. * @param aActual * Actual object array. */ public static void assertEquals(Object[] aExpected, Object[] aActual) { assertEquals("", aExpected, aActual); } /** * Asserts that two object arrays are equal. * * @param aMsg * Message. * @param aExpected * Expected array. * @param aActual * Actual array. */ public static void assertEquals(String aMsg, Object[] aExpected, Object[] aActual) { TestCase.assertEquals(aMsg + ": Array lengths ", aExpected.length, aActual.length); for (int i = 0; i < aExpected.length; i++) { TestCase.assertEquals(aMsg + ": Element " + i, aExpected[i], aActual[i]); } } /** * Asserts that two objects are equal, and in case the object is an Object[] * delegates to {@link #assertEquals(String, Object[], Object[]). * * @param aMsg * Message. * @param aExpected * Expected result. * @param aActual * Actual result. */ public static void assertEquals(String aMsg, Object aExpected, Object aActual) { if (aExpected instanceof Object[]) { AssertionUtils.assertEquals(aMsg, (Object[]) aExpected, (Object[]) aActual); return; } TestCase.assertEquals(aMsg, aExpected, aActual); } /** * Asserts that two maps are equal by comparing all keys and by checking * that the values for the same keys are the same. * * @param aMsg * Message. * @param aExpectedMap * Expected result. * @param aActual * Actual result. */ public static void assertEquals(String aMsg, Map aExpectedMap, Map aActual) { TestCase.assertEquals("Map sizes differ", aExpectedMap.size(), aActual .size()); Set keys = aExpectedMap.keySet(); for (Iterator i = keys.iterator(); i.hasNext();) { String key = (String) i.next(); TestCase.assertTrue("Map does not containg entry for key:" + key, aActual.containsKey(key)); AssertionUtils.assertEquals("Value of key " + key + " of map", 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(); } catch (Throwable t) { if ( aType.isInstance(t)) { return; // ok } else { throw new RuntimeException(t); } } } }