176 lines
6.7 KiB
Java
176 lines
6.7 KiB
Java
/* ====================================================================
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
==================================================================== */
|
|
|
|
package org.apache.poi.xssf.usermodel;
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
import java.io.IOException;
|
|
|
|
import org.apache.poi.xssf.XSSFTestDataSamples;
|
|
import org.junit.Test;
|
|
|
|
public final class TestXSSFColor {
|
|
|
|
@Test
|
|
public void testIndexedColour() throws Exception {
|
|
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx");
|
|
|
|
// Check the CTColor is as expected
|
|
XSSFColor indexed = wb.getCellStyleAt((short)1).getFillBackgroundXSSFColor();
|
|
assertEquals(true, indexed.getCTColor().isSetIndexed());
|
|
assertEquals(64, indexed.getCTColor().getIndexed());
|
|
assertEquals(false, indexed.getCTColor().isSetRgb());
|
|
assertEquals(null, indexed.getCTColor().getRgb());
|
|
|
|
// Now check the XSSFColor
|
|
// Note - 64 is a special "auto" one with no rgb equiv
|
|
assertEquals(64, indexed.getIndexed());
|
|
assertEquals(null, indexed.getRGB());
|
|
assertEquals(null, indexed.getRGBWithTint());
|
|
assertEquals(null, indexed.getARGBHex());
|
|
|
|
// Now move to one with indexed rgb values
|
|
indexed.setIndexed(59);
|
|
assertEquals(true, indexed.getCTColor().isSetIndexed());
|
|
assertEquals(59, indexed.getCTColor().getIndexed());
|
|
assertEquals(false, indexed.getCTColor().isSetRgb());
|
|
assertEquals(null, indexed.getCTColor().getRgb());
|
|
|
|
assertEquals(59, indexed.getIndexed());
|
|
assertEquals("FF333300", indexed.getARGBHex());
|
|
|
|
assertEquals(3, indexed.getRGB().length);
|
|
assertEquals(0x33, indexed.getRGB()[0]);
|
|
assertEquals(0x33, indexed.getRGB()[1]);
|
|
assertEquals(0x00, indexed.getRGB()[2]);
|
|
|
|
assertEquals(4, indexed.getARGB().length);
|
|
assertEquals(-1, indexed.getARGB()[0]);
|
|
assertEquals(0x33, indexed.getARGB()[1]);
|
|
assertEquals(0x33, indexed.getARGB()[2]);
|
|
assertEquals(0x00, indexed.getARGB()[3]);
|
|
|
|
// You don't get tinted indexed colours, sorry...
|
|
assertEquals(null, indexed.getRGBWithTint());
|
|
|
|
wb.close();
|
|
}
|
|
|
|
@Test
|
|
public void testRGBColour() throws IOException {
|
|
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50299.xlsx");
|
|
|
|
// Check the CTColor is as expected
|
|
XSSFColor rgb3 = wb.getCellStyleAt((short)25).getFillForegroundXSSFColor();
|
|
assertEquals(false, rgb3.getCTColor().isSetIndexed());
|
|
assertEquals(0, rgb3.getCTColor().getIndexed());
|
|
assertEquals(true, rgb3.getCTColor().isSetTint());
|
|
assertEquals(-0.34999, rgb3.getCTColor().getTint(), 0.00001);
|
|
assertEquals(true, rgb3.getCTColor().isSetRgb());
|
|
assertEquals(3, rgb3.getCTColor().getRgb().length);
|
|
|
|
// Now check the XSSFColor
|
|
assertEquals(0, rgb3.getIndexed());
|
|
assertEquals(-0.34999, rgb3.getTint(), 0.00001);
|
|
|
|
assertEquals("FFFFFFFF", rgb3.getARGBHex());
|
|
assertEquals(3, rgb3.getRGB().length);
|
|
assertEquals(-1, rgb3.getRGB()[0]);
|
|
assertEquals(-1, rgb3.getRGB()[1]);
|
|
assertEquals(-1, rgb3.getRGB()[2]);
|
|
|
|
assertEquals(4, rgb3.getARGB().length);
|
|
assertEquals(-1, rgb3.getARGB()[0]);
|
|
assertEquals(-1, rgb3.getARGB()[1]);
|
|
assertEquals(-1, rgb3.getARGB()[2]);
|
|
assertEquals(-1, rgb3.getARGB()[3]);
|
|
|
|
// Tint doesn't have the alpha
|
|
// tint = -0.34999
|
|
// 255 * (1 + tint) = 165 truncated
|
|
// or (byte) -91 (which is 165 - 256)
|
|
assertEquals(3, rgb3.getRGBWithTint().length);
|
|
assertEquals(-91, rgb3.getRGBWithTint()[0]);
|
|
assertEquals(-91, rgb3.getRGBWithTint()[1]);
|
|
assertEquals(-91, rgb3.getRGBWithTint()[2]);
|
|
|
|
// Set the color to black (no theme).
|
|
rgb3.setRGB(new byte[] {0, 0, 0});
|
|
assertEquals("FF000000", rgb3.getARGBHex());
|
|
assertEquals(0, rgb3.getCTColor().getRgb()[0]);
|
|
assertEquals(0, rgb3.getCTColor().getRgb()[1]);
|
|
assertEquals(0, rgb3.getCTColor().getRgb()[2]);
|
|
|
|
// Set another, is fine
|
|
rgb3.setRGB(new byte[] {16,17,18});
|
|
assertEquals("FF101112", rgb3.getARGBHex());
|
|
assertEquals(0x10, rgb3.getCTColor().getRgb()[0]);
|
|
assertEquals(0x11, rgb3.getCTColor().getRgb()[1]);
|
|
assertEquals(0x12, rgb3.getCTColor().getRgb()[2]);
|
|
|
|
wb.close();
|
|
}
|
|
|
|
@Test
|
|
public void testARGBColour() throws IOException {
|
|
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx");
|
|
|
|
// Check the CTColor is as expected
|
|
XSSFColor rgb4 = wb.getCellStyleAt((short)1).getFillForegroundXSSFColor();
|
|
assertEquals(false, rgb4.getCTColor().isSetIndexed());
|
|
assertEquals(0, rgb4.getCTColor().getIndexed());
|
|
assertEquals(true, rgb4.getCTColor().isSetRgb());
|
|
assertEquals(4, rgb4.getCTColor().getRgb().length);
|
|
|
|
// Now check the XSSFColor
|
|
assertEquals(0, rgb4.getIndexed());
|
|
assertEquals(0.0, rgb4.getTint(), 0);
|
|
|
|
assertEquals("FFFF0000", rgb4.getARGBHex());
|
|
assertEquals(3, rgb4.getRGB().length);
|
|
assertEquals(-1, rgb4.getRGB()[0]);
|
|
assertEquals(0, rgb4.getRGB()[1]);
|
|
assertEquals(0, rgb4.getRGB()[2]);
|
|
|
|
assertEquals(4, rgb4.getARGB().length);
|
|
assertEquals(-1, rgb4.getARGB()[0]);
|
|
assertEquals(-1, rgb4.getARGB()[1]);
|
|
assertEquals(0, rgb4.getARGB()[2]);
|
|
assertEquals(0, rgb4.getARGB()[3]);
|
|
|
|
// Tint doesn't have the alpha
|
|
assertEquals(3, rgb4.getRGBWithTint().length);
|
|
assertEquals(-1, rgb4.getRGBWithTint()[0]);
|
|
assertEquals(0, rgb4.getRGBWithTint()[1]);
|
|
assertEquals(0, rgb4.getRGBWithTint()[2]);
|
|
|
|
|
|
// Turn on tinting, and check it behaves
|
|
// TODO These values are suspected to be wrong...
|
|
rgb4.setTint(0.4);
|
|
assertEquals(0.4, rgb4.getTint(), 0);
|
|
|
|
assertEquals(3, rgb4.getRGBWithTint().length);
|
|
assertEquals(-1, rgb4.getRGBWithTint()[0]);
|
|
assertEquals(102, rgb4.getRGBWithTint()[1]);
|
|
assertEquals(102, rgb4.getRGBWithTint()[2]);
|
|
|
|
wb.close();
|
|
}
|
|
}
|