X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2FSequenceFeatureTest.java;h=82b260e8fd156c6a5187e896957fb0b4b4c8bbd6;hb=bee12714a66f2586e674ca2470efb6d8de79df58;hp=d488a76ccc5bd84d32f8a66b6d13a3670eebeb9b;hpb=86f5f5c9315a7261cfb7efd33f6372ec53e1a382;p=jalview.git diff --git a/test/jalview/datamodel/SequenceFeatureTest.java b/test/jalview/datamodel/SequenceFeatureTest.java index d488a76..82b260e 100644 --- a/test/jalview/datamodel/SequenceFeatureTest.java +++ b/test/jalview/datamodel/SequenceFeatureTest.java @@ -1,8 +1,10 @@ package jalview.datamodel; import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertSame; +import static org.testng.AssertJUnit.assertTrue; import org.testng.annotations.Test; @@ -62,4 +64,90 @@ public class SequenceFeatureTest sf.setValue("STRAND", "."); assertEquals(0, sf.getStrand()); } + + /** + * Tests for equality, and that equal objects have the same hashCode + */ + @Test(groups = { "Functional" }) + public void testEqualsAndHashCode() + { + SequenceFeature sf1 = new SequenceFeature("type", "desc", 22, 33, + 12.5f, "group"); + sf1.setValue("ID", "id"); + sf1.setValue("Name", "name"); + sf1.setValue("Parent", "parent"); + sf1.setStrand("+"); + sf1.setPhase("1"); + SequenceFeature sf2 = new SequenceFeature("type", "desc", 22, 33, + 12.5f, "group"); + sf2.setValue("ID", "id"); + sf2.setValue("Name", "name"); + sf2.setValue("Parent", "parent"); + sf2.setStrand("+"); + sf2.setPhase("1"); + + assertFalse(sf1.equals(null)); + assertTrue(sf1.equals(sf2)); + assertTrue(sf2.equals(sf1)); + assertEquals(sf1.hashCode(), sf2.hashCode()); + + // changing type breaks equals: + sf2.setType("Type"); + assertFalse(sf1.equals(sf2)); + + // changing description breaks equals: + sf2.setType("type"); + sf2.setDescription("Desc"); + assertFalse(sf1.equals(sf2)); + + // changing start position breaks equals: + sf2.setDescription("desc"); + sf2.setBegin(21); + assertFalse(sf1.equals(sf2)); + + // changing end position breaks equals: + sf2.setBegin(22); + sf2.setEnd(32); + assertFalse(sf1.equals(sf2)); + + // changing feature group breaks equals: + sf2.setEnd(33); + sf2.setFeatureGroup("Group"); + assertFalse(sf1.equals(sf2)); + + // changing ID breaks equals: + sf2.setFeatureGroup("group"); + sf2.setValue("ID", "id2"); + assertFalse(sf1.equals(sf2)); + + // changing Name breaks equals: + sf2.setValue("ID", "id"); + sf2.setValue("Name", "Name"); + assertFalse(sf1.equals(sf2)); + + // changing Parent breaks equals: + sf2.setValue("Name", "name"); + sf1.setValue("Parent", "Parent"); + assertFalse(sf1.equals(sf2)); + + // changing strand breaks equals: + sf1.setValue("Parent", "parent"); + sf2.setStrand("-"); + assertFalse(sf1.equals(sf2)); + + // changing phase breaks equals: + sf2.setStrand("+"); + sf1.setPhase("2"); + assertFalse(sf1.equals(sf2)); + + // restore equality as sanity check: + sf1.setPhase("1"); + assertTrue(sf1.equals(sf2)); + assertTrue(sf2.equals(sf1)); + assertEquals(sf1.hashCode(), sf2.hashCode()); + + // changing status doesn't change equals: + sf1.setStatus("new"); + assertTrue(sf1.equals(sf2)); + } }