/**
* Copyright 2010 Wealthfront Inc. 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 com.kaching.platform.testing;
import static com.google.common.collect.Lists.newArrayList;
import static java.math.BigDecimal.valueOf;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.junit.ComparisonFailure;
/**
* Extension of JUnit assertions.
*/
public class Assert extends org.junit.Assert {
protected Assert() {}
public static void assertBigDecimalEquals(double d1, BigDecimal d2) {
assertBigDecimalEquals(null, d1, d2);
}
public static void assertBigDecimalEquals(String message, double d1, BigDecimal d2) {
assertBigDecimalEquals(message, valueOf(d1), d2);
}
public static void assertBigDecimalEquals(String message, double d1, BigDecimal d2, int scale) {
assertBigDecimalEquals(message, valueOf(d1), d2, scale);
}
public static void assertBigDecimalEquals(String message, BigDecimal d1, BigDecimal d2, int scale) {
assertBigDecimalEquals(
message,
d1.setScale(scale, RoundingMode.HALF_UP),
d2.setScale(scale, RoundingMode.HALF_UP));
}
public static void assertBigDecimalEquals(BigDecimal d1, BigDecimal d2) {
assertBigDecimalEquals(null, d1, d2);
}
public static void assertBigDecimalEquals(BigDecimal d1, BigDecimal d2, int scale) {
assertBigDecimalEquals(
null,
d1.setScale(scale, RoundingMode.HALF_UP),
d2.setScale(scale, RoundingMode.HALF_UP));
}
public static void assertBigDecimalEquals(double d1, BigDecimal d2, int scale) {
assertBigDecimalEquals(valueOf(d1), d2, scale);
}
public static void assertBigDecimalEquals(
String message, BigDecimal d1, BigDecimal d2) {
if (d1 == null && d2 == null) {
return;
}
if (d1 == null || d2 == null || d1.compareTo(d2) != 0) {
throw new ComparisonFailure(
(message == null) ? "" : message,
(d1 == null) ? "null" : d1.toPlainString(),
(d2 == null) ? "null" : d2.toPlainString());
}
}
public static void assertBigDecimalEquals(
List<BigDecimal> expected, List<BigDecimal> actual) {
assertBigDecimalEquals(null, expected, actual);
}
public static void assertBigDecimalEquals(String message,
List<BigDecimal> expected, List<BigDecimal> actual) {
if (expected == null || actual == null) {
assertEquals(message, expected, actual);
} else {
Iterator<BigDecimal> eachExpected = expected.iterator();
Iterator<BigDecimal> eachActual = actual.iterator();
while (eachExpected.hasNext() && eachActual.hasNext()) {
try {
assertBigDecimalEquals(message, eachExpected.next(), eachActual.next());
} catch(ComparisonFailure e) {
assertEquals(message, expected, actual);
}
}
if (eachExpected.hasNext() != eachActual.hasNext()) {
assertEquals(message, expected, actual);
}
}
}
public static <K> void assertBigDecimalEquals(
Map<K, BigDecimal> expected, Map<K, BigDecimal> actual) {
assertTrue(expected.size() == actual.size());
for (K key : expected.keySet()) {
assertTrue(actual.containsKey(key));
assertBigDecimalEquals(expected.get(key), actual.get(key), 5);
}
}
public static void assertBigDecimalEquals(int d1, BigDecimal d2) {
assertBigDecimalEquals(null, new BigDecimal(Integer.toString(d1)), d2);
}
public static void assertBigDecimalEquals(String message, int d1, BigDecimal d2) {
assertBigDecimalEquals(message, new BigDecimal(Integer.toString(d1)), d2);
}
public static void assertBigDecimalEquals(float d1, BigDecimal d2) {
assertBigDecimalEquals(null, new BigDecimal(Float.toString(d1)), d2);
}
public static void assertBigDecimalEquals(String message, float d1, BigDecimal d2) {
assertBigDecimalEquals(message, new BigDecimal(Float.toString(d1)), d2);
}
public static void assertFloatEquals(float f1, float f2) {
assertBigDecimalEquals(null, new BigDecimal(Float.toString(f1)),
new BigDecimal(Float.toString(f2)));
}
public static void assertFloatEquals(float f1, float f2, int scale) {
assertBigDecimalEquals(null, new BigDecimal(Float.toString(f1)),
new BigDecimal(Float.toString(f2)), scale);
}
public static void assertFloatEquals(String message, float f1, float f2) {
assertBigDecimalEquals(message, new BigDecimal(Float.toString(f1)),
new BigDecimal(Float.toString(f2)));
}
public static <T> void assertContains(Collection<T>collection, T object) {
if (!collection.contains(object)) {
junit.framework.Assert.fail("Expected to find " + object);
}
}
public static void assertArrayEquals(Object[] expected, Object[] actual) {
assertEquals(newArrayList(expected), newArrayList(actual));
}
@SuppressWarnings("finally")
public static void assertNotEquals(Object expected, Object actual) {
boolean wasEqual = false;
try {
assertEquals(expected, actual);
wasEqual = true;
} catch (AssertionError e) {
} finally {
if (wasEqual) {
fail();
}
return;
}
}
}