001 /*
002 * Created on Apr 12, 2009
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
005 * in compliance with the License. You may obtain a copy of the License at
006 *
007 * http://www.apache.org/licenses/LICENSE-2.0
008 *
009 * Unless required by applicable law or agreed to in writing, software distributed under the License
010 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
011 * or implied. See the License for the specific language governing permissions and limitations under
012 * the License.
013 *
014 * Copyright @2009 the original author or authors.
015 */
016 package org.fest.test;
017
018 import static org.junit.Assert.assertEquals;
019 import static org.junit.Assert.assertFalse;
020
021 /**
022 * Understands assert methods for <code>{@link EqualsHashCodeContractTestCase}</code>.
023 *
024 * @author Alex Ruiz
025 */
026 public final class EqualsHashCodeContractAssert {
027
028 /**
029 * Verifies that the "equals" implementation of the given object returns <code>false</code> when the object is
030 * compared to <code>null</code>.
031 * @param obj the object to verify.
032 * @throws AssertionError if the "equals" implementation of the given objects returns <code>true</code> when the
033 * object compared to <code>null</code>.
034 * @see EqualsHashCodeContractTestCase#should_not_be_equal_to_null()
035 */
036 public static void assertIsNotEqualToNull(Object obj) {
037 assertFalse(obj.equals(null));
038 }
039
040 /**
041 * Verifies that the "equals" implementation of the given object is reflexive.
042 * @param obj the object to verify.
043 * @throws AssertionError if the "equals" implementation of the given object is reflexive.
044 * @see EqualsHashCodeContractTestCase#should_have_reflexive_equals()
045 */
046 public static void assertEqualsIsReflexive(Object obj) {
047 assertEquals(obj, obj);
048 }
049
050 /**
051 * Verifies that the "equals" implementation of the given objects is symmetric.
052 * @param obj1 the object to verify.
053 * @param obj2 the object to compare to.
054 * @throws AssertionError if the "equals" implementation of the given object is not symmetric.
055 * @see EqualsHashCodeContractTestCase#should_have_symmetric_equals()
056 */
057 public static void assertEqualsIsSymmetric(Object obj1, Object obj2) {
058 assertEquals(obj1, obj2);
059 assertEquals(obj2, obj1);
060 }
061
062 /**
063 * Verifies that the "equals" implementation of the given objects is transitive.
064 * @param obj1 the object to verify.
065 * @param obj2 an object to compare to.
066 * @param obj3 an object to compare to.
067 * @throws AssertionError if the "equals" implementation of the given objects is not transitive.
068 * @see EqualsHashCodeContractTestCase#should_have_transitive_equals()
069 */
070 public static void assertEqualsIsTransitive(Object obj1, Object obj2, Object obj3) {
071 assertEquals(obj1, obj2);
072 assertEquals(obj2, obj3);
073 assertEquals(obj1, obj3);
074 }
075
076 /**
077 * Verifies that the "equals/hashCode" contract of the given objects is implemented correctly.
078 * @param obj1 the object to verify.
079 * @param obj2 the object to compare to.
080 * @throws AssertionError if the "equals/hashCode" contract of the given objects is not implemented correctly.
081 * @see EqualsHashCodeContractTestCase#should_maintain_equals_and_hashCode_contract()
082 */
083 public static void assertMaintainsEqualsAndHashCodeContract(Object obj1, Object obj2) {
084 assertEquals(obj1, obj2);
085 assertEquals(obj1.hashCode(), obj2.hashCode());
086 }
087
088 private EqualsHashCodeContractAssert() {}
089 }