Clover icon

jalviewX

  1. Project Clover database Wed Oct 31 2018 15:13:58 GMT
  2. Package jalview.controller

File AlignViewControllerTest.java

 

Code metrics

0
100
3
1
244
153
3
0.03
33.33
3
1

Classes

Class Line # Actions
AlignViewControllerTest 49 100 3 0
1.0100%
 

Contributing tests

This file is covered by 2 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
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.
11    *
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.
16    *
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.
20    */
21    package jalview.controller;
22   
23    import static org.testng.AssertJUnit.assertEquals;
24    import static org.testng.AssertJUnit.assertTrue;
25   
26    import jalview.analysis.Finder;
27    import jalview.api.AlignViewControllerI;
28    import jalview.api.FeatureColourI;
29    import jalview.datamodel.Alignment;
30    import jalview.datamodel.SearchResults;
31    import jalview.datamodel.SearchResultsI;
32    import jalview.datamodel.Sequence;
33    import jalview.datamodel.SequenceFeature;
34    import jalview.datamodel.SequenceGroup;
35    import jalview.datamodel.SequenceI;
36    import jalview.gui.AlignFrame;
37    import jalview.gui.JvOptionPane;
38    import jalview.io.DataSourceType;
39    import jalview.io.FileLoader;
40    import jalview.schemes.FeatureColour;
41   
42    import java.awt.Color;
43    import java.util.Arrays;
44    import java.util.BitSet;
45   
46    import org.testng.annotations.BeforeClass;
47    import org.testng.annotations.Test;
48   
 
