WebColorsTest.java
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2025 Apryse Group NV
Authors: Apryse Software.
This program is offered under a commercial and under the AGPL license.
For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
AGPL licensing:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itextpdf.kernel.colors;
import com.itextpdf.test.ExtendedITextTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Tag;
@Tag("UnitTest")
public class WebColorsTest extends ExtendedITextTest {
private static final double RGB_MAX_VAL = 255.0;
@Test
public void getRGBColorBySupportedNameTest() {
String colorName = "violet";
DeviceRgb cmpRgb = new DeviceRgb(0xee, 0x82, 0xee);
DeviceRgb resultRgb = WebColors.getRGBColor(colorName);
Assertions.assertEquals(cmpRgb, resultRgb);
}
@Test
public void getRGBColorByUnsupportedNameTest() {
String colorName = "tangerine";
DeviceRgb cmpRgb = new DeviceRgb(0,0,0);
DeviceRgb resultRgb = WebColors.getRGBColor(colorName);
Assertions.assertEquals(cmpRgb, resultRgb);
}
@Test
public void getRGBAColorByNameTest() {
String colorName = "violet";
float[] cmpRgba = new float[]{(float)(238/RGB_MAX_VAL), (float)(130/RGB_MAX_VAL), (float)(238/RGB_MAX_VAL), (float)(1.0)};
float delta = (float)(0.0001);
float[] resultRgba = WebColors.getRGBAColor(colorName);
Assertions.assertArrayEquals(cmpRgba, resultRgba, delta);
}
@Test
public void getRGBAColorByCodeWithHashTest() {
//corresponding color name = "violet"
String hashHex = "#EE82EE";
float[] cmpRgba = new float[]{(float)(238/RGB_MAX_VAL), (float)(130/RGB_MAX_VAL), (float)(238/RGB_MAX_VAL), (float)(1.0)};
float delta = (float)(0.0001);
float[] resultRgba = WebColors.getRGBAColor(hashHex);
Assertions.assertArrayEquals(cmpRgba, resultRgba, delta);
}
@Test
public void getRGBAColorByCode6DigitsTest() {
//corresponding color name = "violet"
String hexString = "EE82EE";
float[] cmpRgba = new float[]{(float)(238/RGB_MAX_VAL), (float)(130/RGB_MAX_VAL), (float)(238/RGB_MAX_VAL), (float)(1.0)};
float delta = (float)(0.0001);
float[] resultRgba = WebColors.getRGBAColor(hexString);
Assertions.assertArrayEquals(cmpRgba, resultRgba, delta);
}
@Test
public void getRGBAColorByCode3DigitsTest() {
//corresponding full hex = #990000, rgb(153,0,0)
String hexString = "900";
float[] cmpRgba = new float[]{(float)(153/RGB_MAX_VAL), (float)(0.0), (float)(0.0), (float)(1.0)};
float delta = (float)(0.0001);
float[] resultRgba = WebColors.getRGBAColor(hexString);
Assertions.assertArrayEquals(cmpRgba, resultRgba, delta);
}
@Test
public void getRGBAColorByCodeWrongDigitsNumberTest() {
String hexString = "9000";
float[] resultRgba = WebColors.getRGBAColor(hexString);
Assertions.assertNull(resultRgba);
}
@Test
public void getRGBAColorByRgbObjectTest() {
//corresponding color name = "violet"
String rgbString = "rgb(238,130,238)";
float[] cmpRgba = new float[]{(float)(238/RGB_MAX_VAL), (float)(130/RGB_MAX_VAL), (float)(238/RGB_MAX_VAL), (float)(1.0)};
float delta = (float)(0.0001);
float[] resultRgba = WebColors.getRGBAColor(rgbString);
Assertions.assertArrayEquals(cmpRgba, resultRgba, delta);
}
@Test
public void getRGBAColorByRgbaObjectTest() {
//corresponding color name = "violet"
String rgbaString = "rgba(238,130,238,255)";
float[] cmpRgba = new float[]{(float)(238/RGB_MAX_VAL), (float)(130/RGB_MAX_VAL), (float)(238/RGB_MAX_VAL), (float)(1.0)};
float delta = (float)(0.0001);
float[] resultRgba = WebColors.getRGBAColor(rgbaString);
Assertions.assertArrayEquals(cmpRgba, resultRgba, delta);
}
@Test
public void getCMYKColorByDeviceCmykTest() {
//corresponding color name = "violet"
String cmykString = "device-cmyk(44% 100% 0% 0%)";
float[] cmpCmyk = new float[]{0.44f, 1f, 0f, 0f, 1f};
float delta = (float)(0.0001);
float[] resultCmyk = WebColors.getCMYKArray(cmykString);
Assertions.assertArrayEquals(cmpCmyk, resultCmyk, delta);
}
@Test
public void getCMYKColorByDeviceCmykWithOpacityTest() {
//corresponding color name = "violet"
String cmykString = "device-cmyk(44% 100% 0% 0% / .8)";
float[] cmpCmyk = new float[]{0.44f, 1f, 0f, 0f, 0.8f};
float delta = (float)(0.0001);
float[] resultCmyk = WebColors.getCMYKArray(cmykString);
Assertions.assertArrayEquals(cmpCmyk, resultCmyk, delta);
}
@Test
public void getCMYKColorByDeviceCmykWithOpacityAndFallbackTest() {
//corresponding color name = "violet"
String cmykString = "device-cmyk(44% 100% 0% 0% / .8 rgb(238,130,238))";
float[] cmpCmyk = new float[]{0.44f, 1f, 0f, 0f, 0.8f};
float delta = (float)(0.0001);
float[] resultCmyk = WebColors.getCMYKArray(cmykString);
Assertions.assertArrayEquals(cmpCmyk, resultCmyk, delta);
}
@Test
public void getCMYKColorWithNoBlack() {
String cmykString = "device-cmyk(44% 100% 0%))";
float[] cmpCmyk = new float[]{0.44f, 1f, 0f, 1f, 1f};
float delta = (float)(0.0001);
float[] resultCmyk = WebColors.getCMYKArray(cmykString);
Assertions.assertArrayEquals(cmpCmyk, resultCmyk, delta);
}
@Test
public void getCMYKColorWithInvalidDeviceCmykDefinition() {
String cmykString = "cmyk(44% 100% 0% 1%))";
float[] resultCmyk = WebColors.getCMYKArray(cmykString);
Assertions.assertNull(resultCmyk);
}
@Test
public void getCMYKColorWithExceptionDuringParsing() {
float[] resultCmyk = WebColors.getCMYKArray(null);
Assertions.assertNull(resultCmyk);
}
@Test
public void getRGBAColorWithExceptionDuringParsing() {
float[] resultCmyk = WebColors.getRGBAColor(null);
Assertions.assertNull(resultCmyk);
}
@Test
public void getRGBAColorWithExceptionDuringParsingAlpha() {
float[] resultCmyk = WebColors.getRGBAColor("rgba(44, 100, 0, 0,75)");
Assertions.assertNull(resultCmyk);
}
@Test
public void getCMYKColorTest() {
//corresponding color name = "violet"
String cmykString = "device-cmyk(44% 100% 0% 0%)";
float[] cmpCmyk = new float[]{0.44f, 1f, 0f, 0f};
float delta = (float)(0.0001);
DeviceCmyk resultCmyk = WebColors.getCMYKColor(cmykString);
Assertions.assertArrayEquals(cmpCmyk, resultCmyk.colorValue, delta);
}
@Test
public void getCMYKColorFloatTest() {
String cmykString = "device-cmyk(0.44 1 0.2 0.2)";
float[] cmpCmyk = new float[]{0.44f, 1f, 0.2f, 0.2f};
float delta = (float)(0.0001);
DeviceCmyk resultCmyk = WebColors.getCMYKColor(cmykString);
Assertions.assertArrayEquals(cmpCmyk, resultCmyk.colorValue, delta);
}
@Test
public void getCMYKColorNullTest() {
String cmykString = "null";
float[] cmpCmyk = new float[]{0f, 0f, 0f, 1f};
float delta = (float)(0.0001);
DeviceCmyk resultCmyk = WebColors.getCMYKColor(cmykString);
Assertions.assertArrayEquals(cmpCmyk, resultCmyk.colorValue, delta);
}
}