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 javax.swing.SwingUtilities;
38 import org.testng.annotations.BeforeMethod;
39 import org.testng.annotations.Test;
41 public class AlignmentPanelTest
43 SequenceI seq1 = new Sequence(
45 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
47 SequenceI seq2 = new Sequence(
49 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
51 SequenceI seq3 = new Sequence(
53 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
55 SequenceI seq4 = new Sequence(
57 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
59 SequenceI seq5 = new Sequence(
61 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
63 SequenceI seq6 = new Sequence(
65 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
67 SequenceI seq7 = new Sequence(
69 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
71 SequenceI seq8 = new Sequence(
73 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
75 SequenceI seq9 = new Sequence(
77 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
79 SequenceI seq10 = new Sequence(
81 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
83 SequenceI seq11 = new Sequence(
85 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
87 SequenceI seq12 = new Sequence(
89 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
91 SequenceI seq13 = new Sequence(
93 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
95 SequenceI seq14 = new Sequence(
97 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
99 SequenceI seq15 = new Sequence(
101 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
103 SequenceI seq16 = new Sequence(
105 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
107 SequenceI seq17 = new Sequence(
109 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
111 SequenceI seq18 = new Sequence(
113 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
115 SequenceI seq19 = new Sequence(
117 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
119 SequenceI seq20 = new Sequence(
121 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
123 SequenceI seq21 = new Sequence(
125 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
127 SequenceI seq22 = new Sequence(
129 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
131 SequenceI seq23 = new Sequence(
133 "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
137 @BeforeMethod(alwaysRun = true)
138 public void setUp() throws InvocationTargetException, InterruptedException
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);
149 * ensure the panel has been repainted and so ViewportRanges set
151 SwingUtilities.invokeAndWait(new Runnable() {
158 * wait for Consensus thread to complete
162 while (af.getViewport().getConsensusSeq() == null)
167 } catch (InterruptedException e)
176 * Test side effect that end residue is set correctly by setScrollValues, with
177 * or without hidden columns
179 @Test(groups = "Functional")
180 public void TestSetScrollValues()
182 ViewportRanges ranges = af.getViewport().getRanges();
183 af.alignPanel.setScrollValues(0, 0);
185 int oldres = ranges.getEndRes();
186 af.alignPanel.setScrollValues(-1, 5);
188 // setting -ve x value does not change residue
189 assertEquals(ranges.getEndRes(), oldres);
191 af.alignPanel.setScrollValues(0, 5);
193 // setting 0 as x value does not change residue
194 assertEquals(ranges.getEndRes(), oldres);
196 af.alignPanel.setScrollValues(5, 5);
197 // setting x value to 5 extends endRes by 5 residues
198 assertEquals(ranges.getEndRes(), oldres + 5);
200 // scroll to position after hidden columns sets endres to oldres (width) +
203 af.getViewport().hideColumns(30, 50);
204 af.alignPanel.setScrollValues(scrollpos, 5);
205 assertEquals(ranges.getEndRes(), oldres + scrollpos);
207 // scroll to position within hidden columns, still sets endres to oldres +
209 // not sure if this is actually correct behaviour but this is what Jalview
212 af.getViewport().showAllHiddenColumns();
213 af.getViewport().hideColumns(30, 50);
214 af.alignPanel.setScrollValues(scrollpos, 5);
215 assertEquals(ranges.getEndRes(), oldres + scrollpos);
217 // scroll to position within <width> distance of the end of the alignment
218 // endRes should be set to width of alignment - 1
220 af.getViewport().showAllHiddenColumns();
221 af.alignPanel.setScrollValues(scrollpos, 5);
222 assertEquals(ranges.getEndRes(), af.getViewport()
223 .getAlignment().getWidth() - 1);
225 // now hide some columns, and scroll to position within <width>
226 // distance of the end of the alignment
227 // endRes should be set to width of alignment - 1 - the number of hidden
229 af.getViewport().hideColumns(30, 50);
230 af.alignPanel.setScrollValues(scrollpos, 5);
231 assertEquals(ranges.getEndRes(), af.getViewport()
232 .getAlignment().getWidth() - 1 - 21); // 21 is the number of hidden
237 * Test that update layout reverts to original (unwrapped) values for endRes
238 * when switching from wrapped back to unwrapped mode (JAL-2739)
240 @Test(groups = "Functional")
241 public void TestUpdateLayout_endRes()
243 // get details of original alignment dimensions
244 ViewportRanges ranges = af.getViewport().getRanges();
245 int endres = ranges.getEndRes();
248 af.alignPanel.getAlignViewport().setWrapAlignment(true);
249 af.alignPanel.updateLayout();
251 // endRes has changed
252 assertNotEquals(ranges.getEndRes(), endres);
255 af.alignPanel.getAlignViewport().setWrapAlignment(false);
256 af.alignPanel.updateLayout();
258 // endRes back to original value
259 assertEquals(ranges.getEndRes(), endres);