/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.util; import java.awt.Color; import org.geotools.factory.Hints; import org.geotools.filter.ConstantExpression; import junit.framework.TestCase; /** * * * @source $URL$ */ public class ColorConverterFactoryTest extends TestCase { private static final Color THISTLE = new Color(216, 191, 216); private static final Color LEMON_CHIFFON = new Color(255, 250, 205); private static final Color ALICE_BLUE = new Color(240, 248, 255); private static final Color GRAY_TRANSPARENT = new Color(128, 128, 128, 128); private static final Color GRAY = new Color(128, 128, 128); ColorConverterFactory factory; protected void setUp() throws Exception { factory = new ColorConverterFactory(); } public void testVsConstantExpression() throws Exception { ConstantExpression expr = ConstantExpression.color(Color.RED); String expected = expr.evaluate(null, String.class ); Converter converter = factory.createConverter( Color.class, String.class, null ); String actual = converter.convert( Color.RED, String.class ); assertEquals( expected, actual ); } public void testFromString() throws Exception { assertEquals( Color.RED, convert( "#FF0000" ) ); } public void testFromInteger() throws Exception { assertEquals( Color.RED, convert(0xFF0000) ); assertEquals( "no alpha", new Color( 0,0,255,255), convert(0x000000FF) ); assertEquals( "255 alpha", new Color( 0,0,255,255), convert(0xFF0000FF) ); assertEquals( "1 alpha", new Color( 0,0,255,1), convert(0x010000FF) ); } public void testFromLong() throws Exception { assertEquals( Color.RED, convert(0xFF0000) ); assertEquals( "no alpha", new Color( 0,0,255,255), convert((long) 0x000000FF) ); assertEquals( "255 alpha", new Color( 0,0,255,255), convert((long) 0xFF0000FF) ); assertEquals( "1 alpha", new Color( 0,0,255,1), convert((long) 0x010000FF) ); } public void testToCSS() throws Exception { Converter converter = factory.createConverter(Color.class, String.class, new Hints(Hints.COLOR_DEFINITION, "CSS")); assertEquals("aliceblue", "aliceblue", converter.convert(ALICE_BLUE, String.class)); assertEquals("gray", "gray", converter.convert(GRAY, String.class)); assertEquals("pale blue", "rgb(33,66,255)", converter.convert(new Color(33, 66, 255), String.class)); assertEquals("gray transparent", "rgba(128,128,128,0.5)", converter.convert(GRAY_TRANSPARENT, String.class)); assertEquals("blueish", "rgba(33,66,255,0.992)", converter.convert(new Color(33, 66, 255, 254), String.class)); } public void testFromCss() throws Exception { Converter converter = factory.createConverter(String.class, Color.class, new Hints(Hints.COLOR_DEFINITION, "CSS")); assertEquals("aliceblue", ALICE_BLUE, converter.convert("aliceblue", Color.class)); assertEquals("AliceBlue", ALICE_BLUE, converter.convert("AliceBlue", Color.class)); assertEquals("gray", GRAY, converter.convert("gray", Color.class)); assertEquals("lemonchiffon", LEMON_CHIFFON, converter.convert("lemonchiffon", Color.class)); assertEquals("WHITE", Color.WHITE, converter.convert("WHITE", Color.class)); assertEquals("black", Color.BLACK, converter.convert("black", Color.class)); assertEquals("thistle", THISTLE, converter.convert("thistle", Color.class)); assertEquals("hex", GRAY, converter.convert("#808080", Color.class)); assertEquals("hex alpha", GRAY_TRANSPARENT, converter.convert("#80808080", Color.class)); assertEquals("rgb", GRAY, converter.convert("rgb(128,128,128)", Color.class)); assertEquals("rgba", GRAY_TRANSPARENT, converter.convert("rgba(128,128,128, 0.5)", Color.class)); assertEquals("rgba", GRAY, converter.convert("rgba(128,128,128, 1)", Color.class)); assertEquals("rgba", new Color(33,66,255,254), converter.convert("rgba(33,66,255,0.99607843)", Color.class)); } public void testAlpha() throws Exception { Converter converter = factory.createConverter(String.class, Color.class, null); assertEquals("hex", GRAY, converter.convert("#808080", Color.class)); assertNull("hex alpha", converter.convert("#80808080", Color.class)); } Color convert( Object value ) throws Exception { Converter converter = factory.createConverter( value.getClass(), Color.class, null ); return (Color) converter.convert( value, Color.class ); } public void testRegisteredWithConverters(){ Color color = Converters.convert("#189E77", Color.class ); Color expected = new Color(24,158,119); assertNotNull( "converter not registered", color ); assertEquals( expected, color ); } }