package org.test4j.hamcrest.iassert.common.impl;
import java.util.List;
import org.test4j.hamcrest.iassert.common.intf.IAssert;
import org.test4j.hamcrest.iassert.common.intf.IListAssert;
import org.test4j.hamcrest.matcher.modes.ItemsMode;
import org.test4j.hamcrest.matcher.property.MapListPropertyEqaulMatcher;
import org.test4j.hamcrest.matcher.property.PropertyAllItemsMatcher;
import org.test4j.hamcrest.matcher.property.PropertyAnyItemMatcher;
import org.test4j.hamcrest.matcher.property.ReflectionEqualMatcher;
import org.test4j.hamcrest.matcher.property.reflection.EqMode;
import org.test4j.module.ICore.DataMap;
import org.test4j.tools.commons.ListHelper;
import org.test4j.tools.datagen.DataSet;
import ext.test4j.hamcrest.Matcher;
@SuppressWarnings("rawtypes")
public class ListAssert<T, E extends IAssert> extends SizeAssert<T, E> implements IAssert<T, E>, IListAssert<T, E> {
public ListAssert(Class<? extends IAssert> clazE) {
super(clazE);
}
public ListAssert(T value, Class<? extends IAssert> clazE) {
super(value, clazE);
}
public E isEqualTo(Object expected, EqMode... modes) {
ReflectionEqualMatcher matcher = new ReflectionEqualMatcher(expected, modes);
return this.assertThat(matcher);
}
public E eqIgnoreOrder(Object expected) {
ReflectionEqualMatcher matcher = new ReflectionEqualMatcher(expected, new EqMode[] { EqMode.IGNORE_ORDER });
return this.assertThat(matcher);
}
@SuppressWarnings("unchecked")
public E reflectionEqMap(List<DataMap> expected, EqMode... modes) {
List _modes = ListHelper.toList(modes);
if (_modes.contains(EqMode.IGNORE_DEFAULTS) == false) {
_modes.add(EqMode.IGNORE_DEFAULTS);
}
EqMode[] arrays = (EqMode[]) _modes.toArray(new EqMode[0]);
MapListPropertyEqaulMatcher matcher = new MapListPropertyEqaulMatcher(expected, arrays);
return this.assertThat(matcher);
}
public E propertyEqMap(int count, DataMap expected, EqMode... modes) {
List<DataMap> lists = DataSet.parseMapList(count, expected);
return reflectionEqMap(lists, modes);
}
public E reflectionEqMap(int count, DataMap expected, EqMode... modes) {
return this.propertyEqMap(count, expected, modes);
}
public E propertyMatch(ItemsMode itemsMode, String property, Matcher matcher) {
switch (itemsMode) {
case AllItems:
PropertyAllItemsMatcher m1 = new PropertyAllItemsMatcher(property, matcher);
return this.assertThat(m1);
case AnyItems:
PropertyAnyItemMatcher m2 = new PropertyAnyItemMatcher(property, matcher);
return this.assertThat(m2);
default:
throw new RuntimeException("the argument[ItemsMode] of property match API can't be null.");
}
}
}