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