]> source.dussan.org Git - poi.git/commitdiff
Fix for bug 46613 - evaluator should perform case insensitive string comparisons
authorJosh Micich <josh@apache.org>
Tue, 27 Jan 2009 19:02:13 +0000 (19:02 +0000)
committerJosh Micich <josh@apache.org>
Tue, 27 Jan 2009 19:02:13 +0000 (19:02 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@738188 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/changes.xml
src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/hssf/record/formula/eval/RelationalOperationEval.java
src/testcases/org/apache/poi/hssf/record/formula/eval/TestEqualEval.java

index 37b8514b0f174ae4ecc511c8016550b497e4b816..61605b2776879e871e9136a4ae6e23aa29f367b6 100644 (file)
@@ -37,6 +37,7 @@
 
                <!-- Don't forget to update status.xml too! -->
         <release version="3.5-beta5" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">46613 - Fixed evaluator to perform case insensitive string comparisons</action>
            <action dev="POI-DEVELOPERS" type="add">46544 - command line interface for hssf ExcelExtractor</action>
            <action dev="POI-DEVELOPERS" type="fix">46547 - Allow addition of conditional formatting after data validation</action>
            <action dev="POI-DEVELOPERS" type="fix">46548 - Page Settings Block fixes - continued PLS records and PSB in sheet sub-streams</action>
index 8c937f51b991d2d92718349b4f0f9dfb04db597e..595dfa169016b02cec38301e351eb69723bde7f6 100644 (file)
@@ -34,6 +34,7 @@
        <!-- Don't forget to update changes.xml too! -->
     <changes>
         <release version="3.5-beta5" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">46613 - Fixed evaluator to perform case insensitive string comparisons</action>
            <action dev="POI-DEVELOPERS" type="add">46544 - command line interface for hssf ExcelExtractor</action>
            <action dev="POI-DEVELOPERS" type="fix">46547 - Allow addition of conditional formatting after data validation</action>
            <action dev="POI-DEVELOPERS" type="fix">46548 - Page Settings Block fixes - continued PLS records and PSB in sheet sub-streams</action>
index a1397f07f42a49953b3e964052a566a6098a38be..9dee4bc1e0fcb9ade31e887c1928af9b1ede913d 100644 (file)
@@ -97,7 +97,7 @@ public abstract class RelationalOperationEval implements OperationEval {
                        if (vb instanceof StringEval) {
                                StringEval sA = (StringEval) va;
                                StringEval sB = (StringEval) vb;
-                               return sA.getStringValue().compareTo(sB.getStringValue());
+                               return sA.getStringValue().compareToIgnoreCase(sB.getStringValue());
                        }
                        return 1;
                }
index d1b1db0d1613fc8e57dbcc19dc470f34ecca9a8e..92f603923c811974ae8261d094b9c16eee427b05 100644 (file)
@@ -23,7 +23,7 @@ import junit.framework.TestCase;
 import org.apache.poi.hssf.record.formula.functions.EvalFactory;\r
 \r
 /**\r
- * Test for unary plus operator evaluator.\r
+ * Test for {@link EqualEval}\r
  *\r
  * @author Josh Micich\r
  */\r
@@ -66,4 +66,29 @@ public final class TestEqualEval extends TestCase {
                }\r
                assertTrue(be.getBooleanValue());\r
        }\r
+       \r
+       /**\r
+        * Test for bug 46613 (observable at svn r737248)\r
+        */\r
+       public void testStringInsensitive_bug46613() {\r
+               if (!evalStringCmp("abc", "aBc", EqualEval.instance)) {\r
+                       throw new AssertionFailedError("Identified bug 46613");\r
+               }\r
+               assertTrue(evalStringCmp("abc", "aBc", EqualEval.instance));\r
+               assertTrue(evalStringCmp("ABC", "azz", LessThanEval.instance));\r
+               assertTrue(evalStringCmp("abc", "AZZ", LessThanEval.instance));\r
+               assertTrue(evalStringCmp("ABC", "aaa", GreaterThanEval.instance));\r
+               assertTrue(evalStringCmp("abc", "AAA", GreaterThanEval.instance));\r
+       }\r
+\r
+       private static boolean evalStringCmp(String a, String b, OperationEval cmpOp) {\r
+               Eval[] args = {\r
+                       new StringEval(a),\r
+                       new StringEval(b),\r
+               };\r
+               Eval result = cmpOp.evaluate(args, 10, (short)20);\r
+               assertEquals(BoolEval.class, result.getClass());\r
+               BoolEval be = (BoolEval) result;\r
+               return be.getBooleanValue();\r
+       }\r
 }\r