diff --git a/enabler/src/de/schildbach/pte/dto/Style.java b/enabler/src/de/schildbach/pte/dto/Style.java index a77e37b3..828d895d 100644 --- a/enabler/src/de/schildbach/pte/dto/Style.java +++ b/enabler/src/de/schildbach/pte/dto/Style.java @@ -17,6 +17,7 @@ package de.schildbach.pte.dto; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import java.io.Serializable; @@ -110,24 +111,22 @@ public class Style implements Serializable public static final int MAGENTA = 0xFFFF00FF; public static final int TRANSPARENT = 0; - public static int parseColor(final String colorString) + public static int parseColor(final String colorStr) { - if (colorString.charAt(0) == '#') + checkNotNull(colorStr); + checkArgument((colorStr.length() == 7 || colorStr.length() == 9) && colorStr.charAt(0) == '#', "Unknown color: %s", colorStr); + try { // Use a long to avoid rollovers on #ffXXXXXX - long color = Long.parseLong(colorString.substring(1), 16); - if (colorString.length() == 7) - { - // Set the alpha value - color |= 0x00000000ff000000; - } - else if (colorString.length() != 9) - { - throw new IllegalArgumentException("Unknown color"); - } + long color = Long.parseLong(colorStr.substring(1), 16); + if (colorStr.length() == 7) + color |= 0xff000000; // Amend the alpha value return (int) color; } - throw new IllegalArgumentException("Unknown color"); + catch (final NumberFormatException x) + { + throw new IllegalArgumentException("Not a number: " + colorStr); + } } public static int rgb(final int red, final int green, final int blue) diff --git a/enabler/test/de/schildbach/pte/dto/StyleTest.java b/enabler/test/de/schildbach/pte/dto/StyleTest.java index faa1916e..c98045cb 100644 --- a/enabler/test/de/schildbach/pte/dto/StyleTest.java +++ b/enabler/test/de/schildbach/pte/dto/StyleTest.java @@ -33,6 +33,36 @@ public class StyleTest assertEquals(color, Style.rgb(Style.red(color), Style.green(color), Style.blue(color))); } + @Test + public void parseColor() + { + assertEquals(0x11223344, Style.parseColor("#11223344")); + } + + @Test + public void parseColor_noOverflow() + { + assertEquals(0xffffffff, Style.parseColor("#ffffffff")); + } + + @Test + public void parseColor_amendAlpha() + { + assertEquals(0xff000000, Style.parseColor("#000000")); + } + + @Test(expected = IllegalArgumentException.class) + public void parseColor_failTooShort() + { + Style.parseColor("#"); + } + + @Test(expected = IllegalArgumentException.class) + public void parseColor_failNotANumber() + { + Style.parseColor("#11111z"); + } + @Test public void deriveForegroundColorForLightBackground() {