X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fschemes%2FClustalxColourSchemeTest.java;fp=test%2Fjalview%2Fschemes%2FClustalxColourSchemeTest.java;h=d35ca76ecdbfcbd3b81ffa73132440377919ef67;hb=2595e9d4ee0dbbd3406a98c4e49a61ccde806479;hp=0000000000000000000000000000000000000000;hpb=e20075ba805d744d7cc4976e2b8d5e5840fb0a8d;p=jalview.git diff --git a/test/jalview/schemes/ClustalxColourSchemeTest.java b/test/jalview/schemes/ClustalxColourSchemeTest.java new file mode 100644 index 0000000..d35ca76 --- /dev/null +++ b/test/jalview/schemes/ClustalxColourSchemeTest.java @@ -0,0 +1,134 @@ +package jalview.schemes; + +import static org.testng.Assert.assertEquals; + +import jalview.datamodel.AlignmentI; +import jalview.gui.AlignFrame; +import jalview.io.DataSourceType; +import jalview.io.FileLoader; + +import java.awt.Color; + +import org.testng.annotations.Test; + +public class ClustalxColourSchemeTest +{ + // @formatter:off + private static final String FASTA = + ">seq1\nAAANNNRQ\n" + + ">seq2\nAAANNNRQ\n" + + ">seq3\nAAANNNRQ\n" + + ">seq4\nAAANNNRQ\n" + + ">seq5\nAAANYYKQ\n" + + ">seq6\nAAANYYKQ\n" + + ">seq7\nAVKWYYKQ\n" + + ">seq8\nKKKWYYQQ\n" + + ">seq9\nKKKWWYQQ\n" + + ">seq0\nKKKWWWQW\n"; + // @formatter:on + + @Test(groups = "Functional") + public void testFindColour() + { + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(FASTA, + DataSourceType.PASTE); + AlignmentI al = af.getViewport().getAlignment(); + ClustalxColourScheme cs = new ClustalxColourScheme(al, null); + + /* + * column 1 is 70% A which is above Clustalx threshold of 60% + */ + Color clustalBlue = new Color(0.5f, 0.7f, 0.9f); + assertEquals(cs.findColour('A', 0, al.getSequenceAt(0)), clustalBlue); + + /* + * column 2 is 70% A or V which is above Clustalx threshold for group + */ + assertEquals(cs.findColour('A', 0, al.getSequenceAt(1)), clustalBlue); + + /* + * column 3 is 60% A which is not above Clustalx threshold + * the Ks in the other rows are not in the same Clustalx group + */ + assertEquals(cs.findColour('A', 2, al.getSequenceAt(1)), Color.white); + + /* + * column 4 is 60% N which is above Clustalx threshold of 50% + */ + Color clustalGreen = new Color(0.1f, 0.8f, 0.1f); + assertEquals(cs.findColour('N', 3, al.getSequenceAt(1)), clustalGreen); + + /* + * column 5 is 40% N and 40% Y which fails to pass the threshold of + * 50% N or 85% either + */ + assertEquals(cs.findColour('N', 4, al.getSequenceAt(1)), Color.white); + + /* + * column 6 is 40% N and 50% Y which fails to pass the threshold of + * 85% for either + */ + assertEquals(cs.findColour('N', 5, al.getSequenceAt(1)), Color.white); + + /* + * column 7 is 40% R and 30% K which combine to make > 60% + */ + Color clustalRed = new Color(0.9f, 0.2f, 0.1f); + assertEquals(cs.findColour('R', 6, al.getSequenceAt(1)), clustalRed); + assertEquals(cs.findColour('K', 6, al.getSequenceAt(7)), clustalRed); + + /* + * column 8 is >85% Q which qualifies K and R to be red + */ + assertEquals(cs.findColour('R', 7, al.getSequenceAt(1)), clustalRed); + assertEquals(cs.findColour('K', 7, al.getSequenceAt(1)), clustalRed); + + // TODO more test cases; check if help documentation matches implementation + } + + // @formatter:on + + /** + * Test for colour calculation when the consensus percentage ignores gapped + * sequences + */ + @Test(groups = "Functional") + public void testFindColour_ignoreGaps() + { + /* + * CCC + * CCC + * -CC + * first column is 66% C (blue) including gaps + * or 100% C ignoring gaps + */ + String fasta = ">seq1\nCCC\n>seq2\nccc\n>seq3\n-CC\n"; + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(fasta, + DataSourceType.PASTE); + AlignmentI al = af.getViewport().getAlignment(); + ClustalxColourScheme cs = new ClustalxColourScheme(al, null); + + /* + * column 1 is 66% C which is above Clustalx threshold of 60% + */ + Color clustalBlue = ClustalxColourScheme.ClustalColour.BLUE.colour; + assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalBlue); + + /* + * set directly to ignore gaps + */ + cs.setIncludeGaps(false); + Color clustalPink = ClustalxColourScheme.ClustalColour.PINK.colour; + assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalPink); + + /* + * set ignore gaps on the viewport... + */ + cs.setIncludeGaps(true); + assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalBlue); + af.getViewport().setIgnoreGapsConsensus(true, af.alignPanel); + // next test fails: colour scheme does not read ignore gaps flag from + // viewport + // assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalPink); + } +}