package org.hamcrest.object; import org.hamcrest.AbstractMatcherTest; import org.hamcrest.Matcher; @SuppressWarnings("WeakerAccess") public class HasEqualsValuesTest extends AbstractMatcherTest { private static final WithPublicFields WITH_PUBLIC_FIELDS = new WithPublicFields('x', 666, "a string"); private static final HasEqualValues<WithPublicFields> WITH_PUBLIC_FIELDS_MATCHER = new HasEqualValues<>(WITH_PUBLIC_FIELDS); @Override protected Matcher<?> createMatcher() { return WITH_PUBLIC_FIELDS_MATCHER; } public void test_describes_itself() { assertDescription( "WithPublicFields has values [i: <666>, s: \"a string\", c: \"x\"]", WITH_PUBLIC_FIELDS_MATCHER); } public void test_matches_equivalent_object() { assertMatches(WITH_PUBLIC_FIELDS_MATCHER, new WithPublicFields('x', 666, "a string")); } public void test_mismatches_on_first_field_inequality() { assertMismatchDescription( "'s' was \"different\"", WITH_PUBLIC_FIELDS_MATCHER, new WithPublicFields('x', 666, "different")); } public void test_mismatches_on_inherited_field() { assertMismatchDescription( "'c' was \"y\"", WITH_PUBLIC_FIELDS_MATCHER, new WithPublicFields('y', 666, "a string")); } public static class WithPublicFields extends Parent { public final int i; public final String s; public WithPublicFields(char c, int i, String s) { super(c); this.i = i; this.s = s; } } public static class Parent { public final char c; public Parent(char c) { this.c = c; } } }