2016087303d940420165d86d1203384b9b019c97
[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.gui.Preferences;
34 import jalview.schemes.ColourSchemeI;
35 import jalview.schemes.UserColourScheme;
36 import jalview.schemes.ZappoColourScheme;
37
38 import java.awt.Color;
39 import java.util.ArrayList;
40
41 import org.testng.annotations.BeforeClass;
42 import org.testng.annotations.Test;
43
44 public class OverviewResColourFinderTest
45 {
46
47   @BeforeClass(alwaysRun = true)
48   public void setUpJvOptionPane()
49   {
50     JvOptionPane.setInteractiveMode(false);
51     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
52     Cache.loadProperties("test/jalview/io/testProps.jvprops");
53   }
54
55   @Test(groups = { "Functional" })
56   public void testGetResidueBoxColour_none()
57   {
58     SequenceI seq = new Sequence("name", "MA--TVLGSPRAPAFF");
59     AlignmentI al = new Alignment(new SequenceI[] { seq });
60     final AlignViewport av = new AlignViewport(al);
61     ResidueColourFinder rcf = new OverviewResColourFinder();
62
63     // gaps are grey, residues white
64     assertEquals(Color.white, rcf.getResidueColour(true,
65             av.getResidueShading(),
66             null, seq, 0, null));
67     assertEquals(Color.lightGray, rcf
68             .getResidueColour(true, av.getResidueShading(), null, seq, 2,
69                     null));
70
71     // unaffected by showBoxes setting
72     assertEquals(Color.white, rcf.getResidueColour(false,
73             av.getResidueShading(), null, seq, 0, null));
74     assertEquals(Color.lightGray, rcf.getResidueColour(false,
75             av.getResidueShading(), 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     assertEquals(Color.lightGray, rcf.getResidueColour(false,
158             av.getResidueShading(), null, seq, 3, null));
159
160     newColours[23] = Color.pink;
161     av.setGlobalColourScheme(new UserColourScheme(newColours));
162
163     // gap colour specified as pink
164     assertEquals(Color.pink, rcf.getResidueColour(false,
165             av.getResidueShading(), null, seq, 3, null));
166   }
167
168   @Test
169   public void testGetResidueBoxColour_group()
170   {
171     SequenceI seq = new Sequence("name", "MA--TVLGSPRAPAFF");
172     AlignmentI al = new Alignment(new SequenceI[] { seq });
173     
174     ColourSchemeI cs = new ZappoColourScheme();
175     ArrayList<SequenceI> seqlist = new ArrayList<>();
176     seqlist.add(seq);
177     SequenceGroup sg = new SequenceGroup(seqlist, "testgroup", cs, true,
178             true, true, 5, 9);
179     al.addGroup(sg);
180     SequenceGroup[] groups = new SequenceGroup[1];
181     groups[0] = sg;
182     
183     final AlignViewport av = new AlignViewport(al);
184     ResidueColourFinder rcf = new OverviewResColourFinder();
185     
186     // G in group specified as magenta in Zappo
187     assertEquals(Color.magenta, rcf.getResidueColour(false,
188             av.getResidueShading(), groups, seq, 7, null));
189
190     // Residue outside group coloured white
191     assertEquals(Color.white, rcf.getResidueColour(false,
192             av.getResidueShading(), groups, seq, 0, null));
193
194     // Gap outside group coloured lightgray
195     assertEquals(Color.lightGray, rcf.getResidueColour(false,
196             av.getResidueShading(), groups, seq, 2, null));
197
198     // use legacy colouring
199     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
200   
201     // G in group specified as magenta in Zappo
202     assertEquals(Color.magenta, rcf.getResidueColour(false,
203             av.getResidueShading(), groups, seq, 7, null));
204
205     // Residue outside group coloured lightgray
206     assertEquals(Color.lightGray, rcf.getResidueColour(false,
207             av.getResidueShading(), groups, seq, 0, null));
208
209     // Gap outside group coloured white
210     assertEquals(Color.white, rcf.getResidueColour(false,
211             av.getResidueShading(), groups, seq, 2, null));
212
213     // use new colouring
214     rcf = new OverviewResColourFinder(false, Color.blue, Color.red);
215
216     // G in group specified as magenta in Zappo
217     assertEquals(Color.magenta, rcf.getResidueColour(false,
218             av.getResidueShading(), groups, seq, 7, null));
219
220     // Residue outside group coloured white
221     assertEquals(Color.white, rcf.getResidueColour(false,
222             av.getResidueShading(), groups, seq, 0, null));
223
224     // Gap outside group coloured blue
225     assertEquals(Color.blue, rcf.getResidueColour(false,
226             av.getResidueShading(), groups, seq, 2, null));
227   }
228
229   @Test
230   public void testGetBoxColour()
231   {
232     SequenceI seq = new Sequence("name", "MAT--GSPRAPAFF"); // FER1_MAIZE... + a
233                                                             // gap
234     AlignmentI al = new Alignment(new SequenceI[] { seq });
235     final AlignViewport av = new AlignViewport(al);
236
237     // non-legacy colouring
238     ResidueColourFinder rcf = new OverviewResColourFinder();
239     ResidueShaderI shader = new ResidueShader();
240
241     // residues white
242     Color c = rcf.getBoxColour(shader, seq, 0);
243     assertEquals(Color.white, c);
244
245     // gaps gap colour
246     c = rcf.getBoxColour(shader, seq, 3);
247     assertEquals(Preferences.OVERVIEW_DEFAULT_GAP, c);
248
249     // legacy colouring set explicitly via constructor
250     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
251     shader = new ResidueShader();
252
253     // residues light gray
254     c = rcf.getBoxColour(shader, seq, 0);
255     assertEquals(Color.lightGray, c);
256
257     // gaps white
258     c = rcf.getBoxColour(shader, seq, 3);
259     assertEquals(Color.white, c);
260
261     // legacy colouring off
262     rcf = new OverviewResColourFinder();
263     shader = new ResidueShader();
264
265     // residues white
266     c = rcf.getBoxColour(shader, seq, 0);
267     assertEquals(Color.white, c);
268
269     // gaps gap colour
270     c = rcf.getBoxColour(shader, seq, 3);
271     assertEquals(Preferences.OVERVIEW_DEFAULT_GAP, c);
272
273     // non legacy colouring with colour scheme
274     rcf = new OverviewResColourFinder(false, Color.blue, Color.red);
275     shader = new ResidueShader(new ZappoColourScheme());
276
277     // M residue pink
278     c = rcf.getBoxColour(shader, seq, 0);
279     assertEquals(Color.pink, c);
280
281     // gaps blue
282     c = rcf.getBoxColour(shader, seq, 3);
283     assertEquals(Color.blue, c);
284
285     // legacy colouring with colour scheme
286     rcf = new OverviewResColourFinder(true, Color.blue, Color.red);
287
288     // M residue pink
289     c = rcf.getBoxColour(shader, seq, 0);
290     assertEquals(Color.pink, c);
291
292     // gaps white
293     c = rcf.getBoxColour(shader, seq, 3);
294     assertEquals(Color.white, c);
295   }
296 }