1 package jalview.schemes;
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertFalse;
5 import static org.testng.Assert.assertTrue;
7 import jalview.bin.Cache;
8 import jalview.bin.Jalview;
9 import jalview.datamodel.AlignmentI;
10 import jalview.datamodel.AnnotatedCollectionI;
11 import jalview.datamodel.SequenceCollectionI;
12 import jalview.datamodel.SequenceI;
13 import jalview.gui.AlignFrame;
14 import jalview.gui.AlignViewport;
15 import jalview.gui.Desktop;
16 import jalview.gui.SequenceRenderer;
17 import jalview.io.DataSourceType;
18 import jalview.io.FileLoader;
19 import jalview.schemes.ClustalxColourScheme.ClustalColour;
21 import java.awt.Color;
22 import java.util.Iterator;
25 import org.testng.annotations.AfterClass;
26 import org.testng.annotations.BeforeClass;
27 import org.testng.annotations.Test;
29 public class ColourSchemesTest
32 * a colour scheme that alternates Taylor and Zappo
35 class Stripy extends ResidueColourScheme
37 private ResidueColourScheme odd;
39 private ResidueColourScheme even;
46 * constructor given colours for odd and even columns
51 private Stripy(ColourSchemeI cs1, ColourSchemeI cs2)
53 odd = (ResidueColourScheme) cs1;
54 even = (ResidueColourScheme) cs2;
58 public ColourSchemeI getInstance(AnnotatedCollectionI sg,
59 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
61 final ColourSchemeI cs1 = ColourSchemes.getInstance()
62 .getColourScheme(JalviewColourScheme.Taylor.toString(),
63 (AnnotatedCollectionI) null);
64 final ColourSchemeI cs2 = ColourSchemes.getInstance()
65 .getColourScheme(JalviewColourScheme.Zappo.toString(),
66 (AnnotatedCollectionI) null);
67 return new Stripy(cs1, cs2);
71 public Color findColour(char c, int j, SequenceI seq)
75 return odd.findColour(c, j, seq);
79 return even.findColour(c, j, seq);
84 public String getSchemeName()
91 * a colour scheme that is Clustal but using AWT colour equivalents
93 class MyClustal extends ResidueColourScheme
95 ClustalxColourScheme delegate;
101 private MyClustal(AnnotatedCollectionI sg,
102 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
104 delegate = new ClustalxColourScheme(sg, hiddenRepSequences);
108 public Color findColour(char c, int j, SequenceI seq)
110 Color col = delegate.findColour(c, j, seq);
112 if (col.equals(ClustalColour.BLUE.colour))
116 else if (col.equals(ClustalColour.CYAN.colour))
120 else if (col.equals(ClustalColour.GREEN.colour))
122 result = Color.green;
124 else if (col.equals(ClustalColour.MAGENTA.colour))
126 result = Color.magenta;
128 else if (col.equals(ClustalColour.ORANGE.colour))
130 result = Color.orange;
132 else if (col.equals(ClustalColour.PINK.colour))
136 else if (col.equals(ClustalColour.RED.colour))
140 else if (col.equals(ClustalColour.YELLOW.colour))
142 result = Color.yellow;
148 public ColourSchemeI getInstance(AnnotatedCollectionI sg,
149 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
151 return new MyClustal(sg, hiddenRepSequences);
155 public String getSchemeName()
162 @BeforeClass(alwaysRun = true)
163 public static void setUpBeforeClass() throws Exception
166 * use read-only test properties file
168 Cache.loadProperties("test/jalview/io/testProps.jvprops");
169 Jalview.main(new String[] { "-nonews" });
172 @AfterClass(alwaysRun = true)
173 public static void tearDownAfterClass() throws Exception
175 Desktop.instance.closeAll_actionPerformed(null);
178 @Test(groups = "Functional")
179 public void testGetColourSchemes()
182 * this just verifies that built-in colour schemes are loaded into ColourSchemes
183 * in the order in which they are declared in the JalviewColourScheme enum
184 * (this also determines their order in Colour menus)
186 Iterator<ColourSchemeI> schemes = ColourSchemes.getInstance().getColourSchemes().iterator();
187 JalviewColourScheme[] jalviewSchemes = JalviewColourScheme.values();
189 while (schemes.hasNext() && i < jalviewSchemes.length)
191 assertTrue(schemes.next().getSchemeName()
192 .equals(jalviewSchemes[i].toString()));
197 @Test(groups = "Functional")
198 public void testGetColourScheme_forViewport()
200 AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
201 ">seq1\nAGLRTWQU", DataSourceType.PASTE);
202 ColourSchemes cs = ColourSchemes.getInstance();
204 AlignViewport viewport = af.getViewport();
205 AlignmentI alignment = viewport.getAlignment();
206 assertTrue(cs.getColourScheme(JalviewColourScheme.Blosum62.toString(),
207 alignment) instanceof Blosum62ColourScheme);
208 assertTrue(cs.getColourScheme(JalviewColourScheme.Buried.toString(),
209 alignment) instanceof BuriedColourScheme);
210 assertTrue(cs.getColourScheme(JalviewColourScheme.Clustal.toString(),
211 alignment) instanceof ClustalxColourScheme);
212 assertTrue(cs.getColourScheme(JalviewColourScheme.Helix.toString(),
213 alignment) instanceof HelixColourScheme);
214 assertTrue(cs.getColourScheme(
215 JalviewColourScheme.Hydrophobic.toString(), alignment) instanceof HydrophobicColourScheme);
216 assertTrue(cs.getColourScheme(
217 JalviewColourScheme.Nucleotide.toString(), alignment) instanceof NucleotideColourScheme);
218 assertTrue(cs.getColourScheme(JalviewColourScheme.PID.toString(),
219 alignment) instanceof PIDColourScheme);
220 assertTrue(cs.getColourScheme(
221 JalviewColourScheme.PurinePyrimidine.toString(), alignment) instanceof PurinePyrimidineColourScheme);
222 assertTrue(cs.getColourScheme(
223 JalviewColourScheme.RNAHelices.toString(), alignment) instanceof RNAHelicesColour);
224 assertTrue(cs.getColourScheme(JalviewColourScheme.Strand.toString(),
225 alignment) instanceof StrandColourScheme);
226 assertTrue(cs.getColourScheme(JalviewColourScheme.Taylor.toString(),
227 alignment) instanceof TaylorColourScheme);
228 assertTrue(cs.getColourScheme(JalviewColourScheme.TCoffee.toString(),
229 alignment) instanceof TCoffeeColourScheme);
230 assertTrue(cs.getColourScheme(JalviewColourScheme.Turn.toString(),
231 alignment) instanceof TurnColourScheme);
232 assertTrue(cs.getColourScheme(JalviewColourScheme.Zappo.toString(),
233 alignment) instanceof ZappoColourScheme);
234 af.closeMenuItem_actionPerformed(true);
237 @Test(groups = "Functional")
238 public void testGetColourScheme_forAnnotatedCollection()
240 AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
241 ">seq1\nAGLRTWQU", DataSourceType.PASTE);
242 ColourSchemes cs = ColourSchemes.getInstance();
244 AnnotatedCollectionI al = af.getViewport().getAlignment();
245 assertTrue(cs.getColourScheme(JalviewColourScheme.Blosum62.toString(),
246 al) instanceof Blosum62ColourScheme);
248 .getColourScheme(JalviewColourScheme.Buried.toString(), al) instanceof BuriedColourScheme);
249 assertTrue(cs.getColourScheme(JalviewColourScheme.Clustal.toString(),
250 al) instanceof ClustalxColourScheme);
251 assertTrue(cs.getColourScheme(JalviewColourScheme.Helix.toString(), al) instanceof HelixColourScheme);
252 assertTrue(cs.getColourScheme(
253 JalviewColourScheme.Hydrophobic.toString(), al) instanceof HydrophobicColourScheme);
254 assertTrue(cs.getColourScheme(
255 JalviewColourScheme.Nucleotide.toString(), al) instanceof NucleotideColourScheme);
256 assertTrue(cs.getColourScheme(JalviewColourScheme.PID.toString(), al) instanceof PIDColourScheme);
257 assertTrue(cs.getColourScheme(
258 JalviewColourScheme.PurinePyrimidine.toString(), al) instanceof PurinePyrimidineColourScheme);
259 assertTrue(cs.getColourScheme(
260 JalviewColourScheme.RNAHelices.toString(), al) instanceof RNAHelicesColour);
262 .getColourScheme(JalviewColourScheme.Strand.toString(), al) instanceof StrandColourScheme);
264 .getColourScheme(JalviewColourScheme.Taylor.toString(), al) instanceof TaylorColourScheme);
265 assertTrue(cs.getColourScheme(JalviewColourScheme.TCoffee.toString(),
266 al) instanceof TCoffeeColourScheme);
267 assertTrue(cs.getColourScheme(JalviewColourScheme.Turn.toString(), al) instanceof TurnColourScheme);
268 assertTrue(cs.getColourScheme(JalviewColourScheme.Zappo.toString(), al) instanceof ZappoColourScheme);
269 af.closeMenuItem_actionPerformed(true);
272 @Test(groups = "Functional")
273 public void testRegisterColourScheme()
275 ColourSchemes.getInstance().registerColourScheme(new Stripy());
276 ColourSchemes.getInstance().registerColourScheme(new MyClustal());
277 AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
278 "examples/uniref50.fa", DataSourceType.FILE);
280 * set a breakpoint here to see and play with the newly registered
281 * colour schemes in the AlignFrame colour menu
283 SequenceRenderer sr = new SequenceRenderer(af.getViewport());
284 SequenceI seq = af.getViewport().getAlignment().findName("FER_CAPAA");
287 * set and check Taylor colours
289 af.changeColour_actionPerformed(JalviewColourScheme.Taylor.toString());
290 Color taylor1 = sr.getResidueBoxColour(seq, 88); // E 255,0,102
291 Color taylor2 = sr.getResidueBoxColour(seq, 89); // A 204,255,0
292 Color taylor3 = sr.getResidueBoxColour(seq, 90); // G 255,153,0
293 assertEquals(taylor1, new Color(255, 0, 102));
294 assertEquals(taylor2, new Color(204, 255, 0));
295 assertEquals(taylor3, new Color(255, 153, 0));
298 * set and check Zappo colours
300 af.changeColour_actionPerformed(JalviewColourScheme.Zappo.toString());
301 Color zappo1 = sr.getResidueBoxColour(seq, 88); // E red
302 Color zappo2 = sr.getResidueBoxColour(seq, 89); // A pink
303 Color zappo3 = sr.getResidueBoxColour(seq, 90); // G magenta
304 assertEquals(zappo1, Color.red);
305 assertEquals(zappo2, Color.pink);
306 assertEquals(zappo3, Color.magenta);
309 * set 'stripy' colours - odd columns are Taylor and even are Zappo
311 af.changeColour_actionPerformed("stripy");
312 Color stripy1 = sr.getResidueBoxColour(seq, 88);
313 Color stripy2 = sr.getResidueBoxColour(seq, 89);
314 Color stripy3 = sr.getResidueBoxColour(seq, 90);
315 assertEquals(stripy1, zappo1);
316 assertEquals(stripy2, taylor2);
317 assertEquals(stripy3, zappo3);
320 * set and check Clustal colours
322 af.changeColour_actionPerformed(JalviewColourScheme.Clustal.toString());
323 Color clustal1 = sr.getResidueBoxColour(seq, 88);
324 Color clustal2 = sr.getResidueBoxColour(seq, 89);
325 Color clustal3 = sr.getResidueBoxColour(seq, 90);
326 assertEquals(clustal1, ClustalColour.MAGENTA.colour);
327 assertEquals(clustal2, ClustalColour.BLUE.colour);
328 assertEquals(clustal3, ClustalColour.ORANGE.colour);
331 * set 'MyClustal' colours - uses AWT colour equivalents
333 af.changeColour_actionPerformed("MyClustal");
334 Color myclustal1 = sr.getResidueBoxColour(seq, 88);
335 Color myclustal2 = sr.getResidueBoxColour(seq, 89);
336 Color myclustal3 = sr.getResidueBoxColour(seq, 90);
337 assertEquals(myclustal1, Color.MAGENTA);
338 assertEquals(myclustal2, Color.BLUE);
339 assertEquals(myclustal3, Color.ORANGE);
343 * Tests for check if scheme name exists. Built-in scheme names are the
344 * toString() values of enum JalviewColourScheme.
346 @Test(groups = "Functional")
347 public void testNameExists()
349 ColourSchemes cs = ColourSchemes.getInstance();
350 assertFalse(cs.nameExists(null));
351 assertFalse(cs.nameExists(""));
352 assertTrue(cs.nameExists("Clustal"));
353 assertTrue(cs.nameExists("CLUSTAL"));
354 assertFalse(cs.nameExists("CLUSTAL "));
355 assertTrue(cs.nameExists("% Identity"));
356 assertFalse(cs.nameExists("PID"));