JAL-2360 ColourMenuHelper now builds and selects items in colour menu
[jalview.git] / test / jalview / schemes / ColourSchemesTest.java
1 package jalview.schemes;
2
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertTrue;
5
6 import jalview.bin.Cache;
7 import jalview.bin.Jalview;
8 import jalview.datamodel.AlignmentI;
9 import jalview.datamodel.AnnotatedCollectionI;
10 import jalview.datamodel.SequenceCollectionI;
11 import jalview.datamodel.SequenceI;
12 import jalview.gui.AlignFrame;
13 import jalview.gui.AlignViewport;
14 import jalview.gui.Desktop;
15 import jalview.gui.SequenceRenderer;
16 import jalview.io.DataSourceType;
17 import jalview.io.FileLoader;
18 import jalview.schemes.ClustalxColourScheme.ClustalColour;
19
20 import java.awt.Color;
21 import java.util.Iterator;
22 import java.util.Map;
23
24 import org.testng.annotations.AfterClass;
25 import org.testng.annotations.BeforeClass;
26 import org.testng.annotations.Test;
27
28 public class ColourSchemesTest
29 {
30   /*
31    * a colour scheme that alternates Taylor and Zappo
32    * colouring by column
33    */
34   class Stripy extends ResidueColourScheme
35   {
36     @Override
37     public ColourSchemeI getInstance(AnnotatedCollectionI sg,
38             Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
39     {
40       final ColourSchemeI odd = ColourSchemes.getInstance()
41               .getColourScheme(JalviewColourScheme.Taylor.toString(),
42                       (AnnotatedCollectionI) null);
43       final ColourSchemeI even = ColourSchemes.getInstance()
44               .getColourScheme(JalviewColourScheme.Zappo.toString(),
45                       (AnnotatedCollectionI) null);
46       return new ResidueColourScheme() {
47         @Override
48         public Color findColour(char c, int j, SequenceI seq)
49         {
50           if (j % 2 == 1)
51           {
52             return odd.findColour(c, j, seq);
53           }
54           else
55           {
56             return even.findColour(c, j, seq);
57           }
58         }
59
60         @Override
61         public ColourSchemeI getInstance(AnnotatedCollectionI ac,
62                 Map<SequenceI, SequenceCollectionI> hrs)
63         {
64           return null;
65         }
66
67         @Override
68         public String getSchemeName()
69         {
70           return Stripy.this.getSchemeName();
71         }
72         
73       };
74     }
75     
76     @Override
77     public String getSchemeName()
78     {
79       return "stripy";
80     }
81   };
82   
83   /*
84    * a colour scheme that is Clustal but using AWT colour equivalents
85    */
86   class MyClustal extends ResidueColourScheme
87   {
88     ColourSchemeI delegate;
89
90     public MyClustal()
91     {
92     }
93
94     public MyClustal(ColourSchemeI scheme)
95     {
96       delegate = scheme;
97     }
98
99     @Override
100     public Color findColour(char c, int j, SequenceI seq)
101     {
102       Color col = delegate.findColour(c, j, seq);
103       Color result = col;
104       if (col.equals(ClustalColour.BLUE.colour))
105       {
106         result = Color.blue;
107       }
108       else if (col.equals(ClustalColour.CYAN.colour))
109       {
110         result = Color.cyan;
111       }
112       else if (col.equals(ClustalColour.GREEN.colour))
113       {
114         result = Color.green;
115       }
116       else if (col.equals(ClustalColour.MAGENTA.colour))
117       {
118         result = Color.magenta;
119       }
120       else if (col.equals(ClustalColour.ORANGE.colour))
121       {
122         result = Color.orange;
123       }
124       else if (col.equals(ClustalColour.PINK.colour))
125       {
126         result = Color.pink;
127       }
128       else if (col.equals(ClustalColour.RED.colour))
129       {
130         result = Color.red;
131       }
132       else if (col.equals(ClustalColour.YELLOW.colour))
133       {
134         result = Color.yellow;
135       }
136       return result;
137     }
138
139     @Override
140     public ColourSchemeI getInstance(AnnotatedCollectionI sg,
141             Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
142     {
143       return new MyClustal(new ClustalxColourScheme().getInstance(sg,
144               hiddenRepSequences));
145     }
146
147     @Override
148     public String getSchemeName()
149     {
150       return "MyClustal";
151     }
152
153   }
154
155   @BeforeClass(alwaysRun = true)
156   public static void setUpBeforeClass() throws Exception
157   {
158     /*
159      * use read-only test properties file
160      */
161     Cache.loadProperties("test/jalview/io/testProps.jvprops");
162     Jalview.main(new String[] { "-nonews" });
163   }
164
165   @AfterClass(alwaysRun = true)
166   public static void tearDownAfterClass() throws Exception
167   {
168     Desktop.instance.closeAll_actionPerformed(null);
169   }
170
171   @Test(groups = "Functional")
172   public void testGetColourSchemes()
173   {
174     /*
175      * this just verifies that built-in colour schemes are loaded into ColourSchemes
176      * in the order in which they are declared in the JalviewColourScheme enum
177      * (this also determines their order in Colour menus)
178      */
179     Iterator<ColourSchemeI> schemes = ColourSchemes.getInstance().getColourSchemes().iterator();
180     JalviewColourScheme[] jalviewSchemes = JalviewColourScheme.values();
181     int i = 0;
182     while (schemes.hasNext() && i < jalviewSchemes.length)
183     {
184       assertTrue(schemes.next().getSchemeName()
185               .equals(jalviewSchemes[i].toString()));
186       i++;
187     }
188   }
189
190   @Test(groups = "Functional")
191   public void testGetColourScheme_forViewport()
192   {
193     AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
194             ">seq1\nAGLRTWQU", DataSourceType.PASTE);
195     ColourSchemes cs = ColourSchemes.getInstance();
196
197     AlignViewport viewport = af.getViewport();
198     AlignmentI alignment = viewport.getAlignment();
199     assertTrue(cs.getColourScheme(JalviewColourScheme.Blosum62.toString(),
200             alignment) instanceof Blosum62ColourScheme);
201     assertTrue(cs.getColourScheme(JalviewColourScheme.Buried.toString(),
202             alignment) instanceof BuriedColourScheme);
203     assertTrue(cs.getColourScheme(JalviewColourScheme.Clustal.toString(),
204             alignment) instanceof ClustalxColourScheme);
205     assertTrue(cs.getColourScheme(JalviewColourScheme.Helix.toString(),
206             alignment) instanceof HelixColourScheme);
207     assertTrue(cs.getColourScheme(
208             JalviewColourScheme.Hydrophobic.toString(), alignment) instanceof HydrophobicColourScheme);
209     assertTrue(cs.getColourScheme(
210             JalviewColourScheme.Nucleotide.toString(), alignment) instanceof NucleotideColourScheme);
211     assertTrue(cs.getColourScheme(JalviewColourScheme.PID.toString(),
212             alignment) instanceof PIDColourScheme);
213     assertTrue(cs.getColourScheme(
214             JalviewColourScheme.PurinePyrimidine.toString(), alignment) instanceof PurinePyrimidineColourScheme);
215     assertTrue(cs.getColourScheme(
216             JalviewColourScheme.RNAHelices.toString(), alignment) instanceof RNAHelicesColour);
217     assertTrue(cs.getColourScheme(JalviewColourScheme.Strand.toString(),
218             alignment) instanceof StrandColourScheme);
219     assertTrue(cs.getColourScheme(JalviewColourScheme.Taylor.toString(),
220             alignment) instanceof TaylorColourScheme);
221     assertTrue(cs.getColourScheme(JalviewColourScheme.TCoffee.toString(),
222             alignment) instanceof TCoffeeColourScheme);
223     assertTrue(cs.getColourScheme(JalviewColourScheme.Turn.toString(),
224             alignment) instanceof TurnColourScheme);
225     assertTrue(cs.getColourScheme(JalviewColourScheme.Zappo.toString(),
226             alignment) instanceof ZappoColourScheme);
227     af.closeMenuItem_actionPerformed(true);
228   }
229
230   @Test(groups = "Functional")
231   public void testGetColourScheme_forAnnotatedCollection()
232   {
233     AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
234             ">seq1\nAGLRTWQU", DataSourceType.PASTE);
235     ColourSchemes cs = ColourSchemes.getInstance();
236
237     AnnotatedCollectionI al = af.getViewport().getAlignment();
238     assertTrue(cs.getColourScheme(JalviewColourScheme.Blosum62.toString(),
239             al) instanceof Blosum62ColourScheme);
240     assertTrue(cs
241             .getColourScheme(JalviewColourScheme.Buried.toString(), al) instanceof BuriedColourScheme);
242     assertTrue(cs.getColourScheme(JalviewColourScheme.Clustal.toString(),
243             al) instanceof ClustalxColourScheme);
244     assertTrue(cs.getColourScheme(JalviewColourScheme.Helix.toString(), al) instanceof HelixColourScheme);
245     assertTrue(cs.getColourScheme(
246             JalviewColourScheme.Hydrophobic.toString(), al) instanceof HydrophobicColourScheme);
247     assertTrue(cs.getColourScheme(
248             JalviewColourScheme.Nucleotide.toString(), al) instanceof NucleotideColourScheme);
249     assertTrue(cs.getColourScheme(JalviewColourScheme.PID.toString(), al) instanceof PIDColourScheme);
250     assertTrue(cs.getColourScheme(
251             JalviewColourScheme.PurinePyrimidine.toString(), al) instanceof PurinePyrimidineColourScheme);
252     assertTrue(cs.getColourScheme(
253             JalviewColourScheme.RNAHelices.toString(), al) instanceof RNAHelicesColour);
254     assertTrue(cs
255             .getColourScheme(JalviewColourScheme.Strand.toString(), al) instanceof StrandColourScheme);
256     assertTrue(cs
257             .getColourScheme(JalviewColourScheme.Taylor.toString(), al) instanceof TaylorColourScheme);
258     assertTrue(cs.getColourScheme(JalviewColourScheme.TCoffee.toString(),
259             al) instanceof TCoffeeColourScheme);
260     assertTrue(cs.getColourScheme(JalviewColourScheme.Turn.toString(), al) instanceof TurnColourScheme);
261     assertTrue(cs.getColourScheme(JalviewColourScheme.Zappo.toString(), al) instanceof ZappoColourScheme);
262     af.closeMenuItem_actionPerformed(true);
263   }
264   
265   @Test(groups = "Functional")
266   public void testRegisterColourScheme()
267   {
268     ColourSchemes.getInstance().registerColourScheme(new Stripy());
269     ColourSchemes.getInstance().registerColourScheme(new MyClustal());
270     AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
271             "examples/uniref50.fa", DataSourceType.FILE);
272     /*
273      * set a breakpoint here to see and play with the newly registered
274      *  colour schemes in the AlignFrame colour menu
275      */
276     SequenceRenderer sr = new SequenceRenderer(af.getViewport());
277     SequenceI seq = af.getViewport().getAlignment().findName("FER_CAPAA");
278
279     /*
280      * set and check Taylor colours
281      */
282     af.changeColour_actionPerformed(JalviewColourScheme.Taylor.toString());
283     Color taylor1 = sr.getResidueBoxColour(seq, 88); // E 255,0,102
284     Color taylor2 = sr.getResidueBoxColour(seq, 89); // A 204,255,0
285     Color taylor3 = sr.getResidueBoxColour(seq, 90); // G 255,153,0
286     assertEquals(taylor1, new Color(255, 0, 102));
287     assertEquals(taylor2, new Color(204, 255, 0));
288     assertEquals(taylor3, new Color(255, 153, 0));
289
290     /*
291      * set and check Zappo colours
292      */
293     af.changeColour_actionPerformed(JalviewColourScheme.Zappo.toString());
294     Color zappo1 = sr.getResidueBoxColour(seq, 88); // E red
295     Color zappo2 = sr.getResidueBoxColour(seq, 89); // A pink
296     Color zappo3 = sr.getResidueBoxColour(seq, 90); // G magenta
297     assertEquals(zappo1, Color.red);
298     assertEquals(zappo2, Color.pink);
299     assertEquals(zappo3, Color.magenta);
300
301     /*
302      * set 'stripy' colours - odd columns are Taylor and even are Zappo 
303      */
304     af.changeColour_actionPerformed("stripy");
305     Color stripy1 = sr.getResidueBoxColour(seq, 88);
306     Color stripy2 = sr.getResidueBoxColour(seq, 89);
307     Color stripy3 = sr.getResidueBoxColour(seq, 90);
308     assertEquals(stripy1, zappo1);
309     assertEquals(stripy2, taylor2);
310     assertEquals(stripy3, zappo3);
311
312     /*
313      * set and check Clustal colours
314      */
315     af.changeColour_actionPerformed(JalviewColourScheme.Clustal.toString());
316     Color clustal1 = sr.getResidueBoxColour(seq, 88);
317     Color clustal2 = sr.getResidueBoxColour(seq, 89);
318     Color clustal3 = sr.getResidueBoxColour(seq, 90);
319     assertEquals(clustal1, ClustalColour.MAGENTA.colour);
320     assertEquals(clustal2, ClustalColour.BLUE.colour);
321     assertEquals(clustal3, ClustalColour.ORANGE.colour);
322
323     /*
324      * set 'MyClustal' colours - uses AWT colour equivalents
325      */
326     af.changeColour_actionPerformed("MyClustal");
327     Color myclustal1 = sr.getResidueBoxColour(seq, 88);
328     Color myclustal2 = sr.getResidueBoxColour(seq, 89);
329     Color myclustal3 = sr.getResidueBoxColour(seq, 90);
330     assertEquals(myclustal1, Color.MAGENTA);
331     assertEquals(myclustal2, Color.BLUE);
332     assertEquals(myclustal3, Color.ORANGE);
333   }
334 }