1 package jalview.datamodel;
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertFalse;
5 import static org.testng.AssertJUnit.assertNull;
6 import static org.testng.AssertJUnit.assertSame;
7 import static org.testng.AssertJUnit.assertTrue;
9 import org.testng.annotations.Test;
11 public class SequenceFeatureTest
13 @Test(groups = { "Functional" })
14 public void testCopyConstructor()
16 SequenceFeature sf1 = new SequenceFeature("type", "desc", 22, 33,
18 sf1.setValue("STRAND", "+");
19 sf1.setValue("Note", "Testing");
20 Integer count = new Integer(7);
21 sf1.setValue("Count", count);
23 SequenceFeature sf2 = new SequenceFeature(sf1);
24 assertEquals("type", sf2.getType());
25 assertEquals("desc", sf2.getDescription());
26 assertEquals(22, sf2.getBegin());
27 assertEquals(33, sf2.getEnd());
28 assertEquals("+", sf2.getValue("STRAND"));
29 assertEquals("Testing", sf2.getValue("Note"));
30 // shallow clone of otherDetails map - contains the same object values!
31 assertSame(count, sf2.getValue("Count"));
35 * Tests for retrieving a 'miscellaneous details' property value, with or
36 * without a supplied default
38 @Test(groups = { "Functional" })
39 public void testGetValue()
41 SequenceFeature sf1 = new SequenceFeature("type", "desc", 22, 33,
43 sf1.setValue("STRAND", "+");
44 assertEquals("+", sf1.getValue("STRAND"));
45 assertNull(sf1.getValue("strand")); // case-sensitive
46 assertEquals(".", sf1.getValue("unknown", "."));
47 Integer i = new Integer(27);
48 assertSame(i, sf1.getValue("Unknown", i));
52 * Tests the method that returns 1 / -1 / 0 for strand "+" / "-" / other
54 @Test(groups = { "Functional" })
55 public void testGetStrand()
57 SequenceFeature sf = new SequenceFeature("type", "desc", 22, 33, 12.5f,
59 assertEquals(0, sf.getStrand());
60 sf.setValue("STRAND", "+");
61 assertEquals(1, sf.getStrand());
62 sf.setValue("STRAND", "-");
63 assertEquals(-1, sf.getStrand());
64 sf.setValue("STRAND", ".");
65 assertEquals(0, sf.getStrand());
69 * Tests for equality, and that equal objects have the same hashCode
71 @Test(groups = { "Functional" })
72 public void testEqualsAndHashCode()
74 SequenceFeature sf1 = new SequenceFeature("type", "desc", 22, 33,
76 sf1.setValue("ID", "id");
77 sf1.setValue("Name", "name");
78 sf1.setValue("Parent", "parent");
81 SequenceFeature sf2 = new SequenceFeature("type", "desc", 22, 33,
83 sf2.setValue("ID", "id");
84 sf2.setValue("Name", "name");
85 sf2.setValue("Parent", "parent");
89 assertFalse(sf1.equals(null));
90 assertTrue(sf1.equals(sf2));
91 assertTrue(sf2.equals(sf1));
92 assertEquals(sf1.hashCode(), sf2.hashCode());
94 // changing type breaks equals:
96 assertFalse(sf1.equals(sf2));
98 // changing description breaks equals:
100 sf2.setDescription("Desc");
101 assertFalse(sf1.equals(sf2));
103 // changing start position breaks equals:
104 sf2.setDescription("desc");
106 assertFalse(sf1.equals(sf2));
108 // changing end position breaks equals:
111 assertFalse(sf1.equals(sf2));
113 // changing feature group breaks equals:
115 sf2.setFeatureGroup("Group");
116 assertFalse(sf1.equals(sf2));
118 // changing ID breaks equals:
119 sf2.setFeatureGroup("group");
120 sf2.setValue("ID", "id2");
121 assertFalse(sf1.equals(sf2));
123 // changing Name breaks equals:
124 sf2.setValue("ID", "id");
125 sf2.setValue("Name", "Name");
126 assertFalse(sf1.equals(sf2));
128 // changing Parent breaks equals:
129 sf2.setValue("Name", "name");
130 sf1.setValue("Parent", "Parent");
131 assertFalse(sf1.equals(sf2));
133 // changing strand breaks equals:
134 sf1.setValue("Parent", "parent");
136 assertFalse(sf1.equals(sf2));
138 // changing phase breaks equals:
141 assertFalse(sf1.equals(sf2));
143 // restore equality as sanity check:
145 assertTrue(sf1.equals(sf2));
146 assertTrue(sf2.equals(sf1));
147 assertEquals(sf1.hashCode(), sf2.hashCode());
149 // changing status doesn't change equals:
150 sf1.setStatus("new");
151 assertTrue(sf1.equals(sf2));