2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.controller;
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertTrue;
26 import jalview.analysis.Finder;
27 import jalview.api.AlignViewControllerI;
28 import jalview.datamodel.SearchResults;
29 import jalview.datamodel.SearchResultsI;
30 import jalview.datamodel.Sequence;
31 import jalview.datamodel.SequenceFeature;
32 import jalview.datamodel.SequenceGroup;
33 import jalview.datamodel.SequenceI;
34 import jalview.gui.AlignFrame;
35 import jalview.io.FileLoader;
36 import jalview.io.FormatAdapter;
38 import java.util.Arrays;
39 import java.util.BitSet;
41 import org.testng.annotations.Test;
43 public class AlignViewControllerTest
45 @Test(groups = "Functional")
46 public void testFindColumnsWithFeature()
48 SequenceI seq1 = new Sequence("seq1", "aMMMaaaaaaaaaaaaaaaa");
49 SequenceI seq2 = new Sequence("seq2", "aaaMMMMMMMaaaaaaaaaa");
50 SequenceI seq3 = new Sequence("seq3", "aaaaaaaaaaMMMMMaaaaa");
51 SequenceI seq4 = new Sequence("seq3", "aaaaaaaaaaaaaaaaaaaa");
54 * features start/end are base 1
56 seq1.addSequenceFeature(new SequenceFeature("Metal", "desc", 2, 4, 0f,
58 seq1.addSequenceFeature(new SequenceFeature("Helix", "desc", 1, 15, 0f,
60 seq2.addSequenceFeature(new SequenceFeature("Metal", "desc", 4, 10, 0f,
62 seq3.addSequenceFeature(new SequenceFeature("Metal", "desc", 11, 15,
66 * select the first three columns --> Metal in seq1 2-3
68 SequenceGroup sg = new SequenceGroup();
69 sg.setStartRes(0); // base 0
71 sg.addSequence(seq1, false);
72 sg.addSequence(seq2, false);
73 sg.addSequence(seq3, false);
74 sg.addSequence(seq4, false);
76 BitSet bs = new BitSet();
77 int seqCount = AlignViewController.findColumnsWithFeature("Metal", sg,
79 assertEquals(1, seqCount);
80 assertEquals(2, bs.cardinality());
81 assertTrue(bs.get(1));
82 assertTrue(bs.get(2));
85 * select the first four columns: Metal in seq1 2:4, seq2 4:4
89 seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs);
90 assertEquals(2, seqCount);
91 assertEquals(3, bs.cardinality());
92 assertTrue(bs.get(1));
93 assertTrue(bs.get(2));
94 assertTrue(bs.get(3));
97 * select column 11: Metal in seq3 only
102 seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs);
103 assertEquals(1, seqCount);
104 assertEquals(1, bs.cardinality());
105 assertTrue(bs.get(10));
108 * select columns 16-20: no Metal feature
113 seqCount = AlignViewController.findColumnsWithFeature("Metal", sg, bs);
114 assertEquals(0, seqCount);
115 assertEquals(0, bs.cardinality());
118 * look for a feature that isn't there
123 seqCount = AlignViewController.findColumnsWithFeature("Pfam", sg, bs);
124 assertEquals(0, seqCount);
125 assertEquals(0, bs.cardinality());
129 * shameless copy of test data from findFeature for testing mark columns from
132 @Test(groups = "Functional")
133 public void testSelectColumnsWithHighlight()
135 AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
136 "seq1 aMMMaaaaaaaaaaaaaaaa\n" + "seq2 aaaMMMMMMMaaaaaaaaaa\n"
137 + "seq3 aaaaaaaaaaMMMMMaaaaa\n"
138 + "seq4 aaaaaaaaaaaaaaaaaaaa\n", FormatAdapter.PASTE);
140 SearchResultsI sr = new SearchResults();
141 SequenceI[] sqs = af.getViewport().getAlignment().getSequencesArray();
142 SequenceI seq1 = sqs[0];
143 SequenceI seq2 = sqs[1];
144 SequenceI seq3 = sqs[2];
145 SequenceI seq4 = sqs[3];
148 * features start/end are base 1
150 sr.addResult(seq1, 2, 4);
151 sr.addResult(seq2, 4, 10);
152 sr.addResult(seq3, 11, 15);
155 * test Match/Find works first
157 Finder f = new Finder(af.getViewport().getAlignment(), null);
159 f.setCaseSensitive(true);
162 "Finder found different set of results to manually created SearchResults",
163 sr, f.getSearchResults());
166 * now check simple mark columns from find operation
168 af.getViewport().setSearchResults(sr);
169 AlignViewControllerI avc = af.avc;
171 avc.markHighlightedColumns(false, false, false);
172 assertTrue("Didn't select highlighted columns", Arrays.deepEquals(af
173 .getViewport().getColumnSelection().getSelectedRanges()
174 .toArray(), new int[][] { { 1, 14 } }));