2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
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.
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.
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.
21 package jalview.schemes;
23 import static org.testng.Assert.assertEquals;
24 import static org.testng.Assert.assertFalse;
25 import static org.testng.Assert.assertSame;
26 import static org.testng.Assert.assertTrue;
28 import java.awt.Color;
29 import java.util.Iterator;
32 import org.testng.annotations.AfterClass;
33 import org.testng.annotations.BeforeClass;
34 import org.testng.annotations.Test;
36 import jalview.api.AlignViewportI;
37 import jalview.bin.Cache;
38 import jalview.bin.Jalview;
39 import jalview.datamodel.AnnotatedCollectionI;
40 import jalview.datamodel.SequenceCollectionI;
41 import jalview.datamodel.SequenceI;
42 import jalview.gui.AlignFrame;
43 import jalview.gui.Desktop;
44 import jalview.gui.SequenceRenderer;
45 import jalview.io.DataSourceType;
46 import jalview.io.FileLoader;
47 import jalview.schemes.ClustalxColourScheme.ClustalColour;
49 public class ColourSchemesTest
52 * a colour scheme that alternates Taylor and Zappo
55 class Stripy extends ResidueColourScheme
57 private ResidueColourScheme odd;
59 private ResidueColourScheme even;
66 * constructor given colours for odd and even columns
71 private Stripy(ColourSchemeI cs1, ColourSchemeI cs2)
73 odd = (ResidueColourScheme) cs1;
74 even = (ResidueColourScheme) cs2;
78 public ColourSchemeI getInstance(AlignViewportI view,
79 AnnotatedCollectionI sg)
81 final ColourSchemeI cs1 = ColourSchemes.getInstance().getColourScheme(
82 JalviewColourScheme.Taylor.toString(),
83 (AnnotatedCollectionI) null);
84 final ColourSchemeI cs2 = ColourSchemes.getInstance().getColourScheme(
85 JalviewColourScheme.Zappo.toString(),
86 (AnnotatedCollectionI) null);
87 return new Stripy(cs1, cs2);
91 public Color findColour(char c, int j, SequenceI seq)
95 return odd.findColour(c, j, seq);
99 return even.findColour(c, j, seq);
104 public String getSchemeName()
111 * a colour scheme that is Clustal but using AWT colour equivalents
113 class MyClustal extends ResidueColourScheme
115 ClustalxColourScheme delegate;
121 private MyClustal(AnnotatedCollectionI sg,
122 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
124 delegate = new ClustalxColourScheme(sg, hiddenRepSequences);
128 public Color findColour(char c, int j, SequenceI seq)
130 Color col = delegate.findColour(c, j, seq);
132 if (col.equals(ClustalColour.BLUE.colour))
136 else if (col.equals(ClustalColour.CYAN.colour))
140 else if (col.equals(ClustalColour.GREEN.colour))
142 result = Color.green;
144 else if (col.equals(ClustalColour.MAGENTA.colour))
146 result = Color.magenta;
148 else if (col.equals(ClustalColour.ORANGE.colour))
150 result = Color.orange;
152 else if (col.equals(ClustalColour.PINK.colour))
156 else if (col.equals(ClustalColour.RED.colour))
160 else if (col.equals(ClustalColour.YELLOW.colour))
162 result = Color.yellow;
168 public ColourSchemeI getInstance(AlignViewportI view,
169 AnnotatedCollectionI sg)
171 return new MyClustal(sg, view.getHiddenRepSequences());
175 public String getSchemeName()
182 @BeforeClass(alwaysRun = true)
183 public static void setUpBeforeClass() throws Exception
186 * use read-only test properties file
188 Cache.loadProperties("test/jalview/io/testProps.jvprops");
189 Jalview.main(new String[] { "--nonews" });
192 @AfterClass(alwaysRun = true)
193 public static void tearDownAfterClass() throws Exception
195 if (Desktop.instance != null)
196 Desktop.instance.closeAll_actionPerformed(null);
199 @Test(groups = "Functional")
200 public void testGetColourSchemes()
203 * this just verifies that built-in colour schemes are loaded into ColourSchemes
204 * in the order in which they are declared in the JalviewColourScheme enum
205 * (this also determines their order in Colour menus)
207 Iterator<ColourSchemeI> schemes = ColourSchemes.getInstance()
208 .getColourSchemes().iterator();
209 JalviewColourScheme[] jalviewSchemes = JalviewColourScheme.values();
211 while (schemes.hasNext() && i < jalviewSchemes.length)
213 assertTrue(schemes.next().getSchemeName()
214 .equals(jalviewSchemes[i].toString()));
219 @Test(groups = "Functional")
220 public void testGetColourScheme()
222 AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
223 ">seq1\nAGLRTWQU", DataSourceType.PASTE);
224 ColourSchemes schemes = ColourSchemes.getInstance();
226 AnnotatedCollectionI al = af.getViewport().getAlignment();
228 for (JalviewColourScheme cs : JalviewColourScheme.values())
230 ColourSchemeI registered = schemes.getColourScheme(cs.toString(), al);
231 assertSame(registered.getClass(), cs.getSchemeClass());
233 af.closeMenuItem_actionPerformed(true);
236 @Test(groups = "Functional")
237 public void testRegisterColourScheme()
239 ColourSchemes.getInstance().registerColourScheme(new Stripy());
240 ColourSchemes.getInstance().registerColourScheme(new MyClustal());
241 AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
242 "examples/uniref50.fa", DataSourceType.FILE);
244 * set a breakpoint here to see and play with the newly registered
245 * colour schemes in the AlignFrame colour menu
247 SequenceRenderer sr = new SequenceRenderer(af.getViewport());
248 SequenceI seq = af.getViewport().getAlignment().findName("FER_CAPAA");
251 * set and check Taylor colours
253 af.changeColour_actionPerformed(JalviewColourScheme.Taylor.toString());
254 Color taylor1 = sr.getResidueColour(seq, 88, null); // E 255,0,102
255 Color taylor2 = sr.getResidueColour(seq, 89, null); // A 204,255,0
256 Color taylor3 = sr.getResidueColour(seq, 90, null); // G 255,153,0
257 assertEquals(taylor1, new Color(255, 0, 102));
258 assertEquals(taylor2, new Color(204, 255, 0));
259 assertEquals(taylor3, new Color(255, 153, 0));
262 * set and check Zappo colours
264 af.changeColour_actionPerformed(JalviewColourScheme.Zappo.toString());
265 Color zappo1 = sr.getResidueColour(seq, 88, null); // E red
266 Color zappo2 = sr.getResidueColour(seq, 89, null); // A pink
267 Color zappo3 = sr.getResidueColour(seq, 90, null); // G magenta
268 assertEquals(zappo1, Color.red);
269 assertEquals(zappo2, Color.pink);
270 assertEquals(zappo3, Color.magenta);
273 * set 'stripy' colours - odd columns are Taylor and even are Zappo
275 af.changeColour_actionPerformed("stripy");
276 Color stripy1 = sr.getResidueColour(seq, 88, null);
277 Color stripy2 = sr.getResidueColour(seq, 89, null);
278 Color stripy3 = sr.getResidueColour(seq, 90, null);
279 assertEquals(stripy1, zappo1);
280 assertEquals(stripy2, taylor2);
281 assertEquals(stripy3, zappo3);
284 * set and check Clustal colours
286 af.changeColour_actionPerformed(JalviewColourScheme.Clustal.toString());
287 Color clustal1 = sr.getResidueColour(seq, 88, null);
288 Color clustal2 = sr.getResidueColour(seq, 89, null);
289 Color clustal3 = sr.getResidueColour(seq, 90, null);
290 assertEquals(clustal1, ClustalColour.MAGENTA.colour);
291 assertEquals(clustal2, ClustalColour.BLUE.colour);
292 assertEquals(clustal3, ClustalColour.ORANGE.colour);
295 * set 'MyClustal' colours - uses AWT colour equivalents
297 af.changeColour_actionPerformed("MyClustal");
298 Color myclustal1 = sr.getResidueColour(seq, 88, null);
299 Color myclustal2 = sr.getResidueColour(seq, 89, null);
300 Color myclustal3 = sr.getResidueColour(seq, 90, null);
301 assertEquals(myclustal1, Color.MAGENTA);
302 assertEquals(myclustal2, Color.BLUE);
303 assertEquals(myclustal3, Color.ORANGE);
307 * Tests for check if scheme name exists. Built-in scheme names are the
308 * toString() values of enum JalviewColourScheme.
310 @Test(groups = "Functional")
311 public void testNameExists()
313 ColourSchemes cs = ColourSchemes.getInstance();
314 assertFalse(cs.nameExists(null));
315 assertFalse(cs.nameExists(""));
316 assertTrue(cs.nameExists("Clustal"));
317 assertTrue(cs.nameExists("CLUSTAL"));
318 assertFalse(cs.nameExists("CLUSTAL "));
319 assertTrue(cs.nameExists("% Identity"));
320 assertFalse(cs.nameExists("PID"));