package org.test4j.hamcrest.matcher.property; 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.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 PropertyEqualMatcherTest extends Test4J { public void testProperIsArray() { Map actual = new HashMap() { { this.put("key1", new String[] { "value1", "value2" }); } }; want.object(actual).propertyEq("key1", new String[] { "value1", "value2" }); } @Test(expectedExceptions = AssertionError.class) public void testProperIsArray_failure() { Map actual = new HashMap() { { this.put("key1", new String[] { "value1" }); } }; want.object(actual).propertyEq("key1", "value1"); } public void testPropertyActualIsArray() { List list = toList(User.newInstance(124, ""), User.newInstance(125, "")); want.object(list).propertyEq("id", toList(124, 125)); want.object(list).propertyEq("id", toList(User.newInstance(124, ""), User.newInstance(125, ""))); } @Test(expectedExceptions = AssertionError.class) public void testPropertyActualIsArray_Failure() { List list = toList(User.newInstance(124, "")); want.object(list).propertyEq("id", User.newInstance(124, "")); } public void testProper_Normal() { Map actual = new HashMap() { { this.put("key1", "value1"); } }; want.object(actual).propertyEq("key1", "value1"); } public void testProper_NormalPoJo() { User user = User.newInstance(125, "darui.wu"); want.object(user).propertyEq("name", "darui.wu").propertyEq("id", new HashMap() { { put("id", 125); } }); } @Test(dataProvider = "matchData") public void testProperEqual(Object actual, Object expected, String property, EqMode[] modes, boolean match) { PropertyEqualMatcher matcher = new PropertyEqualMatcher(expected, property, 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"), "abc", "name", null, true); data(newUser("abc"), newMap("abc"), "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); } }; } 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); } }; } }