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.
23 import static org.testng.Assert.assertEquals;
24 import static org.testng.Assert.assertNotEquals;
26 import jalview.bin.Cache;
27 import jalview.bin.Jalview;
28 import jalview.datamodel.Sequence;
29 import jalview.datamodel.SequenceI;
30 import jalview.io.DataSourceType;
31 import jalview.io.FileLoader;
32 import jalview.viewmodel.ViewportRanges;
34 import java.lang.reflect.InvocationTargetException;
36 import org.testng.annotations.BeforeMethod;
37 import org.testng.annotations.Test;
39 public class AlignmentPanelTest
41 SequenceI seq1 = new Sequence(
43 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
45 SequenceI seq2 = new Sequence(
47 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
49 SequenceI seq3 = new Sequence(
51 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
53 SequenceI seq4 = new Sequence(
55 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
57 SequenceI seq5 = new Sequence(
59 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
61 SequenceI seq6 = new Sequence(
63 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
65 SequenceI seq7 = new Sequence(
67 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
69 SequenceI seq8 = new Sequence(
71 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
73 SequenceI seq9 = new Sequence(
75 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
77 SequenceI seq10 = new Sequence(
79 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
81 SequenceI seq11 = new Sequence(
83 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
85 SequenceI seq12 = new Sequence(
87 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
89 SequenceI seq13 = new Sequence(
91 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
93 SequenceI seq14 = new Sequence(
95 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
97 SequenceI seq15 = new Sequence(
99 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
101 SequenceI seq16 = new Sequence(
103 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
105 SequenceI seq17 = new Sequence(
107 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
109 SequenceI seq18 = new Sequence(
111 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
113 SequenceI seq19 = new Sequence(
115 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
117 SequenceI seq20 = new Sequence(
119 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
121 SequenceI seq21 = new Sequence(
123 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
125 SequenceI seq22 = new Sequence(
127 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
129 SequenceI seq23 = new Sequence(
131 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
135 @BeforeMethod(alwaysRun = true)
136 public void setUp() throws InvocationTargetException, InterruptedException
138 Jalview.main(new String[] { "-nonews", "-props",
139 "test/jalview/testProps.jvprops" });
141 Cache.setPropertyNoSave("SHOW_IDENTITY",
142 Boolean.TRUE.toString());
143 af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
144 DataSourceType.FILE);
146 af.paintImmediately(af.getBounds());
149 * wait for Consensus thread to complete
153 while (af.getViewport().getConsensusSeq() == null)
157 wait(250); // BH was 50
158 } catch (InterruptedException e)
167 * Test side effect that end residue is set correctly by setScrollValues, with
168 * or without hidden columns
170 @Test(groups = "Functional")
171 public void testSetScrollValues()
173 ViewportRanges ranges = af.getViewport().getRanges();
174 af.alignPanel.setScrollValues(0, 0);
176 int oldres = ranges.getEndRes();
177 af.alignPanel.setScrollValues(-1, 5);
179 // setting -ve x value does not change residue
180 assertEquals(ranges.getEndRes(), oldres);
182 af.alignPanel.setScrollValues(0, 5);
184 // setting 0 as x value does not change residue
185 assertEquals(ranges.getEndRes(), oldres);
187 af.alignPanel.setScrollValues(5, 5);
188 // setting x value to 5 extends endRes by 5 residues
189 assertEquals(ranges.getEndRes(), oldres + 5);
191 // scroll to position after hidden columns sets endres to oldres (width) +
194 af.getViewport().hideColumns(30, 50);
195 af.alignPanel.setScrollValues(scrollpos, 5);
197 af.paintImmediately(af.getBounds());
198 assertEquals(ranges.getEndRes(), oldres + scrollpos);
200 // scroll to position within hidden columns, still sets endres to oldres +
202 // not sure if this is actually correct behaviour but this is what Jalview
205 af.getViewport().showAllHiddenColumns();
206 af.getViewport().hideColumns(30, 50);
207 af.alignPanel.setScrollValues(scrollpos, 5);
208 assertEquals(ranges.getEndRes(), oldres + scrollpos);
210 // scroll to position within <width> distance of the end of the alignment
211 // endRes should be set to width of alignment - 1
213 af.getViewport().showAllHiddenColumns();
214 af.alignPanel.setScrollValues(scrollpos, 5);
215 af.paintImmediately(af.getBounds());
216 assertEquals(ranges.getEndRes(), af.getViewport()
217 .getAlignment().getWidth() - 1);
219 // now hide some columns, and scroll to position within <width>
220 // distance of the end of the alignment
221 // endRes should be set to width of alignment - 1 - the number of hidden
223 af.getViewport().hideColumns(30, 50);
224 af.paintImmediately(af.getBounds());
225 af.alignPanel.setScrollValues(scrollpos, 5);
226 assertEquals(ranges.getEndRes(), af.getViewport()
227 .getAlignment().getWidth() - 1 - 21); // 21 is the number of hidden
232 * Test that update layout reverts to original (unwrapped) values for endRes
233 * when switching from wrapped back to unwrapped mode (JAL-2739)
235 @Test(groups = "Functional")
236 public void testUpdateLayout_endRes()
238 // get details of original alignment dimensions
239 ViewportRanges ranges = af.getViewport().getRanges();
240 int endres = ranges.getEndRes();
242 // System.out.println("APT range end0 " + ranges.getEndRes());
244 af.alignPanel.getAlignViewport().setWrapAlignment(true);
245 af.alignPanel.updateLayout();
246 af.paintImmediately(af.getBounds());
248 // System.out.println("APT range end1 " + ranges.getEndRes());
249 // endRes has changed
250 assertNotEquals(ranges.getEndRes(), endres);
253 af.alignPanel.getAlignViewport().setWrapAlignment(false);
254 af.alignPanel.updateLayout();
256 af.paintImmediately(af.getBounds());
258 // System.out.println("APT range end3 " + ranges.getEndRes());
260 // endRes back to original value
261 assertEquals(ranges.getEndRes(), endres);
265 private void waitSome()
274 } catch (InterruptedException e)