|
Author: doogie
Date: Fri Dec 11 18:40:13 2009 New Revision: 889757 URL: http://svn.apache.org/viewvc?rev=889757&view=rev Log: Generic test case assertEquals methods, can be used as an extends, or statically. Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/test/GenericTestCaseBase.java Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/test/GenericTestCaseBase.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/test/GenericTestCaseBase.java?rev=889757&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/test/GenericTestCaseBase.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/test/GenericTestCaseBase.java Fri Dec 11 18:40:13 2009 @@ -0,0 +1,201 @@ +package org.ofbiz.base.test; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import junit.framework.TestCase; + +// This class can not use any other ofbiz helper methods, because it +// may be used to test those helper methods. +public abstract class GenericTestCaseBase extends TestCase { + protected GenericTestCaseBase(String name) { + super(name); + } + + public static <T> void assertEquals(List<T> wanted, Object got) { + assertEquals(null, wanted, got); + } + + public static <T> void assertEquals(String msg, List<T> wanted, Object got) { + msg = msg == null ? "" : msg + ' '; + assertNotNull(msg + "expected a value", got); + if (got.getClass().isArray()) { + assertEqualsListArray(msg, wanted, got); + return; + } + if (!(got instanceof Collection)) fail(msg + "expected a collection, got a " + got.getClass()); + Iterator<T> leftIt = wanted.iterator(); + Iterator rightIt = ((Collection) got).iterator(); + int i = 0; + while (leftIt.hasNext() && rightIt.hasNext()) { + T left = leftIt.next(); + Object right = rightIt.next(); + assertEquals(msg + "item " + i, left, right); + i++; + } + assertFalse(msg + "not enough items", leftIt.hasNext()); + assertFalse(msg + "too many items", rightIt.hasNext()); + } + + public static <T> void assertEquals(Collection<T> wanted, Object got) { + System.err.println("a"); + assertEquals(null, wanted, got); + } + + public static <T> void assertEquals(String msg, Collection<T> wanted, Object got) { + if (wanted instanceof List || wanted instanceof Set) { + // list.equals(list) and set.equals(set), see docs for Collection.equals + if (got instanceof Set) fail("Not a collection, is a set"); + if (got instanceof List) fail("Not a collection, is a list"); + } + if (wanted.equals(got)) return; + if (!(got instanceof Collection)) fail(msg + "not a collection"); + // Need to check the reverse, wanted may not implement equals, + // which is the case for HashMap.values() + if (got.equals(wanted)) return; + System.err.println("b:" + wanted.getClass()); + msg = msg == null ? "" : msg + ' '; + assertNotNull(msg + "expected a value", got); + List<T> list = new ArrayList<T>(wanted); + Iterator rightIt = ((Collection) got).iterator(); +OUTER: + while (rightIt.hasNext()) { + Object right = rightIt.next(); + for (int i = 0; i < list.size(); i++) { + T left = list.get(i); + if (left == null) { + if (right == null) { + list.remove(i); + continue OUTER; + } + } else if (left.equals(right)) { + list.remove(i); + continue OUTER; + } + } + fail(msg + "couldn't find " + right); + } + if (!list.isEmpty()) fail(msg + "not enough items: " + list); + } + + private static <T> void assertEqualsArrayArray(String msg, Object wanted, Object got) { + int i = 0; + while (i < Array.getLength(wanted) && i < Array.getLength(got)) { + Object left = Array.get(wanted, i); + Object right = Array.get(got, i); + assertEquals(msg + "item " + i, left, right); + i++; + } + assertFalse(msg + "not enough items", i < Array.getLength(wanted)); + assertFalse(msg + "too many items", i < Array.getLength(got)); + } + + private static <T> void assertEqualsArrayList(String msg, Object wanted, List<T> got) { + Iterator<T> rightIt = got.iterator(); + int i = 0; + while (i < Array.getLength(wanted) && rightIt.hasNext()) { + Object left = Array.get(wanted, i); + T right = rightIt.next(); + assertEquals(msg + "item " + i, left, right); + i++; + } + assertFalse(msg + "too enough items", i < Array.getLength(wanted)); + assertFalse(msg + "not many items", rightIt.hasNext()); + } + + private static <T> void assertEqualsListArray(String msg, List<T> wanted, Object got) { + Iterator<T> leftIt = wanted.iterator(); + int i = 0; + while (leftIt.hasNext() && i < Array.getLength(got)) { + T left = leftIt.next(); + Object right = Array.get(got, i); + assertEquals(msg + "item " + i, left, right); + i++; + } + assertFalse(msg + "not enough items", leftIt.hasNext()); + assertFalse(msg + "too many items", i < Array.getLength(got)); + } + + public static <T> void assertEquals(Map<T, ?> wanted, Object got) { + assertEquals(null, wanted, got); + } + + public static <T> void assertEquals(String msg, Map<T, ?> wanted, Object got) { + msg = msg == null ? "" : msg + ' '; + assertNotNull(msg + "expected a value", got); + if (!(got instanceof Map)) fail(msg + "expected a map"); + Map<?, ?> gotMap = (Map) got; + if (!got.equals(wanted)) { + Set<T> leftKeys = new LinkedHashSet<T>(wanted.keySet()); + HashSet<Object> rightKeys = new HashSet<Object>(gotMap.keySet()); + for(T key: leftKeys) { + assertTrue(msg + "got key(" + key + ")", rightKeys.remove(key)); + assertEquals(msg + "key(" + key + ") value", wanted.get(key), gotMap.get(key)); + } + assertTrue(msg + "extra entries", rightKeys.isEmpty()); + } + } + + public static void assertEquals(String msg, String wanted, String got) { + TestCase.assertEquals(msg, wanted, got); + } + + public static void assertEquals(Object wanted, Object got) { + assertEquals(null, wanted, got); + } + + @SuppressWarnings("unchecked") + public static void assertEquals(String msg, Object wanted, Object got) { + if (wanted instanceof List) { + assertEquals(msg, (List<?>) wanted, got); + } else if (wanted instanceof Map) { + assertEquals(msg, (Map<?, ?>) wanted, got); + } else if (wanted == null) { + TestCase.assertEquals(msg, wanted, got); + } else if (wanted instanceof Collection) { + System.err.println("c"); + assertEquals(msg, (Collection<?>) wanted, got); + } else if (wanted.getClass().isArray()) { + if (got == null) { + TestCase.assertEquals(msg, wanted, got); + } else if (got.getClass().isArray()) { + assertEqualsArrayArray(msg, wanted, got); + } else if (got instanceof List) { + assertEqualsArrayList(msg, wanted, (List) got); + } else { + TestCase.assertEquals(msg, wanted, got); + } + } else { + TestCase.assertEquals(msg, wanted, got); + } + } + + protected static <T> List<T> list(T value) { + ArrayList<T> list = new ArrayList<T>(1); + list.add(value); + return list; + } + + protected static <T> List<T> list(T... list) { + return Arrays.asList(list); + } + + @SuppressWarnings("unchecked") + protected static <K, V> Map<K, V> map(Object... list) { + assertEquals("list has even number of elements", 0, list.length % 2); + Map<K, V> map = new LinkedHashMap<K, V>(); + for (int i = 0; i < list.length; i += 2) { + map.put((K) list[i], (V) list[i + 1]); + } + return map; + } +} |
| Free forum by Nabble | Edit this page |
