001package beginner; 002 003import com.sandwich.koan.Koan; 004 005import static com.sandwich.koan.constant.KoanConstants.__; 006import static com.sandwich.util.Assert.assertEquals; 007 008public class AboutEquality { 009 010 @Koan 011 public void doubleEqualsTestsIfTwoObjectsAreTheSame() { 012 Object object = new Object(); 013 Object sameObject = object; 014 assertEquals(object == sameObject, __); 015 assertEquals(object == new Object(), __); 016 } 017 018 @Koan 019 public void equalsMethodByDefaultTestsIfTwoObjectsAreTheSame() { 020 Object object = new Object(); 021 assertEquals(object.equals(object), __); 022 assertEquals(object.equals(new Object()), __); 023 } 024 025 @Koan 026 public void equalsMethodCanBeChangedBySubclassesToTestsIfTwoObjectsAreEqual() { 027 Object object = new Integer(1); 028 assertEquals(object.equals(object), __); 029 assertEquals(object.equals(new Integer(1)), __); 030 // Note: This means that for the class 'Object' there is no difference between 'equal' and 'same' 031 // but for the class 'Integer' there is difference - see below 032 } 033 034 @Koan 035 public void equalsMethodCanBeChangedBySubclassesToTestsIfTwoObjectsAreEqualExample() { 036 Integer value1 = new Integer(4); 037 Integer value2 = new Integer(2 + 2); 038 assertEquals(value1.equals(value2), __); 039 assertEquals(value1, __); 040 } 041 042 @Koan 043 public void objectsNeverEqualNull() { 044 assertEquals(new Object().equals(null), __); 045 } 046 047 @Koan 048 public void objectsEqualThemselves() { 049 Object obj = new Object(); 050 assertEquals(obj.equals(obj), __); 051 } 052}