59e626db991b57bb068a2f8f37a19ca0ddbeef7e
[jalview.git] / test / jalview / schemes / PIDColourSchemeTest.java
1 package jalview.schemes;
2
3 import static org.testng.Assert.assertEquals;
4
5 import java.awt.Color;
6
7 import org.testng.annotations.Test;
8
9 import jalview.datamodel.SequenceI;
10 import jalview.gui.AlignFrame;
11 import jalview.gui.AlignViewport;
12 import jalview.io.DataSourceType;
13 import jalview.io.FileLoader;
14
15 public class PIDColourSchemeTest
16 {
17   static final Color white = Color.white;
18
19   static final Color over40 = new Color(204, 204, 255);
20
21   static final Color over60 = new Color(153, 153, 255);
22
23   static final Color over80 = new Color(100, 100, 255);
24
25   /**
26    * Test findColour for cases:
27    * <ul>
28    * <li>gap: white</li>
29    * <li>no match to consensus: white</li>
30    * <li>match consensus with pid > 80%: 100,100,255</li>
31    * <li>match consensus with pid > 60%: 153, 153, 255</li>
32    * <li>match consensus with pid > 40%: 204, 204, 255</li>
33    * <li>match consensus with pid <= 40%: white</li>
34    * <li>joint consensus matching</li>
35    * <li>case insensitive matching</li>
36    * <ul>
37    */
38   @Test(groups = "Functional")
39   public void testFindColour()
40   {
41     ColourSchemeI scheme = new PIDColourScheme();
42
43     /*
44      * doesn't use column or sequence
45      * we assume consensus residue is computed as upper case
46      */
47     assertEquals(scheme.findColour('A', 0, null, "A", 0f), white);
48     assertEquals(scheme.findColour('A', 0, null, "A", 40f), white);
49     assertEquals(scheme.findColour('A', 0, null, "A", 40.1f), over40);
50     assertEquals(scheme.findColour('A', 0, null, "A", 60f), over40);
51     assertEquals(scheme.findColour('A', 0, null, "A", 60.1f), over60);
52     assertEquals(scheme.findColour('A', 0, null, "A", 80f), over60);
53     assertEquals(scheme.findColour('A', 0, null, "A", 80.1f), over80);
54     assertEquals(scheme.findColour('A', 0, null, "A", 100f), over80);
55     assertEquals(scheme.findColour('A', 0, null, "KFV", 100f), white);
56
57     assertEquals(scheme.findColour('a', 0, null, "A", 80f), over60);
58     assertEquals(scheme.findColour('A', 0, null, "AC", 80f), over60);
59     assertEquals(scheme.findColour('A', 0, null, "KCA", 80f), over60);
60   }
61
62   /**
63    * Test that changing the 'ignore gaps in consensus' in the viewport (an
64    * option on the annotation label popup menu) results in a change to the
65    * colouring
66    */
67   @Test(groups = "Functional")
68   public void testFindColour_ignoreGaps()
69   {
70     /*
71      * AAAAA
72      * AAAAA
73      * -CCCC
74      * FFFFF
75      * 
76      * first column consensus is A
77      * first column PID is 50%, or 67% ignoring gaps
78      */
79     String seqs = ">seq1\nAAAAA\n>seq2\nAAAAA\n>seq3\n-CCCC\n>seq4\nFFFFF\n";
80
81     /*
82      * load data and wait for consensus to be computed
83      */
84     AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(seqs,
85             DataSourceType.PASTE);
86     AlignViewport viewport = af.getViewport();
87     viewport.setIgnoreGapsConsensus(false, af.alignPanel);
88     do
89     {
90       try
91       {
92         Thread.sleep(50);
93       } catch (InterruptedException x)
94       {
95       }
96     } while (af.getViewport().getCalcManager().isWorking());
97     af.changeColour_actionPerformed(JalviewColourScheme.PID.toString());
98
99     SequenceI seq = viewport.getAlignment().getSequenceAt(0);
100
101     /*
102      * including gaps, A should be coloured for 50% consensus
103      */
104     Color c = viewport.getResidueShading().findColour('A', 0, seq);
105     assertEquals(c, over40);
106
107     /*
108      * now choose to ignore gaps; colour should be for 67%
109      */
110     viewport.setIgnoreGapsConsensus(true, af.alignPanel);
111     c = viewport.getResidueShading().findColour('A', 0, seq);
112     assertEquals(c, over60);
113   }
114 }