16875163b97e2fad660725bd749af1ddb65c1c04
[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     // gaps are grey, residues white
63     assertEquals(Color.white, rcf.getResidueColour(true,
64             av.getResidueShading(),
65             null, seq, 0, null));
66     assertEquals(Color.lightGray, rcf
67             .getResidueColour(true, av.getResidueShading(), null, seq, 2,
68                     null));
69
70     // unaffected by showBoxes setting
71     assertEquals(Color.white, rcf.getResidueColour(false,
72             av.getResidueShading(), null, seq, 0, null));
73     assertEquals(Color.lightGray, rcf.getResidueColour(false,
74             av.getResidueShading(), null, seq, 2, null));
75   }
76
77   @Test(groups = { "Functional" })
78   public void testGetResidueBoxColour_zappo()
79   {
80     SequenceI seq = new Sequence("name", "MAT--GSPRAPAFF"); // FER1_MAIZE... + a
81                                                             // gap
82     AlignmentI al = new Alignment(new SequenceI[] { seq });
83     final AlignViewport av = new AlignViewport(al);
84     ResidueColourFinder rcf = new OverviewResColourFinder();
85     av.setGlobalColourScheme(new ZappoColourScheme());
86
87     // @see ResidueProperties.zappo
88     assertEquals(Color.pink,
89             rcf.getResidueColour(true, av.getResidueShading(),
90             null, seq, 0, null)); // M
91     assertEquals(Color.green,
92             rcf.getResidueColour(true, av.getResidueShading(),
93             null, seq, 2, null)); // T
94     assertEquals(Color.magenta,
95             rcf.getResidueColour(true, av.getResidueShading(),
96             null, seq, 5, null)); // G
97     assertEquals(Color.orange,
98             rcf.getResidueColour(true, av.getResidueShading(),
99             null, seq, 12, null)); // F
100
101     // gap colour not specified so gaps are lightGray
102     assertEquals(Color.lightGray, rcf
103             .getResidueColour(true, av.getResidueShading(), null, seq, 3,
104                     null));
105
106     // unaffected by showBoxes setting
107     assertEquals(Color.pink, rcf.getResidueColour(false,
108             av.getResidueShading(), null, seq, 0, null)); // M
109     assertEquals(Color.green, rcf.getResidueColour(false,
110             av.getResidueShading(), null, seq, 2, null)); // T
111     assertEquals(Color.magenta, rcf.getResidueColour(false,
112             av.getResidueShading(), null, seq, 5, null)); // G
113     assertEquals(Color.orange, rcf.getResidueColour(false,
114             av.getResidueShading(), null, seq, 12, null)); // F
115
116     // gap colour not specified so gaps are lightGray
117     assertEquals(Color.lightGray, rcf
118             .getResidueColour(false, av.getResidueShading(), null, seq, 3,
119                     null));
120
121   }
122
123   @Test(groups = { "Functional" })
124   public void testGetResidueBoxColour_userdef()
125   {
126     SequenceI seq = new Sequence("name", "MAT--GSPRAPAFF"); // FER1_MAIZE... + a
127                                                             // gap
128     AlignmentI al = new Alignment(new SequenceI[] { seq });
129     final AlignViewport av = new AlignViewport(al);
130     ResidueColourFinder rcf = new OverviewResColourFinder();
131
132     Color[] newColours = new Color[24];
133     for (int i = 0; i < 24; i++)
134     {
135       newColours[i] = null;
136     }
137
138     av.setGlobalColourScheme(new UserColourScheme(newColours));
139
140     // gap colour not specified so gaps are lightGray
141     assertEquals(Color.lightGray, rcf
142             .getResidueColour(true, av.getResidueShading(), null, seq, 3,
143                     null));
144
145     newColours[23] = Color.pink;
146     av.setGlobalColourScheme(new UserColourScheme(newColours));
147
148     // gap colour specified as pink
149     assertEquals(Color.pink, rcf.getResidueColour(true,
150             av.getResidueShading(),
151             null, seq, 3, null));
152
153     // unaffected by showBoxes setting
154     // gap colour not specified so gaps are lightGray
155     newColours[23] = null;
156     assertEquals(Color.lightGray, rcf.getResidueColour(false,
157             av.getResidueShading(), null, seq, 3, null));
158
159     newColours[23] = Color.pink;
160     av.setGlobalColourScheme(new UserColourScheme(newColours));
161
162     // gap colour specified as pink
163     assertEquals(Color.pink, rcf.getResidueColour(false,
164             av.getResidueShading(), null, seq, 3, null));
165   }
166
167   @Test
168   public void testGetResidueBoxColour_group()
169   {
170     SequenceI seq = new Sequence("name", "MA--TVLGSPRAPAFF");
171     AlignmentI al = new Alignment(new SequenceI[] { seq });
172     
173     ColourSchemeI cs = new ZappoColourScheme();
174     ArrayList<SequenceI> seqlist = new ArrayList<>();
175     seqlist.add(seq);
176     SequenceGroup sg = new SequenceGroup(seqlist, "testgroup", cs, true,
177             true, true, 5, 9);
178     al.addGroup(sg);
179     SequenceGroup[] groups = new SequenceGroup[1];
180     groups[0] = sg;
181     
182     final AlignViewport av = new AlignViewport(al);
183     ResidueColourFinder rcf = new OverviewResColourFinder();
184     
185     // G in group specified as magenta in Zappo
186     assertEquals(Color.magenta, rcf.getResidueColour(false,
187             av.getResidueShading(), groups, seq, 7, null));
188
189     // Residue outside group coloured white
190     assertEquals(Color.white, rcf.getResidueColour(false,
191             av.getResidueShading(), groups, seq, 0, null));
192
193     // Gap outside group coloured lightgray
194     assertEquals(Color.lightGray, rcf.getResidueColour(false,
195             av.getResidueShading(), groups, seq, 2, null));
196
197     // use legacy colouring
198     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
199   
200     // G in group specified as magenta in Zappo
201     assertEquals(Color.magenta, rcf.getResidueColour(false,
202             av.getResidueShading(), groups, seq, 7, null));
203
204     // Residue outside group coloured lightgray
205     assertEquals(Color.lightGray, rcf.getResidueColour(false,
206             av.getResidueShading(), groups, seq, 0, null));
207
208     // Gap outside group coloured white
209     assertEquals(Color.white, rcf.getResidueColour(false,
210             av.getResidueShading(), groups, seq, 2, null));
211
212     // use new colouring
213     rcf = new OverviewResColourFinder(false, Color.blue, Color.red);
214
215     // G in group specified as magenta in Zappo
216     assertEquals(Color.magenta, rcf.getResidueColour(false,
217             av.getResidueShading(), groups, seq, 7, null));
218
219     // Residue outside group coloured white
220     assertEquals(Color.white, rcf.getResidueColour(false,
221             av.getResidueShading(), groups, seq, 0, null));
222
223     // Gap outside group coloured blue
224     assertEquals(Color.blue, rcf.getResidueColour(false,
225             av.getResidueShading(), groups, seq, 2, null));
226   }
227
228   @Test
229   public void testGetBoxColour()
230   {
231     SequenceI seq = new Sequence("name", "MAT--GSPRAPAFF"); // FER1_MAIZE... + a
232                                                             // gap
233     AlignmentI al = new Alignment(new SequenceI[] { seq });
234     final AlignViewport av = new AlignViewport(al);
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(
273             jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_GAP,
274             c);
275
276     // non legacy colouring with colour scheme
277     rcf = new OverviewResColourFinder(false, Color.blue, Color.red);
278     shader = new ResidueShader(new ZappoColourScheme());
279
280     // M residue pink
281     c = rcf.getBoxColour(shader, seq, 0);
282     assertEquals(Color.pink, c);
283
284     // gaps blue
285     c = rcf.getBoxColour(shader, seq, 3);
286     assertEquals(Color.blue, c);
287
288     // legacy colouring with colour scheme
289     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
290
291     // M residue pink
292     c = rcf.getBoxColour(shader, seq, 0);
293     assertEquals(Color.pink, c);
294
295     // gaps white
296     c = rcf.getBoxColour(shader, seq, 3);
297     assertEquals(Color.white, c);
298   }
299 }