JAL-1889 hack to ensure endRes is computed in setUp
[jalview.git] / test / jalview / gui / AlignmentPanelTest.java
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.gui;
22
23 import static org.testng.Assert.assertEquals;
24 import static org.testng.Assert.assertNotEquals;
25
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;
33
34 import java.lang.reflect.InvocationTargetException;
35
36 import javax.swing.SwingUtilities;
37
38 import org.testng.annotations.BeforeMethod;
39 import org.testng.annotations.Test;
40
41 public class AlignmentPanelTest
42 {
43   SequenceI seq1 = new Sequence(
44           "Seq1",
45           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
46
47   SequenceI seq2 = new Sequence(
48           "Seq2",
49           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
50
51   SequenceI seq3 = new Sequence(
52           "Seq3",
53           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
54
55   SequenceI seq4 = new Sequence(
56           "Seq4",
57           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
58
59   SequenceI seq5 = new Sequence(
60           "Seq5",
61           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
62
63   SequenceI seq6 = new Sequence(
64           "Seq6",
65           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
66
67   SequenceI seq7 = new Sequence(
68           "Seq7",
69           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
70
71   SequenceI seq8 = new Sequence(
72           "Seq8",
73           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
74
75   SequenceI seq9 = new Sequence(
76           "Seq9",
77           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
78
79   SequenceI seq10 = new Sequence(
80           "Seq10",
81           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
82
83   SequenceI seq11 = new Sequence(
84           "Seq11",
85           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
86
87   SequenceI seq12 = new Sequence(
88           "Seq12",
89           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
90
91   SequenceI seq13 = new Sequence(
92           "Seq13",
93           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
94
95   SequenceI seq14 = new Sequence(
96           "Seq14",
97           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
98
99   SequenceI seq15 = new Sequence(
100           "Seq15",
101           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
102
103   SequenceI seq16 = new Sequence(
104           "Seq16",
105           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
106
107   SequenceI seq17 = new Sequence(
108           "Seq17",
109           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
110
111   SequenceI seq18 = new Sequence(
112           "Seq18",
113           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
114
115   SequenceI seq19 = new Sequence(
116           "Seq19",
117           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
118
119   SequenceI seq20 = new Sequence(
120           "Seq20",
121           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
122
123   SequenceI seq21 = new Sequence(
124           "Seq21",
125           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
126
127   SequenceI seq22 = new Sequence(
128           "Seq22",
129           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
130
131   SequenceI seq23 = new Sequence(
132           "Seq23",
133           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
134
135   AlignFrame af;
136
137   @BeforeMethod(alwaysRun = true)
138   public void setUp() throws InvocationTargetException, InterruptedException
139   {
140     Jalview.main(new String[] { "-nonews", "-props",
141         "test/jalview/testProps.jvprops" });
142
143     Cache.applicationProperties.setProperty("SHOW_IDENTITY",
144             Boolean.TRUE.toString());
145     af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
146             DataSourceType.FILE);
147     
148     /*
149      * ensure the panel has been repainted and so ViewportRanges set
150      */
151     SwingUtilities.invokeAndWait(new Runnable() {
152                 @Override
153                 public void run() {
154                     af.repaint();
155                 }});
156
157     /*
158      * wait for Consensus thread to complete
159      */
160     synchronized (this)
161     {
162       while (af.getViewport().getConsensusSeq() == null)
163       {
164         try
165         {
166           wait(50);
167         } catch (InterruptedException e)
168         {
169         }
170       }
171     }
172   }
173
174
175   /**
176    * Test side effect that end residue is set correctly by setScrollValues, with
177    * or without hidden columns
178    */
179   @Test(groups = "Functional")
180   public void TestSetScrollValues()
181   {
182     ViewportRanges ranges = af.getViewport().getRanges();
183     af.alignPanel.setScrollValues(0, 0);
184
185     int oldres = ranges.getEndRes();
186     af.alignPanel.setScrollValues(-1, 5);
187
188     // setting -ve x value does not change residue
189     assertEquals(ranges.getEndRes(), oldres);
190
191     af.alignPanel.setScrollValues(0, 5);
192
193     // setting 0 as x value does not change residue
194     assertEquals(ranges.getEndRes(), oldres);
195
196     af.alignPanel.setScrollValues(5, 5);
197     // setting x value to 5 extends endRes by 5 residues
198     assertEquals(ranges.getEndRes(), oldres + 5);
199
200     // scroll to position after hidden columns sets endres to oldres (width) +
201     // position
202     int scrollpos = 60;
203     af.getViewport().hideColumns(30, 50);
204     af.alignPanel.setScrollValues(scrollpos, 5);
205     assertEquals(ranges.getEndRes(), oldres + scrollpos);
206
207     // scroll to position within hidden columns, still sets endres to oldres +
208     // position
209     // not sure if this is actually correct behaviour but this is what Jalview
210     // currently does
211     scrollpos = 40;
212     af.getViewport().showAllHiddenColumns();
213     af.getViewport().hideColumns(30, 50);
214     af.alignPanel.setScrollValues(scrollpos, 5);
215     assertEquals(ranges.getEndRes(), oldres + scrollpos);
216
217     // scroll to position within <width> distance of the end of the alignment
218     // endRes should be set to width of alignment - 1
219     scrollpos = 130;
220     af.getViewport().showAllHiddenColumns();
221     af.alignPanel.setScrollValues(scrollpos, 5);
222     assertEquals(ranges.getEndRes(), af.getViewport()
223             .getAlignment().getWidth() - 1);
224
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
228     // columns
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
233                                                   // columns
234   }
235
236   /**
237    * Test that update layout reverts to original (unwrapped) values for endRes
238    * when switching from wrapped back to unwrapped mode (JAL-2739)
239    */
240   @Test(groups = "Functional")
241   public void TestUpdateLayout_endRes()
242   {
243     // get details of original alignment dimensions
244     ViewportRanges ranges = af.getViewport().getRanges();
245     int endres = ranges.getEndRes();
246
247     // wrap
248     af.alignPanel.getAlignViewport().setWrapAlignment(true);
249     af.alignPanel.updateLayout();
250
251     // endRes has changed
252     assertNotEquals(ranges.getEndRes(), endres);
253
254     // unwrap
255     af.alignPanel.getAlignViewport().setWrapAlignment(false);
256     af.alignPanel.updateLayout();
257
258     // endRes back to original value
259     assertEquals(ranges.getEndRes(), endres);
260
261   }
262 }