JAL-3383 removing colour caching (to a separate branch)
[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
141     // gap colour not specified so gaps are lightGray
142     assertEquals(Color.lightGray, rcf
143             .getResidueColour(true, av.getResidueShading(), null, seq, 3,
144                     null));
145
146     newColours[23] = Color.pink;
147     av.setGlobalColourScheme(new UserColourScheme(newColours));
148
149     // gap colour specified as pink
150     assertEquals(Color.pink, rcf.getResidueColour(true,
151             av.getResidueShading(),
152             null, seq, 3, null));
153
154     // unaffected by showBoxes setting
155     // gap colour not specified so gaps are lightGray
156     newColours[23] = null;
157
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(groups = "Functional")
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 AlignViewport 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(groups = "Functional")
231   public void testGetBoxColour()
232   {
233     SequenceI seq = new Sequence("name", "MAT--GSPRAPAFF"); // FER1_MAIZE... + a
234                                                             // gap
235     AlignmentI al = new Alignment(new SequenceI[] { seq });
236     final AlignViewport av = new AlignViewport(al);
237
238     // non-legacy colouring
239     ResidueColourFinder rcf = new OverviewResColourFinder();
240     ResidueShaderI shader = new ResidueShader();
241
242     // residues white
243     Color c = rcf.getBoxColour(shader, seq, 0);
244     assertEquals(Color.white, c);
245
246     // gaps gap colour
247     c = rcf.getBoxColour(shader, seq, 3);
248     assertEquals(
249             jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_GAP,
250             c);
251
252     // legacy colouring set explicitly via constructor
253     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
254     shader = new ResidueShader();
255
256     // residues light gray
257     c = rcf.getBoxColour(shader, seq, 0);
258     assertEquals(Color.lightGray, c);
259
260     // gaps white
261     c = rcf.getBoxColour(shader, seq, 3);
262     assertEquals(Color.white, c);
263
264     // legacy colouring off
265     rcf = new OverviewResColourFinder();
266     shader = new ResidueShader();
267
268     // residues white
269     c = rcf.getBoxColour(shader, seq, 0);
270     assertEquals(Color.white, c);
271
272     // gaps gap colour
273     c = rcf.getBoxColour(shader, seq, 3);
274     assertEquals(
275             jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_GAP,
276             c);
277
278     // non legacy colouring with colour scheme
279     rcf = new OverviewResColourFinder(false, Color.blue, Color.red);
280     shader = new ResidueShader(new ZappoColourScheme());
281
282     // M residue pink
283     c = rcf.getBoxColour(shader, seq, 0);
284     assertEquals(Color.pink, c);
285
286     // gaps blue
287     c = rcf.getBoxColour(shader, seq, 3);
288     assertEquals(Color.blue, c);
289
290     // legacy colouring with colour scheme
291     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
292
293     // M residue pink
294     c = rcf.getBoxColour(shader, seq, 0);
295     assertEquals(Color.pink, c);
296
297     // gaps white
298     c = rcf.getBoxColour(shader, seq, 3);
299     assertEquals(Color.white, c);
300   }
301 }