/***********************************************************************************
* Copyright (c) 2013. Nickolay Gerilovich. Russia.
* Some Rights Reserved.
************************************************************************************/
package com.github.nickvl.xspring.core.log.aop;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Collection;
import java.util.Comparator;
import org.apache.commons.lang3.builder.CompareToBuilder;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.easymock.EasyMock;
import org.easymock.LogicalOperator;
import org.junit.Assert;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* Utility methods.
*/
public final class TestSupportUtility {
private static final Comparator<Object[]> ARRAY_EQUAL_COMPARATOR = new Comparator<Object[]>() {
@Override
public int compare(Object[] o1, Object[] o2) {
Assert.assertArrayEquals(o1, o2);
return 0;
}
};
private static final Comparator<Object> REFLECTION_COMPARATOR = new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
return CompareToBuilder.reflectionCompare(o1, o2);
}
};
private TestSupportUtility() {
}
public static void assertCollection(Collection<?> collection, Object... expected) {
assertArrayEquals(expected, collection.toArray());
}
public static void assertCollectionConsistOf(Collection<?> collection, Object... expected) {
assertEquals(expected.length, collection.size());
for (Object expectedElement : expected) {
assertTrue(collection.contains(expectedElement));
}
}
public static void assertReflectionEquals(Object expected, Object actual) {
assertTrue(EqualsBuilder.reflectionEquals(expected, actual));
}
public static Object[] arrayEqual(Object[] expectedArray) {
return EasyMock.cmp(expectedArray, ARRAY_EQUAL_COMPARATOR, LogicalOperator.EQUAL);
}
public static Object reflectionEquals(Object expected) {
return EasyMock.cmp(expected, REFLECTION_COMPARATOR, LogicalOperator.EQUAL);
}
public static ArgumentDescriptor createArgumentDescriptor(String[] argumentNames, boolean... indexes) throws NoSuchMethodException,
IllegalAccessException, InvocationTargetException, InstantiationException {
BitSet argIndexes = new BitSet(indexes.length);
for (int i = 0; i < indexes.length; i++) {
if (indexes[i]) {
argIndexes.set(i);
}
}
return createArgumentDescriptor(argIndexes, argumentNames);
}
public static ArgumentDescriptor createArgumentDescriptor(BitSet indexes, String[] argumentNames) throws NoSuchMethodException,
IllegalAccessException, InvocationTargetException, InstantiationException {
if (argumentNames != null) {
assertTrue(String.format("wrong arguments: argCount[%s] more then argNames[%s]", indexes, Arrays.toString(argumentNames)),
indexes.length() <= argumentNames.length);
}
Constructor<ArgumentDescriptor> constructor = ArgumentDescriptor.class.getDeclaredConstructor(BitSet.class, String[].class);
constructor.setAccessible(true);
return constructor.newInstance(indexes, argumentNames);
}
}