JAL-3253-applet no-NCList IntervalStore fixes
[jalview.git] / test / jalview / renderer / OverviewResColourFinderTest.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.renderer;
22
23 import static org.testng.AssertJUnit.assertEquals;
24
25 import jalview.bin.Cache;
26 import jalview.datamodel.Alignment;
27 import jalview.datamodel.AlignmentI;
28 import jalview.datamodel.Sequence;
29 import jalview.datamodel.SequenceGroup;
30 import jalview.datamodel.SequenceI;
31 import jalview.gui.AlignViewport;
32 import jalview.gui.JvOptionPane;
33 import jalview.schemes.ColourSchemeI;
34 import jalview.schemes.UserColourScheme;
35 import jalview.schemes.ZappoColourScheme;
36
37 import java.awt.Color;
38 import java.util.ArrayList;
39
40 import org.testng.annotations.BeforeClass;
41 import org.testng.annotations.Test;
42
43 public class OverviewResColourFinderTest
44 {
45
46   @BeforeClass(alwaysRun = true)
47   public void setUpJvOptionPane()
48   {
49     JvOptionPane.setInteractiveMode(false);
50     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
51     Cache.loadProperties("test/jalview/io/testProps.jvprops");
52   }
53
54   @Test(groups = { "Functional" })
55   public void testGetResidueBoxColour_none()
56   {
57     SequenceI seq = new Sequence("name", "MA--TVLGSPRAPAFF");
58     AlignmentI al = new Alignment(new SequenceI[] { seq });
59     final AlignViewport av = new AlignViewport(al);
60     ResidueColourFinder rcf = new OverviewResColourFinder();
61
62     ResidueShaderI sh = av.getResidueShading();
63
64     // gaps are grey, residues white
65     assertEquals(Color.white,
66             rcf.getResidueColour(true, sh, null, seq, 0, null));
67     System.out.println(rcf.getResidueColour(true, sh, null, seq, 2, null));
68     assertEquals(Color.lightGray, rcf.getResidueColour(true,
69             sh, null, seq, 2, null));
70
71     // unaffected by showBoxes setting
72     assertEquals(Color.white, rcf.getResidueColour(false,
73             sh, null, seq, 0, null));
74     assertEquals(Color.lightGray, rcf.getResidueColour(false,
75             sh, null, seq, 2, null));
76   }
77
78   @Test(groups = { "Functional" })
79   public void testGetResidueBoxColour_zappo()
80   {
81     SequenceI seq = new Sequence("name", "MAT--GSPRAPAFF"); // FER1_MAIZE... + a
82                                                             // gap
83     AlignmentI al = new Alignment(new SequenceI[] { seq });
84     final AlignViewport av = new AlignViewport(al);
85     ResidueColourFinder rcf = new OverviewResColourFinder();
86     av.setGlobalColourScheme(new ZappoColourScheme());
87
88     // @see ResidueProperties.zappo
89     assertEquals(Color.pink,
90             rcf.getResidueColour(true, av.getResidueShading(),
91             null, seq, 0, null)); // M
92     assertEquals(Color.green,
93             rcf.getResidueColour(true, av.getResidueShading(),
94             null, seq, 2, null)); // T
95     assertEquals(Color.magenta,
96             rcf.getResidueColour(true, av.getResidueShading(),
97             null, seq, 5, null)); // G
98     assertEquals(Color.orange,
99             rcf.getResidueColour(true, av.getResidueShading(),
100             null, seq, 12, null)); // F
101
102     // gap colour not specified so gaps are lightGray
103     assertEquals(Color.lightGray, rcf
104             .getResidueColour(true, av.getResidueShading(), null, seq, 3,
105                     null));
106
107     // unaffected by showBoxes setting
108     assertEquals(Color.pink, rcf.getResidueColour(false,
109             av.getResidueShading(), null, seq, 0, null)); // M
110     assertEquals(Color.green, rcf.getResidueColour(false,
111             av.getResidueShading(), null, seq, 2, null)); // T
112     assertEquals(Color.magenta, rcf.getResidueColour(false,
113             av.getResidueShading(), null, seq, 5, null)); // G
114     assertEquals(Color.orange, rcf.getResidueColour(false,
115             av.getResidueShading(), null, seq, 12, null)); // F
116
117     // gap colour not specified so gaps are lightGray
118     assertEquals(Color.lightGray, rcf
119             .getResidueColour(false, av.getResidueShading(), null, seq, 3,
120                     null));
121
122   }
123
124   @Test(groups = { "Functional" })
125   public void testGetResidueBoxColour_userdef()
126   {
127     SequenceI seq = new Sequence("name", "MAT--GSPRAPAFF"); // FER1_MAIZE... + a
128                                                             // gap
129     AlignmentI al = new Alignment(new SequenceI[] { seq });
130     final AlignViewport av = new AlignViewport(al);
131     ResidueColourFinder rcf = new OverviewResColourFinder();
132
133     Color[] newColours = new Color[24];
134     for (int i = 0; i < 24; i++)
135     {
136       newColours[i] = null;
137     }
138
139     av.setGlobalColourScheme(new UserColourScheme(newColours));
140     seq.resetColors();
141
142     // gap colour not specified so gaps are lightGray
143     assertEquals(Color.lightGray, rcf
144             .getResidueColour(true, av.getResidueShading(), null, seq, 3,
145                     null));
146
147     newColours[23] = Color.pink;
148     av.setGlobalColourScheme(new UserColourScheme(newColours));
149     seq.resetColors();
150
151     // gap colour specified as pink
152     assertEquals(Color.pink, rcf.getResidueColour(true,
153             av.getResidueShading(),
154             null, seq, 3, null));
155
156     // unaffected by showBoxes setting
157     // gap colour not specified so gaps are lightGray
158     newColours[23] = null;
159     seq.resetColors();
160
161     assertEquals(Color.lightGray, rcf.getResidueColour(false,
162             av.getResidueShading(), null, seq, 3, null));
163
164     newColours[23] = Color.pink;
165     av.setGlobalColourScheme(new UserColourScheme(newColours));
166     seq.resetColors();
167
168     // gap colour specified as pink
169     assertEquals(Color.pink, rcf.getResidueColour(false,
170             av.getResidueShading(), null, seq, 3, null));
171   }
172
173   @Test
174   public void testGetResidueBoxColour_group()
175   {
176     SequenceI seq = new Sequence("name", "MA--TVLGSPRAPAFF");
177     AlignmentI al = new Alignment(new SequenceI[] { seq });
178     
179     ColourSchemeI cs = new ZappoColourScheme();
180     ArrayList<SequenceI> seqlist = new ArrayList<>();
181     seqlist.add(seq);
182     SequenceGroup sg = new SequenceGroup(seqlist, "testgroup", cs, true,
183             true, true, 5, 9);
184     al.addGroup(sg);
185     SequenceGroup[] groups = new SequenceGroup[1];
186     groups[0] = sg;
187     
188     final AlignViewport av = new AlignViewport(al);
189     ResidueColourFinder rcf = new OverviewResColourFinder();
190     
191     // G in group specified as magenta in Zappo
192     assertEquals(Color.magenta, rcf.getResidueColour(false,
193             av.getResidueShading(), groups, seq, 7, null));
194
195     // Residue outside group coloured white
196     assertEquals(Color.white, rcf.getResidueColour(false,
197             av.getResidueShading(), groups, seq, 0, null));
198
199     // Gap outside group coloured lightgray
200     assertEquals(Color.lightGray, rcf.getResidueColour(false,
201             av.getResidueShading(), groups, seq, 2, null));
202
203     // use legacy colouring
204     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
205
206     seq.resetColors();
207   
208     // G in group specified as magenta in Zappo
209     assertEquals(Color.magenta, rcf.getResidueColour(false,
210             av.getResidueShading(), groups, seq, 7, null));
211
212     // Residue outside group coloured lightgray
213     assertEquals(Color.lightGray, rcf.getResidueColour(false,
214             av.getResidueShading(), groups, seq, 0, null));
215
216     // Gap outside group coloured white
217     assertEquals(Color.white, rcf.getResidueColour(false,
218             av.getResidueShading(), groups, seq, 2, null));
219
220     // use new colouring
221     rcf = new OverviewResColourFinder(false, Color.blue, Color.red);
222
223     seq.resetColors();
224
225     // G in group specified as magenta in Zappo
226     assertEquals(Color.magenta, rcf.getResidueColour(false,
227             av.getResidueShading(), groups, seq, 7, null));
228
229     // Residue outside group coloured white
230     assertEquals(Color.white, rcf.getResidueColour(false,
231             av.getResidueShading(), groups, seq, 0, null));
232
233     // Gap outside group coloured blue
234     assertEquals(Color.blue, rcf.getResidueColour(false,
235             av.getResidueShading(), groups, seq, 2, null));
236   }
237
238   @Test
239   public void testGetBoxColour()
240   {
241     SequenceI seq = new Sequence("name", "MAT--GSPRAPAFF"); // FER1_MAIZE... + a
242                                                             // gap
243     AlignmentI al = new Alignment(new SequenceI[] { seq });
244     final AlignViewport av = new AlignViewport(al);
245
246     // non-legacy colouring
247     ResidueColourFinder rcf = new OverviewResColourFinder();
248     ResidueShaderI shader = new ResidueShader();
249
250     seq.resetColors();
251
252     // residues white
253     Color c = rcf.getBoxColour(shader, seq, 0);
254     assertEquals(Color.white, c);
255
256     // gaps gap colour
257     c = rcf.getBoxColour(shader, seq, 3);
258     assertEquals(
259             jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_GAP,
260             c);
261
262     // legacy colouring set explicitly via constructor
263     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
264     shader = new ResidueShader();
265
266     seq.resetColors();
267
268     // residues light gray
269     c = rcf.getBoxColour(shader, seq, 0);
270     assertEquals(Color.lightGray, c);
271
272     // gaps white
273     c = rcf.getBoxColour(shader, seq, 3);
274     assertEquals(Color.white, c);
275
276     // legacy colouring off
277     rcf = new OverviewResColourFinder();
278     shader = new ResidueShader();
279
280     seq.resetColors();
281
282     // residues white
283     c = rcf.getBoxColour(shader, seq, 0);
284     assertEquals(Color.white, c);
285
286     // gaps gap colour
287     c = rcf.getBoxColour(shader, seq, 3);
288     assertEquals(
289             jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_GAP,
290             c);
291
292     // non legacy colouring with colour scheme
293     rcf = new OverviewResColourFinder(false, Color.blue, Color.red);
294     shader = new ResidueShader(new ZappoColourScheme());
295
296     seq.resetColors();
297
298     // M residue pink
299     c = rcf.getBoxColour(shader, seq, 0);
300     assertEquals(Color.pink, c);
301
302     // gaps blue
303     c = rcf.getBoxColour(shader, seq, 3);
304     assertEquals(Color.blue, c);
305
306     // legacy colouring with colour scheme
307     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
308
309     seq.resetColors();
310
311     // M residue pink
312     c = rcf.getBoxColour(shader, seq, 0);
313     assertEquals(Color.pink, c);
314
315     // gaps white
316     c = rcf.getBoxColour(shader, seq, 3);
317     assertEquals(Color.white, c);
318   }
319 }