X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fschemes%2FColourSchemesTest.java;fp=test%2Fjalview%2Fschemes%2FColourSchemesTest.java;h=0aaa38c246b1f9577e935d959a30cdd2663210aa;hb=2595e9d4ee0dbbd3406a98c4e49a61ccde806479;hp=0000000000000000000000000000000000000000;hpb=e20075ba805d744d7cc4976e2b8d5e5840fb0a8d;p=jalview.git diff --git a/test/jalview/schemes/ColourSchemesTest.java b/test/jalview/schemes/ColourSchemesTest.java new file mode 100644 index 0000000..0aaa38c --- /dev/null +++ b/test/jalview/schemes/ColourSchemesTest.java @@ -0,0 +1,299 @@ +package jalview.schemes; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertTrue; + +import jalview.bin.Cache; +import jalview.bin.Jalview; +import jalview.datamodel.AnnotatedCollectionI; +import jalview.datamodel.SequenceCollectionI; +import jalview.datamodel.SequenceI; +import jalview.gui.AlignFrame; +import jalview.gui.Desktop; +import jalview.gui.SequenceRenderer; +import jalview.io.DataSourceType; +import jalview.io.FileLoader; +import jalview.schemes.ClustalxColourScheme.ClustalColour; + +import java.awt.Color; +import java.util.Iterator; +import java.util.Map; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class ColourSchemesTest +{ + /* + * a colour scheme that alternates Taylor and Zappo + * colouring by column + */ + class Stripy extends ResidueColourScheme + { + private ResidueColourScheme odd; + + private ResidueColourScheme even; + + private Stripy() + { + } + + /** + * constructor given colours for odd and even columns + * + * @param odd + * @param even + */ + private Stripy(ColourSchemeI cs1, ColourSchemeI cs2) + { + odd = (ResidueColourScheme) cs1; + even = (ResidueColourScheme) cs2; + } + + @Override + public ColourSchemeI getInstance(AnnotatedCollectionI sg, + Map hiddenRepSequences) + { + final ColourSchemeI cs1 = ColourSchemes.getInstance() + .getColourScheme(JalviewColourScheme.Taylor.toString(), + (AnnotatedCollectionI) null); + final ColourSchemeI cs2 = ColourSchemes.getInstance() + .getColourScheme(JalviewColourScheme.Zappo.toString(), + (AnnotatedCollectionI) null); + return new Stripy(cs1, cs2); + } + + @Override + public Color findColour(char c, int j, SequenceI seq) + { + if (j % 2 == 1) + { + return odd.findColour(c, j, seq); + } + else + { + return even.findColour(c, j, seq); + } + } + + @Override + public String getSchemeName() + { + return "stripy"; + } + }; + + /* + * a colour scheme that is Clustal but using AWT colour equivalents + */ + class MyClustal extends ResidueColourScheme + { + ClustalxColourScheme delegate; + + private MyClustal() + { + } + + private MyClustal(AnnotatedCollectionI sg, + Map hiddenRepSequences) + { + delegate = new ClustalxColourScheme(sg, hiddenRepSequences); + } + + @Override + public Color findColour(char c, int j, SequenceI seq) + { + Color col = delegate.findColour(c, j, seq); + Color result = col; + if (col.equals(ClustalColour.BLUE.colour)) + { + result = Color.blue; + } + else if (col.equals(ClustalColour.CYAN.colour)) + { + result = Color.cyan; + } + else if (col.equals(ClustalColour.GREEN.colour)) + { + result = Color.green; + } + else if (col.equals(ClustalColour.MAGENTA.colour)) + { + result = Color.magenta; + } + else if (col.equals(ClustalColour.ORANGE.colour)) + { + result = Color.orange; + } + else if (col.equals(ClustalColour.PINK.colour)) + { + result = Color.pink; + } + else if (col.equals(ClustalColour.RED.colour)) + { + result = Color.red; + } + else if (col.equals(ClustalColour.YELLOW.colour)) + { + result = Color.yellow; + } + return result; + } + + @Override + public ColourSchemeI getInstance(AnnotatedCollectionI sg, + Map hiddenRepSequences) + { + return new MyClustal(sg, hiddenRepSequences); + } + + @Override + public String getSchemeName() + { + return "MyClustal"; + } + + } + + @BeforeClass(alwaysRun = true) + public static void setUpBeforeClass() throws Exception + { + /* + * use read-only test properties file + */ + Cache.loadProperties("test/jalview/io/testProps.jvprops"); + Jalview.main(new String[] { "-nonews" }); + } + + @AfterClass(alwaysRun = true) + public static void tearDownAfterClass() throws Exception + { + Desktop.instance.closeAll_actionPerformed(null); + } + + @Test(groups = "Functional") + public void testGetColourSchemes() + { + /* + * this just verifies that built-in colour schemes are loaded into ColourSchemes + * in the order in which they are declared in the JalviewColourScheme enum + * (this also determines their order in Colour menus) + */ + Iterator schemes = ColourSchemes.getInstance().getColourSchemes().iterator(); + JalviewColourScheme[] jalviewSchemes = JalviewColourScheme.values(); + int i = 0; + while (schemes.hasNext() && i < jalviewSchemes.length) + { + assertTrue(schemes.next().getSchemeName() + .equals(jalviewSchemes[i].toString())); + i++; + } + } + + @Test(groups = "Functional") + public void testGetColourScheme() + { + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( + ">seq1\nAGLRTWQU", DataSourceType.PASTE); + ColourSchemes schemes = ColourSchemes.getInstance(); + + AnnotatedCollectionI al = af.getViewport().getAlignment(); + + for (JalviewColourScheme cs : JalviewColourScheme.values()) + { + ColourSchemeI registered = schemes.getColourScheme(cs.toString(), al); + assertSame(registered.getClass(), cs.getSchemeClass()); + } + af.closeMenuItem_actionPerformed(true); + } + + @Test(groups = "Functional") + public void testRegisterColourScheme() + { + ColourSchemes.getInstance().registerColourScheme(new Stripy()); + ColourSchemes.getInstance().registerColourScheme(new MyClustal()); + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( + "examples/uniref50.fa", DataSourceType.FILE); + /* + * set a breakpoint here to see and play with the newly registered + * colour schemes in the AlignFrame colour menu + */ + SequenceRenderer sr = new SequenceRenderer(af.getViewport()); + SequenceI seq = af.getViewport().getAlignment().findName("FER_CAPAA"); + + /* + * set and check Taylor colours + */ + af.changeColour_actionPerformed(JalviewColourScheme.Taylor.toString()); + Color taylor1 = sr.getResidueColour(seq, 88, null); // E 255,0,102 + Color taylor2 = sr.getResidueColour(seq, 89, null); // A 204,255,0 + Color taylor3 = sr.getResidueColour(seq, 90, null); // G 255,153,0 + assertEquals(taylor1, new Color(255, 0, 102)); + assertEquals(taylor2, new Color(204, 255, 0)); + assertEquals(taylor3, new Color(255, 153, 0)); + + /* + * set and check Zappo colours + */ + af.changeColour_actionPerformed(JalviewColourScheme.Zappo.toString()); + Color zappo1 = sr.getResidueColour(seq, 88, null); // E red + Color zappo2 = sr.getResidueColour(seq, 89, null); // A pink + Color zappo3 = sr.getResidueColour(seq, 90, null); // G magenta + assertEquals(zappo1, Color.red); + assertEquals(zappo2, Color.pink); + assertEquals(zappo3, Color.magenta); + + /* + * set 'stripy' colours - odd columns are Taylor and even are Zappo + */ + af.changeColour_actionPerformed("stripy"); + Color stripy1 = sr.getResidueColour(seq, 88, null); + Color stripy2 = sr.getResidueColour(seq, 89, null); + Color stripy3 = sr.getResidueColour(seq, 90, null); + assertEquals(stripy1, zappo1); + assertEquals(stripy2, taylor2); + assertEquals(stripy3, zappo3); + + /* + * set and check Clustal colours + */ + af.changeColour_actionPerformed(JalviewColourScheme.Clustal.toString()); + Color clustal1 = sr.getResidueColour(seq, 88, null); + Color clustal2 = sr.getResidueColour(seq, 89, null); + Color clustal3 = sr.getResidueColour(seq, 90, null); + assertEquals(clustal1, ClustalColour.MAGENTA.colour); + assertEquals(clustal2, ClustalColour.BLUE.colour); + assertEquals(clustal3, ClustalColour.ORANGE.colour); + + /* + * set 'MyClustal' colours - uses AWT colour equivalents + */ + af.changeColour_actionPerformed("MyClustal"); + Color myclustal1 = sr.getResidueColour(seq, 88, null); + Color myclustal2 = sr.getResidueColour(seq, 89, null); + Color myclustal3 = sr.getResidueColour(seq, 90, null); + assertEquals(myclustal1, Color.MAGENTA); + assertEquals(myclustal2, Color.BLUE); + assertEquals(myclustal3, Color.ORANGE); + } + + /** + * Tests for check if scheme name exists. Built-in scheme names are the + * toString() values of enum JalviewColourScheme. + */ + @Test(groups = "Functional") + public void testNameExists() + { + ColourSchemes cs = ColourSchemes.getInstance(); + assertFalse(cs.nameExists(null)); + assertFalse(cs.nameExists("")); + assertTrue(cs.nameExists("Clustal")); + assertTrue(cs.nameExists("CLUSTAL")); + assertFalse(cs.nameExists("CLUSTAL ")); + assertTrue(cs.nameExists("% Identity")); + assertFalse(cs.nameExists("PID")); + } +}