X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2FSequenceFeatureTest.java;h=2da8918a37c25742e69e133bf26d4e6b9bd97f8a;hb=5299e0d9142887a30889e8277d12039f10e5c36f;hp=d488a76ccc5bd84d32f8a66b6d13a3670eebeb9b;hpb=86f5f5c9315a7261cfb7efd33f6372ec53e1a382;p=jalview.git diff --git a/test/jalview/datamodel/SequenceFeatureTest.java b/test/jalview/datamodel/SequenceFeatureTest.java index d488a76..2da8918 100644 --- a/test/jalview/datamodel/SequenceFeatureTest.java +++ b/test/jalview/datamodel/SequenceFeatureTest.java @@ -1,13 +1,46 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ 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 jalview.gui.JvOptionPane; + +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class SequenceFeatureTest { + + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + @Test(groups = { "Functional" }) public void testCopyConstructor() { @@ -62,4 +95,137 @@ 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: + String restores = sf2.getType(); + sf2.setType("Type"); + assertFalse(sf1.equals(sf2)); + sf2.setType(restores); + + // changing description breaks equals: + restores = sf2.getDescription(); + sf2.setDescription("Desc"); + assertFalse(sf1.equals(sf2)); + sf2.setDescription(restores); + + // changing score breaks equals: + float restoref = sf2.getScore(); + sf2.setScore(12.4f); + assertFalse(sf1.equals(sf2)); + sf2.setScore(restoref); + + // NaN doesn't match a number + restoref = sf2.getScore(); + sf2.setScore(Float.NaN); + assertFalse(sf1.equals(sf2)); + + // NaN matches NaN + sf1.setScore(Float.NaN); + assertTrue(sf1.equals(sf2)); + sf1.setScore(restoref); + sf2.setScore(restoref); + + // changing start position breaks equals: + int restorei = sf2.getBegin(); + sf2.setBegin(21); + assertFalse(sf1.equals(sf2)); + sf2.setBegin(restorei); + + // changing end position breaks equals: + restorei = sf2.getEnd(); + sf2.setEnd(32); + assertFalse(sf1.equals(sf2)); + sf2.setEnd(restorei); + + // changing feature group breaks equals: + restores = sf2.getFeatureGroup(); + sf2.setFeatureGroup("Group"); + assertFalse(sf1.equals(sf2)); + sf2.setFeatureGroup(restores); + + // changing ID breaks equals: + restores = (String) sf2.getValue("ID"); + sf2.setValue("ID", "id2"); + assertFalse(sf1.equals(sf2)); + sf2.setValue("ID", restores); + + // changing Name breaks equals: + restores = (String) sf2.getValue("Name"); + sf2.setValue("Name", "Name"); + assertFalse(sf1.equals(sf2)); + sf2.setValue("Name", restores); + + // changing Parent breaks equals: + restores = (String) sf1.getValue("Parent"); + sf1.setValue("Parent", "Parent"); + assertFalse(sf1.equals(sf2)); + sf1.setValue("Parent", restores); + + // changing strand breaks equals: + restorei = sf2.getStrand(); + sf2.setStrand("-"); + assertFalse(sf1.equals(sf2)); + sf2.setStrand(restorei == 1 ? "+" : "-"); + + // changing phase breaks equals: + restores = sf1.getPhase(); + sf1.setPhase("2"); + assertFalse(sf1.equals(sf2)); + sf1.setPhase(restores); + + // restore equality as sanity check: + 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)); + } + + @Test(groups = { "Functional" }) + public void testIsContactFeature() + { + SequenceFeature sf = new SequenceFeature("type", "desc", 22, 33, 12.5f, + "group"); + assertFalse(sf.isContactFeature()); + sf.setType(""); + assertFalse(sf.isContactFeature()); + sf.setType(null); + assertFalse(sf.isContactFeature()); + sf.setType("Disulfide Bond"); + assertTrue(sf.isContactFeature()); + sf.setType("disulfide bond"); + assertTrue(sf.isContactFeature()); + sf.setType("Disulphide Bond"); + assertTrue(sf.isContactFeature()); + sf.setType("disulphide bond"); + assertTrue(sf.isContactFeature()); + } }