X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Futil%2FColorUtilsTest.java;h=08d77b625c7570d51bbd9f20e6e9ac2ee7ad0491;hb=f0fd407e5fad67185a9813c57bfc50aacaf1de6e;hp=a00d79f0fc69151aa82e693f693f7da85111dd2d;hpb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;p=jalview.git diff --git a/test/jalview/util/ColorUtilsTest.java b/test/jalview/util/ColorUtilsTest.java index a00d79f..08d77b6 100644 --- a/test/jalview/util/ColorUtilsTest.java +++ b/test/jalview/util/ColorUtilsTest.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) - * Copyright (C) 2015 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -22,14 +22,25 @@ package jalview.util; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNull; +import static org.testng.AssertJUnit.assertSame; + +import jalview.gui.JvOptionPane; import java.awt.Color; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class ColorUtilsTest { + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + Color paleColour = new Color(97, 203, 111); // pale green Color midColour = new Color(135, 57, 41); // mid red @@ -60,9 +71,6 @@ public class ColorUtilsTest assertNull(ColorUtils.brighterThan(null)); } - /** - * @see http://www.rtapo.com/notes/named_colors.html - */ @Test(groups = { "Functional" }) public void testToTkCode() { @@ -72,4 +80,165 @@ public class ColorUtilsTest assertEquals("#800080", ColorUtils.toTkCode(new Color(128, 0, 128))); // purple assertEquals("#00ff00", ColorUtils.toTkCode(new Color(0, 255, 0))); // lime } + + @Test(groups = { "Functional" }) + public void testGetGraduatedColour() + { + Color minColour = new Color(100, 100, 100); + Color maxColour = new Color(180, 200, 220); + + /* + * value half-way between min and max + */ + Color col = ColorUtils.getGraduatedColour(20f, 10f, minColour, 30f, + maxColour); + assertEquals(140, col.getRed()); + assertEquals(150, col.getGreen()); + assertEquals(160, col.getBlue()); + + /* + * value two-thirds of the way between min and max + */ + col = ColorUtils + .getGraduatedColour(30f, 10f, minColour, 40f, maxColour); + assertEquals(153, col.getRed()); + // Color constructor rounds float value to nearest int + assertEquals(167, col.getGreen()); + assertEquals(180, col.getBlue()); + + /* + * value = min + */ + col = ColorUtils + .getGraduatedColour(10f, 10f, minColour, 30f, maxColour); + assertEquals(minColour, col); + + /* + * value = max + */ + col = ColorUtils + .getGraduatedColour(30f, 10f, minColour, 30f, maxColour); + assertEquals(maxColour, col); + + /* + * value < min + */ + col = ColorUtils.getGraduatedColour(0f, 10f, minColour, 30f, maxColour); + assertEquals(minColour, col); + + /* + * value > max + */ + col = ColorUtils + .getGraduatedColour(40f, 10f, minColour, 30f, maxColour); + assertEquals(maxColour, col); + + /* + * min = max + */ + col = ColorUtils + .getGraduatedColour(40f, 10f, minColour, 10f, maxColour); + assertEquals(minColour, col); + } + + @Test(groups = { "Functional" }) + public void testBleachColour() + { + Color colour = new Color(155, 105, 55); + assertSame(colour, ColorUtils.bleachColour(colour, 0)); + assertEquals(Color.WHITE, ColorUtils.bleachColour(colour, 1)); + assertEquals(Color.WHITE, ColorUtils.bleachColour(colour, 2)); + assertEquals(new Color(175, 135, 95), + ColorUtils.bleachColour(colour, 0.2f)); + assertEquals(new Color(225, 210, 195), + ColorUtils.bleachColour(colour, 0.7f)); + + /* + * and some 'negative fade' + */ + assertEquals(Color.BLACK, ColorUtils.bleachColour(colour, -1)); + assertEquals(Color.BLACK, ColorUtils.bleachColour(colour, -2)); + assertEquals(new Color(124, 84, 44), + ColorUtils.bleachColour(colour, -0.2f)); + assertEquals(new Color(46, 31, 16), // with rounding down + ColorUtils.bleachColour(colour, -0.7f)); + } + + @Test(groups = "Functional") + public void testParseColourString() + { + /* + * by colour name - if known to AWT, and included in + * + * @see ColourSchemeProperty.getAWTColorFromName() + */ + assertSame(Color.RED, ColorUtils.parseColourString("red")); + assertSame(Color.RED, ColorUtils.parseColourString("Red")); + assertSame(Color.RED, ColorUtils.parseColourString(" RED ")); + + /* + * by RGB hex code + */ + String hexColour = Integer.toHexString(Color.RED.getRGB() & 0xffffff); + assertEquals("ff0000", hexColour); + assertEquals(Color.RED, ColorUtils.parseColourString(hexColour)); + // 'hex' prefixes _not_ wanted here + assertNull(ColorUtils.parseColourString("0x" + hexColour)); + assertNull(ColorUtils.parseColourString("#" + hexColour)); + // hex values must be 6 hex digits + assertNull(ColorUtils.parseColourString("1000000")); + assertNull(ColorUtils.parseColourString("0ff00")); + + /* + * by RGB triplet + */ + Color c = Color.pink; + String rgb = String.format("%d,%d,%d", c.getRed(), c.getGreen(), + c.getBlue()); + assertEquals("255,175,175", rgb); + assertEquals(c, ColorUtils.parseColourString(rgb)); + assertEquals(c, ColorUtils.parseColourString("255, 175 , 175")); + + /* + * odds and ends + */ + assertNull(ColorUtils.parseColourString(null)); + assertNull(ColorUtils.parseColourString("rubbish")); + assertNull(ColorUtils.parseColourString("-1")); + assertNull(ColorUtils.parseColourString(String + .valueOf(Integer.MAX_VALUE))); + assertNull(ColorUtils.parseColourString("100,200,300")); // out of range + assertNull(ColorUtils.parseColourString("100,200")); // too few + assertNull(ColorUtils.parseColourString("100,200,100,200")); // too many + } + + @Test(groups = "Functional") + public void testGetAWTColorFromName() { + assertEquals(Color.white, ColorUtils.getColorFromName("white")); + assertEquals(Color.white, ColorUtils.getColorFromName("White")); + assertEquals(Color.white, ColorUtils.getColorFromName("WHITE")); + assertEquals(Color.pink, ColorUtils.getColorFromName("pink")); + assertNull(ColorUtils.getColorFromName("mauve")); // no such name + assertNull(ColorUtils.getColorFromName("")); + assertNull(ColorUtils.getColorFromName(null)); + } + + @Test(groups = "Functional") + public void testCreateColourFromName() + { + assertEquals(Color.white, ColorUtils.createColourFromName(null)); + assertEquals(new Color(20, 20, 20), ColorUtils.createColourFromName("")); + assertEquals(new Color(98, 131, 171), + ColorUtils.createColourFromName("None")); // no special treatment! + assertEquals(new Color(123, 211, 122), + ColorUtils.createColourFromName("hello world")); + assertEquals(new Color(27, 147, 112), + ColorUtils.createColourFromName("HELLO WORLD")); + /* + * the algorithm makes the same values for r,g,b if + * the string consists of 3 repeating substrings + */ + assertEquals(new Color(184, 184, 184), + ColorUtils.createColourFromName("HELLO HELLO HELLO ")); + } }