1 package jalview.controller;
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertTrue;
6 import jalview.datamodel.ColumnSelection;
7 import jalview.datamodel.Sequence;
8 import jalview.datamodel.SequenceFeature;
9 import jalview.datamodel.SequenceGroup;
10 import jalview.datamodel.SequenceI;
12 import java.util.BitSet;
13 import java.util.List;
15 import org.testng.annotations.Test;
17 public class AlignViewControllerTest
19 @Test(groups = "Functional")
20 public void testFindColumnsWithFeature()
22 SequenceI seq1 = new Sequence("seq1", "aMMMaaaaaaaaaaaaaaaa");
23 SequenceI seq2 = new Sequence("seq2", "aaaMMMMMMMaaaaaaaaaa");
24 SequenceI seq3 = new Sequence("seq3", "aaaaaaaaaaMMMMMaaaaa");
25 SequenceI seq4 = new Sequence("seq3", "aaaaaaaaaaaaaaaaaaaa");
28 * features start/end are base 1
30 seq1.addSequenceFeature(new SequenceFeature("Metal", "desc", 2, 4, 0f,
32 seq1.addSequenceFeature(new SequenceFeature("Helix", "desc", 1, 15, 0f,
34 seq2.addSequenceFeature(new SequenceFeature("Metal", "desc", 4, 10, 0f,
36 seq3.addSequenceFeature(new SequenceFeature("Metal", "desc", 11, 15,
40 * select the first three columns --> seq1 2-3
42 SequenceGroup sg = new SequenceGroup();
43 sg.setStartRes(0); // base 0
45 sg.addSequence(seq1, false);
46 sg.addSequence(seq2, false);
47 sg.addSequence(seq3, false);
48 sg.addSequence(seq4, false);
50 BitSet bs = new BitSet();
51 int seqCount = AlignViewController.findColumnsWithFeature("Metal", sg,
53 assertEquals(1, seqCount);
54 assertEquals(2, bs.cardinality());
55 assertTrue(bs.get(1));
56 assertTrue(bs.get(2));
59 * select the first four columns: seq1 2:4, seq2 4:4
63 seqCount = AlignViewController.findColumnsWithFeature("Metal", sg,
65 assertEquals(2, seqCount);
66 assertEquals(3, bs.cardinality());
67 assertTrue(bs.get(1));
68 assertTrue(bs.get(2));
69 assertTrue(bs.get(3));
72 * select column 11: seq3 only
77 seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs);
78 assertEquals(1, seqCount);
79 assertEquals(1, bs.cardinality());
80 assertTrue(bs.get(10));
83 * select columns 16-20: no Metal feature
88 seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs);
89 assertEquals(0, seqCount);
90 assertEquals(0, bs.cardinality());
93 * look for a feature that isn't there
98 seqCount = AlignViewController.findColumnsWithFeature("Pfam", sg, bs);
99 assertEquals(0, seqCount);
100 assertEquals(0, bs.cardinality());
103 @Test(groups = "Functional")
104 public void testSelectMarkedColumns_invert()
106 ColumnSelection cs = new ColumnSelection();
107 cs.addElement(5); // this will be cleared
108 BitSet toMark = new BitSet();
115 * inverted selection of {3, 6} should select {4, 5, 7, 8}
117 assertTrue(AlignViewController.selectMarkedColumns(cs, true, false,
118 false, toMark, 3, 8));
119 List<Integer> selected = cs.getSelected();
120 assertEquals(4, selected.size());
121 assertTrue(selected.contains(4));
122 assertTrue(selected.contains(5));
123 assertTrue(selected.contains(7));
124 assertTrue(selected.contains(8));
127 @Test(groups = "Functional")
128 public void testSelectMarkedColumns()
130 ColumnSelection cs = new ColumnSelection();
131 cs.addElement(5); // this will be cleared
132 BitSet toMark = new BitSet();
138 assertTrue(AlignViewController.selectMarkedColumns(cs, false, false,
139 false, toMark, 3, 8));
140 List<Integer> selected = cs.getSelected();
141 assertEquals(2, selected.size());
142 assertTrue(selected.contains(3));
143 assertTrue(selected.contains(6));
146 @Test(groups = "Functional")
147 public void testSelectMarkedColumns_extend()
149 ColumnSelection cs = new ColumnSelection();
152 BitSet toMark = new BitSet();
159 * extending selection of {3, 6} should leave {1, 3, 5, 6} selected
161 assertTrue(AlignViewController.selectMarkedColumns(cs, false, true,
162 false, toMark, 3, 8));
163 List<Integer> selected = cs.getSelected();
164 assertEquals(4, selected.size());
165 assertTrue(selected.contains(1));
166 assertTrue(selected.contains(3));
167 assertTrue(selected.contains(5));
168 assertTrue(selected.contains(6));
171 @Test(groups = "Functional")
172 public void testSelectMarkedColumns_toggle()
174 ColumnSelection cs = new ColumnSelection();
175 cs.addElement(1); // outside change range
178 cs.addElement(10); // outside change range
179 BitSet toMark = new BitSet();
186 * toggling state of {3, 6} should leave {1, 4, 6, 10} selected
188 assertTrue(AlignViewController.selectMarkedColumns(cs, false, false,
189 true, toMark, 3, 8));
190 List<Integer> selected = cs.getSelected();
191 assertEquals(4, selected.size());
192 assertTrue(selected.contains(1));
193 assertTrue(selected.contains(4));
194 assertTrue(selected.contains(6));
195 assertTrue(selected.contains(10));
197 // TODO testSelectMarkedColumns with combinations of invert/extend/toggle set