49    public class AlignViewControllerTest
50    {
51   
 
52  1 toggle @BeforeClass(alwaysRun = true)
53    public void setUpJvOptionPane()
54    {
55  1 JvOptionPane.setInteractiveMode(false);
56  1 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
57    }
58   
 
59  1 toggle @Test(groups = "Functional")
60    public void testFindColumnsWithFeature()
61    {
62  1 SequenceI seq1 = new Sequence("seq1", "-a-MMMaaaaaaaaaaaaaaaa");
63  1 SequenceI seq2 = new Sequence("seq2", "aa--aMM-MMMMMaaaaaaaaaa");
64  1 SequenceI seq3 = new Sequence("seq3", "abcab-caD-aaMMMMMaaaaa");
65  1 SequenceI seq4 = new Sequence("seq4", "abc--abcaaaaaaaaaaaaaa");
66   
67    /*
68    * features start/end are base 1
69    */
70  1 seq1.addSequenceFeature(new SequenceFeature("Metal", "desc", 2, 4, 0f,
71    null));
72  1 seq1.addSequenceFeature(new SequenceFeature("Helix", "desc", 1, 15, 0f,
73    null));
74  1 seq2.addSequenceFeature(new SequenceFeature("Metal", "desc", 4, 10,
75    10f,
76    null));
77  1 seq3.addSequenceFeature(new SequenceFeature("Metal", "desc", 11, 15,
78    10f, null));
79    // disulfide bond is a 'contact feature' - only select its 'start' and 'end'
80  1 seq3.addSequenceFeature(new SequenceFeature("disulfide bond", "desc",
81    8, 12, 0f, null));
82   
83    /*
84    * select the first five columns --> Metal in seq1 cols 4-5
85    */
86  1 SequenceGroup sg = new SequenceGroup();
87  1 sg.setStartRes(0); // base 0
88  1 sg.setEndRes(4);
89  1 sg.addSequence(seq1, false);
90  1 sg.addSequence(seq2, false);
91  1 sg.addSequence(seq3, false);
92  1 sg.addSequence(seq4, false);
93   
94    /*
95    * set features visible on a viewport as only visible features are selected
96    */
97  1 AlignFrame af = new AlignFrame(new Alignment(new SequenceI[] { seq1,
98    seq2, seq3, seq4 }), 100, 100);
99  1 af.getFeatureRenderer().findAllFeatures(true);
100   
101  1 AlignViewController avc = new AlignViewController(af, af.getViewport(),
102    af.alignPanel);
103   
104  1 BitSet bs = new BitSet();
105  1 int seqCount = avc.findColumnsWithFeature("Metal", sg, bs);
106  1 assertEquals(1, seqCount);
107  1 assertEquals(2, bs.cardinality());
108  1 assertTrue(bs.get(3)); // base 0
109  1 assertTrue(bs.get(4));
110   
111    /*
112    * select the first seven columns: Metal in seq1 cols 4-6, seq2 cols 6-7
113    */
114  1 sg.setEndRes(6);
115  1 bs.clear();
116  1 seqCount = avc.findColumnsWithFeature("Metal", sg, bs);
117  1 assertEquals(2, seqCount);
118  1 assertEquals(4, bs.cardinality());
119  1 assertTrue(bs.get(3));
120  1 assertTrue(bs.get(4));
121  1 assertTrue(bs.get(5));
122  1 assertTrue(bs.get(6));
123   
124    /*
125    * select column 14: Metal in seq3 only
126    */
127  1 sg.setStartRes(13);
128  1 sg.setEndRes(13);
129  1 bs.clear();
130  1 seqCount = avc.findColumnsWithFeature("Metal", sg, bs);
131  1 assertEquals(1, seqCount);
132  1 assertEquals(1, bs.cardinality());
133  1 assertTrue(bs.get(13));
134   
135    /*
136    * select columns 18-20: no Metal feature
137    */
138  1 sg.setStartRes(17);
139  1 sg.setEndRes(19);
140  1 bs.clear();
141  1 seqCount = avc.findColumnsWithFeature("Metal", sg, bs);
142  1 assertEquals(0, seqCount);
143  1 assertEquals(0, bs.cardinality());
144   
145    /*
146    * threshold Metal to hide where score < 5
147    * seq1 feature in columns 4-6 is hidden
148    * seq2 feature in columns 6-7 is shown
149    */
150  1 FeatureColourI fc = new FeatureColour(Color.red, Color.blue, 0f, 10f);
151  1 fc.setAboveThreshold(true);
152  1 fc.setThreshold(5f);
153  1 af.getFeatureRenderer().setColour("Metal", fc);
154  1 sg.setStartRes(0);
155  1 sg.setEndRes(6);
156  1 bs.clear();
157  1 seqCount = avc.findColumnsWithFeature("Metal", sg, bs);
158  1 assertEquals(1, seqCount);
159  1 assertEquals(2, bs.cardinality());
160  1 assertTrue(bs.get(5));
161  1 assertTrue(bs.get(6));
162   
163    /*
164    * columns 11-13 should not match disulfide bond at 8/12
165    */
166  1 sg.setStartRes(10);
167  1 sg.setEndRes(12);
168  1 bs.clear();
169  1 seqCount = avc.findColumnsWithFeature("disulfide bond", sg, bs);
170  1 assertEquals(0, seqCount);
171  1 assertEquals(0, bs.cardinality());
172   
173    /*
174    * columns 6-18 should match disulfide bond at columns 9, 14
175    */
176  1 sg.setStartRes(5);
177  1 sg.setEndRes(17);
178  1 bs.clear();
179  1 seqCount = avc.findColumnsWithFeature("disulfide bond", sg, bs);
180  1 assertEquals(1, seqCount);
181  1 assertEquals(2, bs.cardinality());
182  1 assertTrue(bs.get(8));
183  1 assertTrue(bs.get(13));
184   
185    /*
186    * look for a feature that isn't there
187    */
188  1 sg.setStartRes(0);
189  1 sg.setEndRes(19);
190  1 bs.clear();
191  1 seqCount = avc.findColumnsWithFeature("Pfam", sg, bs);
192  1 assertEquals(0, seqCount);
193  1 assertEquals(0, bs.cardinality());
194    }
195   
196    /**
197    * shameless copy of test data from findFeature for testing mark columns from
198    * highlight
199    */
 
200  1 toggle @Test(groups = "Functional")
201    public void testSelectColumnsWithHighlight()
202    {
203  1 AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
204    "seq1 aMMMaaaaaaaaaaaaaaaa\n" + "seq2 aaaMMMMMMMaaaaaaaaaa\n"
205    + "seq3 aaaaaaaaaaMMMMMaaaaa\n"
206    + "seq4 aaaaaaaaaaaaaaaaaaaa\n", DataSourceType.PASTE);
207   
208  1 SearchResultsI sr = new SearchResults();
209  1 SequenceI[] sqs = af.getViewport().getAlignment().getSequencesArray();
210  1 SequenceI seq1 = sqs[0];
211  1 SequenceI seq2 = sqs[1];
212  1 SequenceI seq3 = sqs[2];
213  1 SequenceI seq4 = sqs[3];
214   
215    /*
216    * features start/end are base 1
217    */
218  1 sr.addResult(seq1, 2, 4);
219  1 sr.addResult(seq2, 4, 10);
220  1 sr.addResult(seq3, 11, 15);
221   
222    /*
223    * test Match/Find works first
224    */
225  1 Finder f = new Finder(af.getViewport().getAlignment(), null);
226  1 f.setFindAll(true);
227  1 f.setCaseSensitive(true);
228  1 f.find("M+");
229  1 assertEquals(
230    "Finder found different set of results to manually created SearchResults",
231    sr, f.getSearchResults());
232   
233    /*
234    * now check simple mark columns from find operation
235    */
236  1 af.getViewport().setSearchResults(sr);
237  1 AlignViewControllerI avc = af.avc;
238   
239  1 avc.markHighlightedColumns(false, false, false);
240  1 assertTrue("Didn't select highlighted columns", Arrays.deepEquals(af
241    .getViewport().getColumnSelection().getSelectedRanges()
242    .toArray(), new int[][] { { 1, 14 } }));
243    }
244    }