Override equals() & hashCode() methods

This commit is contained in:
Zafar Khaja 2012-11-20 22:17:29 +04:00
parent e5041f42cb
commit d670f15b16
2 changed files with 90 additions and 0 deletions

View File

@ -103,6 +103,32 @@ public class Version implements Comparable<Version> {
patchVersion = patchVersion + 1;
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (null == other || this.getClass() != other.getClass()) {
return false;
}
return compareTo((Version) other) == 0 ? true : false;
}
@Override
public int hashCode() {
int hash = 5;
hash = 97 * hash + majorVersion;
hash = 97 * hash + minorVersion;
hash = 97 * hash + patchVersion;
hash = 97 * hash + (
preReleaseVersion != null ? preReleaseVersion.hashCode(): 0
);
hash = 97 * hash + (
buildVersion != null ? buildVersion.hashCode() : 0
);
return hash;
}
@Override
public int compareTo(Version other) {
int result = compareNormalVersions(other);

View File

@ -157,4 +157,68 @@ public class VersionTest {
Version version2 = new Version("1.3.7-beta+build.a");
assertEquals(-1, version1.compareTo(version2));
}
@Test public void
shouldOverrideEqualsMethodForConvenience() {
Version version1 = new Version("2.3.7");
Version version2 = new Version("2.3.7");
Version version3 = new Version("1.3.7");
assertTrue(version1.equals(version1));
assertTrue(version1.equals(version2));
assertFalse(version1.equals(version3));
}
@Test public void
equalsMethodShouldBeReflexive() {
Version version1 = new Version("2.3.7");
assertTrue(version1.equals(version1));
}
@Test public void
equalsMethodShouldBeSymmetric() {
Version version1 = new Version("2.3.7");
Version version2 = new Version("2.3.7");
assertTrue(version1.equals(version2));
assertTrue(version2.equals(version1));
}
@Test public void
equalsMethodShouldBeTransitive() {
Version version1 = new Version("2.3.7");
Version version2 = new Version("2.3.7");
Version version3 = new Version("2.3.7");
assertTrue(version1.equals(version2));
assertTrue(version2.equals(version3));
assertTrue(version1.equals(version3));
}
@Test public void
equalsMethodShouldBeConsistent() {
Version version1 = new Version("2.3.7");
Version version2 = new Version("2.3.7");
assertTrue(version1.equals(version2));
assertTrue(version1.equals(version2));
assertTrue(version1.equals(version2));
}
@Test public void
equalsMethodShouldReturnFalseIfOtherVersionIsNotInstanceOfVersion() {
Version version1 = new Version("2.3.7");
assertFalse(version1.equals(new String("2.3.7")));
}
@Test public void
equalsMethodShouldReturnFalseIfOtherVersionIsNull() {
Version version1 = new Version("2.3.7");
Version version2 = null;
assertFalse(version1.equals(version2));
}
@Test public void
hashCodeMethodShouldReturnSameHashCodeIfVersionsAreEqual() {
Version version1 = new Version("2.3.7");
Version version2 = new Version("2.3.7");
assertTrue(version1.equals(version2));
assertEquals(version1.hashCode(), version2.hashCode());
}
}