package jalview.schemes; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import jalview.bin.Cache; import jalview.bin.Jalview; import jalview.datamodel.AlignmentI; import jalview.datamodel.AnnotatedCollectionI; import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.AlignViewport; 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 { @Override public ColourSchemeI getInstance(AnnotatedCollectionI sg, Map hiddenRepSequences) { final ColourSchemeI odd = ColourSchemes.getInstance() .getColourScheme(JalviewColourScheme.Taylor.toString(), (AnnotatedCollectionI) null); final ColourSchemeI even = ColourSchemes.getInstance() .getColourScheme(JalviewColourScheme.Zappo.toString(), (AnnotatedCollectionI) null); return new ResidueColourScheme() { @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 ColourSchemeI getInstance(AnnotatedCollectionI ac, Map hrs) { return null; } @Override public String getSchemeName() { return Stripy.this.getSchemeName(); } }; } @Override public String getSchemeName() { return "stripy"; } }; /* * a colour scheme that is Clustal but using AWT colour equivalents */ class MyClustal extends ResidueColourScheme { ColourSchemeI delegate; public MyClustal() { } public MyClustal(ColourSchemeI scheme) { delegate = scheme; } @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(new ClustalxColourScheme().getInstance(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_forViewport() { AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( ">seq1\nAGLRTWQU", DataSourceType.PASTE); ColourSchemes cs = ColourSchemes.getInstance(); AlignViewport viewport = af.getViewport(); AlignmentI alignment = viewport.getAlignment(); assertTrue(cs.getColourScheme(JalviewColourScheme.Blosum62.toString(), alignment) instanceof Blosum62ColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Buried.toString(), alignment) instanceof BuriedColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Clustal.toString(), alignment) instanceof ClustalxColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Helix.toString(), alignment) instanceof HelixColourScheme); assertTrue(cs.getColourScheme( JalviewColourScheme.Hydrophobic.toString(), alignment) instanceof HydrophobicColourScheme); assertTrue(cs.getColourScheme( JalviewColourScheme.Nucleotide.toString(), alignment) instanceof NucleotideColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.PID.toString(), alignment) instanceof PIDColourScheme); assertTrue(cs.getColourScheme( JalviewColourScheme.PurinePyrimidine.toString(), alignment) instanceof PurinePyrimidineColourScheme); assertTrue(cs.getColourScheme( JalviewColourScheme.RNAHelices.toString(), alignment) instanceof RNAHelicesColour); assertTrue(cs.getColourScheme(JalviewColourScheme.Strand.toString(), alignment) instanceof StrandColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Taylor.toString(), alignment) instanceof TaylorColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.TCoffee.toString(), alignment) instanceof TCoffeeColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Turn.toString(), alignment) instanceof TurnColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Zappo.toString(), alignment) instanceof ZappoColourScheme); af.closeMenuItem_actionPerformed(true); } @Test(groups = "Functional") public void testGetColourScheme_forAnnotatedCollection() { AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( ">seq1\nAGLRTWQU", DataSourceType.PASTE); ColourSchemes cs = ColourSchemes.getInstance(); AnnotatedCollectionI al = af.getViewport().getAlignment(); assertTrue(cs.getColourScheme(JalviewColourScheme.Blosum62.toString(), al) instanceof Blosum62ColourScheme); assertTrue(cs .getColourScheme(JalviewColourScheme.Buried.toString(), al) instanceof BuriedColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Clustal.toString(), al) instanceof ClustalxColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Helix.toString(), al) instanceof HelixColourScheme); assertTrue(cs.getColourScheme( JalviewColourScheme.Hydrophobic.toString(), al) instanceof HydrophobicColourScheme); assertTrue(cs.getColourScheme( JalviewColourScheme.Nucleotide.toString(), al) instanceof NucleotideColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.PID.toString(), al) instanceof PIDColourScheme); assertTrue(cs.getColourScheme( JalviewColourScheme.PurinePyrimidine.toString(), al) instanceof PurinePyrimidineColourScheme); assertTrue(cs.getColourScheme( JalviewColourScheme.RNAHelices.toString(), al) instanceof RNAHelicesColour); assertTrue(cs .getColourScheme(JalviewColourScheme.Strand.toString(), al) instanceof StrandColourScheme); assertTrue(cs .getColourScheme(JalviewColourScheme.Taylor.toString(), al) instanceof TaylorColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.TCoffee.toString(), al) instanceof TCoffeeColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Turn.toString(), al) instanceof TurnColourScheme); assertTrue(cs.getColourScheme(JalviewColourScheme.Zappo.toString(), al) instanceof ZappoColourScheme); 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.getResidueBoxColour(seq, 88); // E 255,0,102 Color taylor2 = sr.getResidueBoxColour(seq, 89); // A 204,255,0 Color taylor3 = sr.getResidueBoxColour(seq, 90); // 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.getResidueBoxColour(seq, 88); // E red Color zappo2 = sr.getResidueBoxColour(seq, 89); // A pink Color zappo3 = sr.getResidueBoxColour(seq, 90); // 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.getResidueBoxColour(seq, 88); Color stripy2 = sr.getResidueBoxColour(seq, 89); Color stripy3 = sr.getResidueBoxColour(seq, 90); assertEquals(stripy1, zappo1); assertEquals(stripy2, taylor2); assertEquals(stripy3, zappo3); /* * set and check Clustal colours */ af.changeColour_actionPerformed(JalviewColourScheme.Clustal.toString()); Color clustal1 = sr.getResidueBoxColour(seq, 88); Color clustal2 = sr.getResidueBoxColour(seq, 89); Color clustal3 = sr.getResidueBoxColour(seq, 90); 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.getResidueBoxColour(seq, 88); Color myclustal2 = sr.getResidueBoxColour(seq, 89); Color myclustal3 = sr.getResidueBoxColour(seq, 90); assertEquals(myclustal1, Color.MAGENTA); assertEquals(myclustal2, Color.BLUE); assertEquals(myclustal3, Color.ORANGE); } }