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