1 package jalview.datamodel;
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertFalse;
5 import static org.testng.Assert.assertNotNull;
6 import static org.testng.Assert.assertNull;
7 import static org.testng.Assert.assertSame;
8 import static org.testng.Assert.assertTrue;
9 import static org.testng.Assert.fail;
11 import jalview.schemes.NucleotideColourScheme;
13 import junit.extensions.PA;
15 import org.testng.annotations.Test;
17 public class SequenceGroupTest
19 @Test(groups={"Functional"})
20 public void testAddSequence()
22 SequenceGroup sg = new SequenceGroup();
23 assertTrue(sg.getSequences().isEmpty());
25 SequenceI seq1 = new Sequence("seq1", "abc");
26 SequenceI seq2 = new Sequence("seq2", "abc");
27 SequenceI seq3 = new Sequence(seq1);
29 sg.addSequence(null, false);
30 assertTrue(sg.getSequences().isEmpty());
31 sg.addSequence(seq1, false);
32 assertEquals(sg.getSequences().size(), 1);
33 assertTrue(sg.getSequences().contains(seq1));
34 // adding the same sequence again does nothing
35 sg.addSequence(seq1, false);
36 assertEquals(sg.getSequences().size(), 1);
37 assertTrue(sg.getSequences().contains(seq1));
38 sg.addSequence(seq2, false);
39 sg.addSequence(seq2, false);
40 sg.addSequence(seq3, false);
41 assertEquals(sg.getSequences().size(), 3);
42 assertTrue(sg.getSequences().contains(seq1));
43 assertTrue(sg.getSequences().contains(seq2));
44 assertTrue(sg.getSequences().contains(seq3));
47 @Test(groups={"Functional"})
48 public void testAddOrRemove()
50 SequenceGroup sg = new SequenceGroup();
51 assertTrue(sg.getSequences().isEmpty());
53 SequenceI seq1 = new Sequence("seq1", "abc");
54 SequenceI seq2 = new Sequence("seq2", "abc");
55 SequenceI seq3 = new Sequence(seq1);
57 sg.addOrRemove(seq1, false);
58 assertEquals(sg.getSequences().size(), 1);
59 sg.addOrRemove(seq2, false);
60 assertEquals(sg.getSequences().size(), 2);
61 sg.addOrRemove(seq3, false);
62 assertEquals(sg.getSequences().size(), 3);
63 assertTrue(sg.getSequences().contains(seq1));
64 assertTrue(sg.getSequences().contains(seq2));
65 assertTrue(sg.getSequences().contains(seq3));
66 sg.addOrRemove(seq1, false);
67 assertEquals(sg.getSequences().size(), 2);
68 assertFalse(sg.getSequences().contains(seq1));
71 @Test(groups={"Functional"})
72 public void testGetColourScheme()
74 SequenceGroup sg = new SequenceGroup();
75 assertNotNull(sg.getGroupColourScheme());
76 assertNull(sg.getColourScheme());
78 sg.setGroupColourScheme(null);
79 assertNull(sg.getColourScheme());
81 NucleotideColourScheme scheme = new NucleotideColourScheme();
82 sg.setColourScheme(scheme);
83 assertSame(scheme, sg.getColourScheme());
86 @Test(groups={"Functional"})
87 public void testSetContext()
89 SequenceGroup sg1 = new SequenceGroup();
90 SequenceGroup sg2 = new SequenceGroup();
91 SequenceGroup sg3 = new SequenceGroup();
92 assertNull(sg1.getContext());
94 assertNull(sg1.getContext());
97 sg1.setContext(sg1); // self-reference :-O
98 fail("Expected exception");
99 } catch (IllegalArgumentException e)
102 assertNull(sg1.getContext());
105 assertSame(sg2, sg1.getContext());
109 sg3.setContext(sg1); // circular reference :-O
110 fail("Expected exception");
111 } catch (IllegalArgumentException e)
114 assertNull(sg3.getContext());
118 * use PrivilegedAccessor to 'force' a SequenceGroup with
119 * a circular context reference
121 PA.setValue(sg2, "context", sg2);
124 sg3.setContext(sg2); // circular reference in sg2
125 fail("Expected exception");
126 } catch (IllegalArgumentException e)
129 assertNull(sg3.getContext());
133 @Test(groups = { "Functional" })
134 public void testContains()
137 * essentially the same tests as AlignmentI.findGroup
138 * but from a particular group's perspective
141 SequenceI seq1 = new Sequence("seq1", "ABCDEF---GHI");
142 SequenceI seq2 = new Sequence("seq2", "---JKLMNO---");
143 AlignmentI a = new Alignment(new SequenceI[] { seq1, seq2 });
145 * add a group consisting of just "DEF"
147 SequenceGroup sg1 = new SequenceGroup();
148 sg1.addSequence(seq1, false);
153 * test sequence membership
155 assertTrue(sg1.contains(seq1));
156 assertFalse(sg1.contains(seq2));
159 * test sequence+position
162 assertFalse(sg1.contains(seq1, 2)); // position not in group
163 assertFalse(sg1.contains(seq1, 6)); // position not in group
164 assertFalse(sg1.contains(seq2, 5)); // sequence not in group
165 assertTrue(sg1.contains(seq1, 3)); // yes
166 assertTrue(sg1.contains(seq1, 4));
167 assertTrue(sg1.contains(seq1, 5));
170 * add a group consisting of
174 SequenceGroup sg2 = new SequenceGroup();
175 sg2.addSequence(seq1, false);
176 sg2.addSequence(seq2, false);
182 * if a residue is in more than one group, method returns
183 * the first found (in order groups were added)
185 assertTrue(sg2.contains(seq1, 4));
186 assertTrue(sg2.contains(seq1, 5));
189 * seq2 only belongs to the second group
191 assertTrue(sg2.contains(seq2, 4));
192 assertTrue(sg2.contains(seq2, 5));
193 assertTrue(sg2.contains(seq2, 6));
194 assertTrue(sg2.contains(seq2, 7));
195 assertFalse(sg2.contains(seq2, 3));
196 assertFalse(sg2.contains(seq2, 8));
198 assertTrue(sg2.contains(seq2, 8));
199 sg2.deleteSequence(seq2, false);
200 assertFalse(sg2.contains(seq2));