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 @Test(singleThreaded = true)
40 public class AlignmentPanelTest
42 SequenceI seq1 = new Sequence(
44 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
46 SequenceI seq2 = new Sequence(
48 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
50 SequenceI seq3 = new Sequence(
52 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
54 SequenceI seq4 = new Sequence(
56 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
58 SequenceI seq5 = new Sequence(
60 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
62 SequenceI seq6 = new Sequence(
64 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
66 SequenceI seq7 = new Sequence(
68 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
70 SequenceI seq8 = new Sequence(
72 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
74 SequenceI seq9 = new Sequence(
76 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
78 SequenceI seq10 = new Sequence(
80 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
82 SequenceI seq11 = new Sequence(
84 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
86 SequenceI seq12 = new Sequence(
88 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
90 SequenceI seq13 = new Sequence(
92 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
94 SequenceI seq14 = new Sequence(
96 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
98 SequenceI seq15 = new Sequence(
100 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
102 SequenceI seq16 = new Sequence(
104 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
106 SequenceI seq17 = new Sequence(
108 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
110 SequenceI seq18 = new Sequence(
112 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
114 SequenceI seq19 = new Sequence(
116 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
118 SequenceI seq20 = new Sequence(
120 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
122 SequenceI seq21 = new Sequence(
124 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
126 SequenceI seq22 = new Sequence(
128 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
130 SequenceI seq23 = new Sequence(
132 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
136 @BeforeMethod(alwaysRun = true)
137 public void setUp() throws InvocationTargetException, InterruptedException
139 Jalview.setSynchronous(true);
140 Jalview.main(new String[] { "-nonews", "-props",
141 "test/jalview/testProps.jvprops" });
143 Cache.setPropertyNoSave("SHOW_IDENTITY",
144 Boolean.TRUE.toString());
145 af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
146 DataSourceType.FILE);
148 af.paintImmediately(af.getBounds());
151 * wait for Consensus thread to complete
155 while (af.getViewport().getConsensusSeq() == null)
159 wait(250); // BH was 50
160 } catch (InterruptedException e)
169 * Test side effect that end residue is set correctly by setScrollValues, with
170 * or without hidden columns
172 @Test(groups = "Functional")
173 public void testSetScrollValues()
175 ViewportRanges ranges = af.getViewport().getRanges();
176 af.alignPanel.setScrollValues(0, 0);
178 int oldres = ranges.getEndRes();
179 af.alignPanel.setScrollValues(-1, 5);
181 // setting -ve x value does not change residue
182 assertEquals(ranges.getEndRes(), oldres);
184 af.alignPanel.setScrollValues(0, 5);
186 // setting 0 as x value does not change residue
187 assertEquals(ranges.getEndRes(), oldres);
189 af.alignPanel.setScrollValues(5, 5);
190 // setting x value to 5 extends endRes by 5 residues
191 assertEquals(ranges.getEndRes(), oldres + 5);
193 // scroll to position after hidden columns sets endres to oldres (width) +
196 af.getViewport().hideColumns(30, 50);
197 af.alignPanel.setScrollValues(scrollpos, 5);
199 af.paintImmediately(af.getBounds());
200 assertEquals(ranges.getEndRes(), oldres + scrollpos);
202 // scroll to position within hidden columns, still sets endres to oldres +
204 // not sure if this is actually correct behaviour but this is what Jalview
207 af.getViewport().showAllHiddenColumns();
208 af.getViewport().hideColumns(30, 50);
209 af.alignPanel.setScrollValues(scrollpos, 5);
210 assertEquals(ranges.getEndRes(), oldres + scrollpos);
212 // scroll to position within <width> distance of the end of the alignment
213 // endRes should be set to width of alignment - 1
215 af.getViewport().showAllHiddenColumns();
216 af.alignPanel.setScrollValues(scrollpos, 5);
217 af.paintImmediately(af.getBounds());
219 assertEquals(ranges.getEndRes(), af.getViewport()
220 .getAlignment().getWidth() - 1);
222 // now hide some columns, and scroll to position within <width>
223 // distance of the end of the alignment
224 // endRes should be set to width of alignment - 1 - the number of hidden
226 af.getViewport().hideColumns(30, 50);
227 af.paintImmediately(af.getBounds());
228 af.alignPanel.setScrollValues(scrollpos, 5);
229 assertEquals(ranges.getEndRes(), af.getViewport()
230 .getAlignment().getWidth() - 1 - 21); // 21 is the number of hidden
235 * Test that update layout reverts to original (unwrapped) values for endRes
236 * when switching from wrapped back to unwrapped mode (JAL-2739)
238 @Test(groups = "Functional")
239 public void testUpdateLayout_endRes()
241 // get details of original alignment dimensions
242 ViewportRanges ranges = af.getViewport().getRanges();
243 int endres = ranges.getEndRes();
245 // System.out.println("APT range end0 " + ranges.getEndRes());
247 af.alignPanel.getAlignViewport().setWrapAlignment(true);
248 af.alignPanel.updateLayout();
249 af.paintImmediately(af.getBounds());
251 // System.out.println("APT range end1 " + ranges.getEndRes());
252 // endRes has changed
253 assertNotEquals(ranges.getEndRes(), endres);
256 af.alignPanel.getAlignViewport().setWrapAlignment(false);
257 af.alignPanel.updateLayout();
259 af.paintImmediately(af.getBounds());
261 // System.out.println("APT range end3 " + ranges.getEndRes());
263 // endRes back to original value
264 System.out.println(endres + " vs " + ranges.getEndRes());
265 assertEquals(ranges.getEndRes(), endres);
269 private void waitSome()
278 } catch (InterruptedException e)