JAL-4090 JAL-1551 source license
[jalview.git] / test / jalview / util / ColorUtilsTest.java
index 9a5d093..9c9437e 100644 (file)
@@ -102,8 +102,8 @@ public class ColorUtilsTest
     /*
      * value two-thirds of the way between min and max
      */
-    col = ColorUtils
-            .getGraduatedColour(30f, 10f, minColour, 40f, maxColour);
+    col = ColorUtils.getGraduatedColour(30f, 10f, minColour, 40f,
+            maxColour);
     assertEquals(153, col.getRed());
     // Color constructor rounds float value to nearest int
     assertEquals(167, col.getGreen());
@@ -112,15 +112,15 @@ public class ColorUtilsTest
     /*
      * value = min
      */
-    col = ColorUtils
-            .getGraduatedColour(10f, 10f, minColour, 30f, maxColour);
+    col = ColorUtils.getGraduatedColour(10f, 10f, minColour, 30f,
+            maxColour);
     assertEquals(minColour, col);
 
     /*
      * value = max
      */
-    col = ColorUtils
-            .getGraduatedColour(30f, 10f, minColour, 30f, maxColour);
+    col = ColorUtils.getGraduatedColour(30f, 10f, minColour, 30f,
+            maxColour);
     assertEquals(maxColour, col);
 
     /*
@@ -132,15 +132,15 @@ public class ColorUtilsTest
     /*
      * value > max
      */
-    col = ColorUtils
-            .getGraduatedColour(40f, 10f, minColour, 30f, maxColour);
+    col = ColorUtils.getGraduatedColour(40f, 10f, minColour, 30f,
+            maxColour);
     assertEquals(maxColour, col);
 
     /*
      * min = max
      */
-    col = ColorUtils
-            .getGraduatedColour(40f, 10f, minColour, 10f, maxColour);
+    col = ColorUtils.getGraduatedColour(40f, 10f, minColour, 10f,
+            maxColour);
     assertEquals(minColour, col);
   }
 
@@ -166,4 +166,83 @@ public class ColorUtilsTest
     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));
+    // out of range, but Color constructor just or's the rgb value with 0
+    assertEquals(Color.black, ColorUtils.parseColourString("1000000"));
+
+    /*
+     * 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"));
+    assertEquals(Color.WHITE, 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.getAWTColorFromName("white"));
+    assertEquals(Color.white, ColorUtils.getAWTColorFromName("White"));
+    assertEquals(Color.white, ColorUtils.getAWTColorFromName("WHITE"));
+    assertEquals(Color.pink, ColorUtils.getAWTColorFromName("pink"));
+    assertNull(ColorUtils.getAWTColorFromName("mauve")); // no such name
+    assertNull(ColorUtils.getAWTColorFromName(""));
+    assertNull(ColorUtils.getAWTColorFromName(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 "));
+  }
 }