package org.test4j.hamcrest.matcher.property; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.test4j.hamcrest.matcher.property.reflection.EqMode; import org.test4j.json.encoder.beans.test.GenicBean; import org.test4j.json.encoder.beans.test.User; import org.test4j.testng.Test4J; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import ext.test4j.hamcrest.MatcherAssert; @SuppressWarnings({ "rawtypes", "serial", "unchecked" }) @Test(groups = { "test4j", "assertion" }) public class PropertiesEqualMatcherTest extends Test4J { public void testProperEqual_ComplexAndIgnoreAll() { GenicBean[] actuals = new GenicBean[] { GenicBean.newInstance("bean1", newUser("darui.wu")),// <br> GenicBean.newInstance("bean2", newMap("map2")) // <br> }; List expected = new ArrayList() { { add(GenicBean.newInstance("bean2", null)); add(toList("bean1", "darui.wu")); } }; PropertiesEqualMatcher matcher = new PropertiesEqualMatcher(expected, new String[] { "name", "refObject.name" }, new EqMode[] { EqMode.IGNORE_ORDER, EqMode.IGNORE_DEFAULTS }); MatcherAssert.assertThat(actuals, matcher); } public void testProperEqual_ComplexAndIgnoreAll2() { GenicBean[] actuals = new GenicBean[] { GenicBean.newInstance("bean1", toList("list1", "list2")), GenicBean.newInstance("bean2", toList("list3", "list4")), GenicBean.newInstance("bean3", newUser("darui.wu")), GenicBean.newInstance("bean4", toList("list5", "list6")) }; List expected = new ArrayList() { { add(toList("bean3", newUser("darui.wu"))); add(GenicBean.newInstance("bean2", new String[] { "list4", "list3" })); add(GenicBean.newInstance("bean1", new String[] { "list1", null })); add(GenicBean.newInstance("bean4", new String[] { null, "list6" })); } }; PropertiesEqualMatcher matcher = new PropertiesEqualMatcher(expected, new String[] { "name", "refObject" }, new EqMode[] { EqMode.IGNORE_ORDER, EqMode.IGNORE_DEFAULTS }); MatcherAssert.assertThat(actuals, matcher); } @Test(dataProvider = "matchData") public void testProperEqual(Object actual, Object expected, String properties, EqMode[] modes, boolean match) { String[] props = properties.split(","); PropertiesEqualMatcher matcher = new PropertiesEqualMatcher(expected, props, modes); try { MatcherAssert.assertThat(actual, matcher); want.bool(match).isEqualTo(true); } catch (AssertionError error) { error.printStackTrace(); want.bool(match).isEqualTo(false); } } @DataProvider public Iterator matchData() { return new DataIterator() { { data(newUser("abc"), "abc", "name", null, true); data(newUser("abc"), null, "name", null, false); data(newUser("abc"), null, "name", new EqMode[] { EqMode.IGNORE_DEFAULTS }, true); data(newUser("abc"), newUser("abc"), "name", null, true); data(newUser("abc"), toList(123, "abc"), "id,name", null, true); data(newUser("abc"), toList("abc", 123), "id,name", null, false); data(newUser("abc"), toList("abc", 123), "id,name", new EqMode[] { EqMode.IGNORE_ORDER }, true); data(newUser("abc"), newMap("abc"), "id,name", null, true); data(toList(newUser("abc"), newUser("darui.wu")), toArray("abc", "darui.wu"), "name", null, true); data(toArray(newMap("abc"), newUser("darui.wu")), toList(newUser("abc"), newMap("darui.wu")), "name", null, true); data(toArray(newMap("abc"), newUser("darui.wu")), toList(newUser("abc"), null), "name", new EqMode[] { EqMode.IGNORE_DEFAULTS }, true); data(toArray(newMap("abc"), newUser("darui.wu")), toList(newUser("darui.wu"), newMap("abc")), "name", new EqMode[] { EqMode.IGNORE_ORDER }, true); data(toArray(newMap("abc"), newUser("darui.wu")), toList(newUser("abc"), newMap("darui.wu")), "id,name", null, true); data(toArray(newMap("abc"), newUser("darui.wu")), toList(newUser("abc"), newMap(null)), "id,name", new EqMode[] { EqMode.IGNORE_DEFAULTS }, true); data(toArray(newMap("abc"), newUser("darui.wu")), toList(newMap(null), newUser("abc")), "id,name", new EqMode[] { EqMode.IGNORE_DEFAULTS }, false); data(toArray(newMap("abc"), newUser("darui.wu")), toList(newMap(null), newUser("abc")), "id,name", new EqMode[] { EqMode.IGNORE_DEFAULTS, EqMode.IGNORE_ORDER }, false); } }; } private static User newUser(String name) { return User.newInstance(123, name); } private static Map newMap(final String name) { return new HashMap() { { put("id", 123); put("name", name); } }; } }