JAL-2421 Unit test
[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
25 import jalview.bin.Cache;
26 import jalview.bin.Jalview;
27 import jalview.datamodel.Sequence;
28 import jalview.datamodel.SequenceI;
29 import jalview.io.DataSourceType;
30 import jalview.io.FileLoader;
31
32 import org.testng.annotations.BeforeMethod;
33 import org.testng.annotations.Test;
34
35 public class AlignmentPanelTest
36 {
37   SequenceI seq1 = new Sequence(
38           "Seq1",
39           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
40
41   SequenceI seq2 = new Sequence(
42           "Seq2",
43           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
44
45   SequenceI seq3 = new Sequence(
46           "Seq3",
47           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
48
49   SequenceI seq4 = new Sequence(
50           "Seq4",
51           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
52
53   SequenceI seq5 = new Sequence(
54           "Seq5",
55           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
56
57   SequenceI seq6 = new Sequence(
58           "Seq6",
59           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
60
61   SequenceI seq7 = new Sequence(
62           "Seq7",
63           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
64
65   SequenceI seq8 = new Sequence(
66           "Seq8",
67           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
68
69   SequenceI seq9 = new Sequence(
70           "Seq9",
71           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
72
73   SequenceI seq10 = new Sequence(
74           "Seq10",
75           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
76
77   SequenceI seq11 = new Sequence(
78           "Seq11",
79           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
80
81   SequenceI seq12 = new Sequence(
82           "Seq12",
83           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
84
85   SequenceI seq13 = new Sequence(
86           "Seq13",
87           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
88
89   SequenceI seq14 = new Sequence(
90           "Seq14",
91           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
92
93   SequenceI seq15 = new Sequence(
94           "Seq15",
95           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
96
97   SequenceI seq16 = new Sequence(
98           "Seq16",
99           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
100
101   SequenceI seq17 = new Sequence(
102           "Seq17",
103           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
104
105   SequenceI seq18 = new Sequence(
106           "Seq18",
107           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
108
109   SequenceI seq19 = new Sequence(
110           "Seq19",
111           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
112
113   SequenceI seq20 = new Sequence(
114           "Seq20",
115           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
116
117   SequenceI seq21 = new Sequence(
118           "Seq21",
119           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
120
121   SequenceI seq22 = new Sequence(
122           "Seq22",
123           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
124
125   SequenceI seq23 = new Sequence(
126           "Seq23",
127           "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC");
128
129   AlignFrame af;
130
131   @BeforeMethod(alwaysRun = true)
132   public void setUp()
133   {
134     Jalview.main(new String[] { "-nonews", "-props",
135         "test/jalview/testProps.jvprops" });
136
137     Cache.applicationProperties.setProperty("SHOW_IDENTITY",
138             Boolean.TRUE.toString());
139     af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
140             DataSourceType.FILE);
141
142     /*
143      * wait for Consensus thread to complete
144      */
145     synchronized (this)
146     {
147       while (af.getViewport().getConsensusSeq() == null)
148       {
149         try
150         {
151           wait(50);
152         } catch (InterruptedException e)
153         {
154         }
155       }
156     }
157   }
158
159
160   /**
161    * Test side effect that end residue is set correctly by setScrollValues, with
162    * or without hidden columns
163    */
164   @Test(groups = "Functional")
165   public void TestSetScrollValues()
166   {
167     int oldres = af.getViewport().getEndRes();
168     af.alignPanel.setScrollValues(-1, 5);
169
170     // setting -ve x value does not change residue
171     assertEquals(af.getViewport().getEndRes(), oldres);
172
173     af.alignPanel.setScrollValues(0, 5);
174
175     // setting 0 as x value does not change residue
176     assertEquals(af.getViewport().getEndRes(), oldres);
177
178     af.alignPanel.setScrollValues(5, 5);
179     // setting x value to 5 extends endRes by 5 residues
180     assertEquals(af.getViewport().getEndRes(), oldres + 5);
181
182     // scroll to position after hidden columns sets endres to oldres (width) +
183     // position
184     int scrollpos = 60;
185     af.getViewport().hideColumns(30, 50);
186     af.alignPanel.setScrollValues(scrollpos, 5);
187     assertEquals(af.getViewport().getEndRes(), oldres + scrollpos);
188
189     // scroll to position within hidden columns, still sets endres to oldres +
190     // position
191     // not sure if this is actually correct behaviour but this is what Jalview
192     // currently does
193     scrollpos = 40;
194     af.getViewport().showAllHiddenColumns();
195     af.getViewport().hideColumns(30, 50);
196     af.alignPanel.setScrollValues(scrollpos, 5);
197     assertEquals(af.getViewport().getEndRes(), oldres + scrollpos);
198
199     // scroll to position within <width> distance of the end of the alignment
200     // endRes should be set to width of alignment - 1
201     scrollpos = 130;
202     af.getViewport().showAllHiddenColumns();
203     af.alignPanel.setScrollValues(scrollpos, 5);
204     assertEquals(af.getViewport().getEndRes(), af.getViewport()
205             .getAlignment().getWidth() - 1);
206
207     // now hide some columns, and scroll to position within <width>
208     // distance of the end of the alignment
209     // endRes should be set to width of alignment - 1 - the number of hidden
210     // columns
211     af.getViewport().hideColumns(30, 50);
212     af.alignPanel.setScrollValues(scrollpos, 5);
213     assertEquals(af.getViewport().getEndRes(), af.getViewport()
214             .getAlignment().getWidth() - 1 - 21); // 21 is the number of hidden
215                                                   // columns
216   }
217 }