@Test
public void invokeEquals() {

    Object rule = new DummyRule();
    Rule proxy1 = RuleProxy.asRule(rule);
    Rule proxy2 = RuleProxy.asRule(proxy1);
    Rule proxy3 = RuleProxy.asRule(proxy2);
    // @see Object#equals(Object) reflexive
    assertEquals(rule,rule);
    assertEquals(proxy1, proxy1);
    assertEquals(proxy2, proxy2);
    assertEquals(proxy3, proxy3);
    // @see Object#equals(Object) symmetric
    assertNotEquals(rule, proxy1);
    assertNotEquals(proxy1, rule);
    assertEquals(proxy1, proxy2);
    assertEquals(proxy2, proxy1);
    // @see Object#equals(Object) transitive consistent
    assertEquals(proxy1, proxy2);
    assertEquals(proxy2, proxy3);
    assertEquals(proxy3, proxy1);
    // @see Object#equals(Object) non-null
    assertNotEquals(rule, null);
    assertNotEquals(proxy1, null);
    assertNotEquals(proxy2, null);
    assertNotEquals(proxy3, null);
}