/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 20'17, 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.filter.function.color; import static org.junit.Assert.assertEquals; import java.awt.Color; import org.geotools.factory.CommonFactoryFinder; import org.geotools.util.Converters; import org.junit.Test; import org.opengis.filter.FilterFactory2; import org.opengis.filter.expression.Function; public class ColorFunctionsTest { static final FilterFactory2 FF = CommonFactoryFinder.getFilterFactory2(); @Test public void testSaturateAbsolute() { Function function = FF.function("saturate", FF.literal("#80e619"), FF.literal("20%")); Color result = (Color) function.evaluate(null); assertEquals("#80FF00", Converters.convert(result, String.class)); } @Test public void testSaturateAbsoluteOvershoot() { Function function = FF.function("saturate", FF.literal("#80e619"), FF.literal("80%")); Color result = (Color) function.evaluate(null); assertEquals("#80FF00", Converters.convert(result, String.class)); } @Test public void testSaturateRelative() { Function function = FF.function("saturate", FF.literal("#80e619"), FF.literal("10%"), FF.literal("relative")); Color result = (Color) function.evaluate(null); assertEquals("#80F00F", Converters.convert(result, String.class)); } @Test public void testDesaturateAbsolute() { Function function = FF.function("desaturate", FF.literal("#80e619"), FF.literal("20%")); Color result = (Color) function.evaluate(null); assertEquals("#80CC33", Converters.convert(result, String.class)); } @Test public void testDesaturateAbsoluteOvershoot() { Function function = FF.function("desaturate", FF.literal("#80e619"), FF.literal("90%")); Color result = (Color) function.evaluate(null); assertEquals("#808080", Converters.convert(result, String.class)); } @Test public void testDesaturateRelative() { Function function = FF.function("desaturate", FF.literal("#80e619"), FF.literal("10%"), FF.literal("relative")); Color result = (Color) function.evaluate(null); assertEquals("#80DC23", Converters.convert(result, String.class)); } @Test public void testDarken() { Function function = FF.function("darken", FF.literal("#3cb878"), FF.literal("30%")); Color result = (Color) function.evaluate(null); assertEquals("#16452D", Converters.convert(result, String.class)); } @Test public void testLighten() { Function function = FF.function("lighten", FF.literal("#3cb878"), FF.literal("30%")); Color result = (Color) function.evaluate(null); assertEquals("#AAE3C6", Converters.convert(result, String.class)); } @Test public void testMix() { Function function = FF.function("mix", FF.literal("#ff0000"), FF.literal("#0000ff"), FF.literal("50%")); Color result = (Color) function.evaluate(null); assertEquals("#800080", Converters.convert(result, String.class)); } @Test public void testTint() { Function function = FF.function("tint", FF.literal("#007fff"), FF.literal("50%")); Color result = (Color) function.evaluate(null); assertEquals("#80BFFF", Converters.convert(result, String.class)); } @Test public void testShade() { Function function = FF.function("shade", FF.literal("#007fff"), FF.literal("50%")); Color result = (Color) function.evaluate(null); assertEquals("#004080", Converters.convert(result, String.class)); } @Test public void testSpin() { Color color = new HSLColor(10, 0.9, 0.5).toRGB(); Function function = FF.function("spin", FF.literal(color), FF.literal(30)); Color result = (Color) function.evaluate(null); assertEquals("#F2A60D", Converters.convert(result, String.class)); } @Test public void testSpinBackwards() { Color color = new HSLColor(10, 0.9, 0.5).toRGB(); // this conversion is lossy Function function = FF.function("spin", FF.literal(color), FF.literal(-30)); Color result = (Color) function.evaluate(null); assertEquals("#F20D5A", Converters.convert(result, String.class)); } @Test public void testGrayscale() { Function function = FF.function("grayscale", FF.literal("#ff0000")); Color result = (Color) function.evaluate(null); assertEquals("#808080", Converters.convert(result, String.class)); } @Test public void testContrastNoLightDark() { Function function = FF.function("contrast", FF.literal("#bbbbbb")); Color result = (Color) function.evaluate(null); assertEquals("#000000", Converters.convert(result, String.class)); } @Test public void testContrastDarkReference() { Function function = FF.function("contrast", FF.literal("#222222"), FF.literal("#101010")); Color result = (Color) function.evaluate(null); assertEquals("#FFFFFF", Converters.convert(result, String.class)); } @Test public void testContrastDarkLigthReference() { Function function = FF.function("contrast", FF.literal("#222222"), FF.literal("#101010"), FF.literal("#dddddd")); Color result = (Color) function.evaluate(null); assertEquals("#DDDDDD", Converters.convert(result, String.class)); } @Test public void testContrastLowThreshold() { Color color = new HSLColor(90, 1, 0.5).toRGB(); Function function = FF.function("contrast", FF.literal(color), FF.literal("#000000"), FF.literal("#ffffff"), FF.literal("30%")); Color result = (Color) function.evaluate(null); assertEquals("#000000", Converters.convert(result, String.class)); } @Test public void testContrastHighThreshold() { Color color = new HSLColor(90, 1, 0.5).toRGB(); Function function = FF.function("contrast", FF.literal(color), FF.literal("#000000"), FF.literal("#ffffff"), FF.literal("80%")); Color result = (Color) function.evaluate(null); assertEquals("#FFFFFF", Converters.convert(result, String.class)); } @Test public void testHslFunction() { Function function = FF.function("hsl", FF.literal(90), FF.literal("100%"), FF.literal("50%")); Color result = (Color) function.evaluate(null); assertEquals("#80FF00", Converters.convert(result, String.class)); } }