From acd787dcb8c9ff996e9f0a541a5a8fa093b0adec Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 21 Feb 2008 11:34:25 +0000 Subject: [PATCH] Fix bug 38921, where HSSFPalette.findSimilar() wasn't working properly, and add tests for it git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@629755 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/changes.xml | 1 + src/documentation/content/xdocs/status.xml | 1 + .../poi/hssf/usermodel/HSSFPalette.java | 4 +- .../poi/hssf/usermodel/TestHSSFPalette.java | 43 +++++++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 46fdb22ac..eea475fd2 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -36,6 +36,7 @@ + 38921 - Have HSSFPalette.findSimilar() work properly 44456 - Fix the contrib SViewer / SViewerPanel to not fail on sheets with missing rows 44403 - Further support for unusual, but valid, arguments to the Mid function 44410 - Support for whole-column ranges, such as C:C, in formula strings and the formula evaluator diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index fec81a1e1..2d176896f 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -33,6 +33,7 @@ + 38921 - Have HSSFPalette.findSimilar() work properly 44456 - Fix the contrib SViewer / SViewerPanel to not fail on sheets with missing rows 44403 - Further support for unusual, but valid, arguments to the Mid function 44410 - Support for whole-column ranges, such as C:C, in formula strings and the formula evaluator diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java b/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java index 7fc552595..8674904d0 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java @@ -99,9 +99,11 @@ public class HSSFPalette for (short i = (short) PaletteRecord.FIRST_COLOR_INDEX; b != null; b = palette.getColor(++i)) { - int colorDistance = red - b[0] + green - b[1] + blue - b[2]; + int colorDistance = Math.abs(red - b[0]) + + Math.abs(green - b[1]) + Math.abs(blue - b[2]); if (colorDistance < minColorDistance) { + minColorDistance = colorDistance; result = getColor(i); } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPalette.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPalette.java index c5674b9e7..a0f09696b 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPalette.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPalette.java @@ -160,6 +160,49 @@ public class TestHSSFPalette extends TestCase assertEquals("FFFF:0:FFFF", p.getColor((short)14).getHexString()); } + public void testFindSimilar() throws Exception { + HSSFWorkbook book = new HSSFWorkbook(); + HSSFPalette p = book.getCustomPalette(); + + + // Add a few edge colours in + p.setColorAtIndex((short)8, (byte)-1, (byte)0, (byte)0); + p.setColorAtIndex((short)9, (byte)0, (byte)-1, (byte)0); + p.setColorAtIndex((short)10, (byte)0, (byte)0, (byte)-1); + + // And some near a few of them + p.setColorAtIndex((short)11, (byte)-1, (byte)2, (byte)2); + p.setColorAtIndex((short)12, (byte)-2, (byte)2, (byte)10); + p.setColorAtIndex((short)13, (byte)-4, (byte)0, (byte)0); + p.setColorAtIndex((short)14, (byte)-8, (byte)0, (byte)0); + + assertEquals( + "FFFF:0:0", p.getColor((short)8).getHexString() + ); + + // Now check we get the right stuff back + assertEquals( + p.getColor((short)8).getHexString(), + p.findSimilarColor((byte)-1, (byte)0, (byte)0).getHexString() + ); + assertEquals( + p.getColor((short)8).getHexString(), + p.findSimilarColor((byte)-2, (byte)0, (byte)0).getHexString() + ); + assertEquals( + p.getColor((short)8).getHexString(), + p.findSimilarColor((byte)-1, (byte)1, (byte)0).getHexString() + ); + assertEquals( + p.getColor((short)11).getHexString(), + p.findSimilarColor((byte)-1, (byte)2, (byte)1).getHexString() + ); + assertEquals( + p.getColor((short)12).getHexString(), + p.findSimilarColor((byte)-1, (byte)2, (byte)10).getHexString() + ); + } + /** * Verifies that the generated gnumeric-format string values match the * hardcoded values in the HSSFColor default color palette