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