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 org.testng.annotations.Test;
15 public class SequenceGroupTest
17 @Test(groups={"Functional"})
18 public void testAddSequence()
20 SequenceGroup sg = new SequenceGroup();
21 assertTrue(sg.getSequences().isEmpty());
23 SequenceI seq1 = new Sequence("seq1", "abc");
24 SequenceI seq2 = new Sequence("seq2", "abc");
25 SequenceI seq3 = new Sequence(seq1);
27 sg.addSequence(null, false);
28 assertTrue(sg.getSequences().isEmpty());
29 sg.addSequence(seq1, false);
30 assertEquals(sg.getSequences().size(), 1);
31 assertTrue(sg.getSequences().contains(seq1));
32 // adding the same sequence again does nothing
33 sg.addSequence(seq1, false);
34 assertEquals(sg.getSequences().size(), 1);
35 assertTrue(sg.getSequences().contains(seq1));
36 sg.addSequence(seq2, false);
37 sg.addSequence(seq2, false);
38 sg.addSequence(seq3, false);
39 assertEquals(sg.getSequences().size(), 3);
40 assertTrue(sg.getSequences().contains(seq1));
41 assertTrue(sg.getSequences().contains(seq2));
42 assertTrue(sg.getSequences().contains(seq3));
45 @Test(groups={"Functional"})
46 public void testAddOrRemove()
48 SequenceGroup sg = new SequenceGroup();
49 assertTrue(sg.getSequences().isEmpty());
51 SequenceI seq1 = new Sequence("seq1", "abc");
52 SequenceI seq2 = new Sequence("seq2", "abc");
53 SequenceI seq3 = new Sequence(seq1);
55 sg.addOrRemove(seq1, false);
56 assertEquals(sg.getSequences().size(), 1);
57 sg.addOrRemove(seq2, false);
58 assertEquals(sg.getSequences().size(), 2);
59 sg.addOrRemove(seq3, false);
60 assertEquals(sg.getSequences().size(), 3);
61 assertTrue(sg.getSequences().contains(seq1));
62 assertTrue(sg.getSequences().contains(seq2));
63 assertTrue(sg.getSequences().contains(seq3));
64 sg.addOrRemove(seq1, false);
65 assertEquals(sg.getSequences().size(), 2);
66 assertFalse(sg.getSequences().contains(seq1));
69 @Test(groups={"Functional"})
70 public void testGetColourScheme()
72 SequenceGroup sg = new SequenceGroup();
73 assertNotNull(sg.getGroupColourScheme());
74 assertNull(sg.getColourScheme());
76 sg.setGroupColourScheme(null);
77 assertNull(sg.getColourScheme());
79 NucleotideColourScheme scheme = new NucleotideColourScheme();
80 sg.setColourScheme(scheme);
81 assertSame(scheme, sg.getColourScheme());
84 @Test(groups={"Functional"})
85 public void testSetContext()
87 SequenceGroup sg1 = new SequenceGroup();
88 SequenceGroup sg2 = new SequenceGroup();
89 SequenceGroup sg3 = new SequenceGroup();
90 assertNull(sg1.getContext());
92 assertNull(sg1.getContext());
95 sg1.setContext(sg1); // self-reference :-O
96 fail("Expected exception");
97 } catch (IllegalArgumentException e)
100 assertNull(sg1.getContext());
103 assertSame(sg2, sg1.getContext());
107 sg3.setContext(sg1); // circular reference :-O
108 fail("Expected exception");
109 } catch (IllegalArgumentException e)
112 assertNull(sg3.getContext());
116 @Test(groups = { "Functional" })
117 public void testContains()
120 * essentially the same tests as AlignmentI.findGroup
121 * but from a particular group's perspective
124 SequenceI seq1 = new Sequence("seq1", "ABCDEF---GHI");
125 SequenceI seq2 = new Sequence("seq2", "---JKLMNO---");
126 AlignmentI a = new Alignment(new SequenceI[] { seq1, seq2 });
128 * add a group consisting of just "DEF"
130 SequenceGroup sg1 = new SequenceGroup();
131 sg1.addSequence(seq1, false);
136 * test sequence membership
138 assertTrue(sg1.contains(seq1));
139 assertFalse(sg1.contains(seq2));
142 * test sequence+position
145 assertFalse(sg1.contains(seq1, 2)); // position not in group
146 assertFalse(sg1.contains(seq1, 6)); // position not in group
147 assertFalse(sg1.contains(seq2, 5)); // sequence not in group
148 assertTrue(sg1.contains(seq1, 3)); // yes
149 assertTrue(sg1.contains(seq1, 4));
150 assertTrue(sg1.contains(seq1, 5));
153 * add a group consisting of
157 SequenceGroup sg2 = new SequenceGroup();
158 sg2.addSequence(seq1, false);
159 sg2.addSequence(seq2, false);
165 * if a residue is in more than one group, method returns
166 * the first found (in order groups were added)
168 assertTrue(sg2.contains(seq1, 4));
169 assertTrue(sg2.contains(seq1, 5));
172 * seq2 only belongs to the second group
174 assertTrue(sg2.contains(seq2, 4));
175 assertTrue(sg2.contains(seq2, 5));
176 assertTrue(sg2.contains(seq2, 6));
177 assertTrue(sg2.contains(seq2, 7));
178 assertFalse(sg2.contains(seq2, 3));
179 assertFalse(sg2.contains(seq2, 8));
181 assertTrue(sg2.contains(seq2, 8));
182 sg2.deleteSequence(seq2, false);
183 assertFalse(sg2.contains(seq2));