Fix for bug 46613 - evaluator should perform case insensitive string comparisons

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@738188 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Josh Micich 2009-01-27 19:02:13 +00:00
parent ed4b7878bb
commit 7aa965d079
4 changed files with 29 additions and 2 deletions

View 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>

View 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>

View 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;
}

View File

@ -23,7 +23,7 @@ import junit.framework.TestCase;
import org.apache.poi.hssf.record.formula.functions.EvalFactory;
/**
* Test for unary plus operator evaluator.
* Test for {@link EqualEval}
*
* @author Josh Micich
*/
@ -66,4 +66,29 @@ public final class TestEqualEval extends TestCase {
}
assertTrue(be.getBooleanValue());
}
/**
* Test for bug 46613 (observable at svn r737248)
*/
public void testStringInsensitive_bug46613() {
if (!evalStringCmp("abc", "aBc", EqualEval.instance)) {
throw new AssertionFailedError("Identified bug 46613");
}
assertTrue(evalStringCmp("abc", "aBc", EqualEval.instance));
assertTrue(evalStringCmp("ABC", "azz", LessThanEval.instance));
assertTrue(evalStringCmp("abc", "AZZ", LessThanEval.instance));
assertTrue(evalStringCmp("ABC", "aaa", GreaterThanEval.instance));
assertTrue(evalStringCmp("abc", "AAA", GreaterThanEval.instance));
}
private static boolean evalStringCmp(String a, String b, OperationEval cmpOp) {
Eval[] args = {
new StringEval(a),
new StringEval(b),
};
Eval result = cmpOp.evaluate(args, 10, (short)20);
assertEquals(BoolEval.class, result.getClass());
BoolEval be = (BoolEval) result;
return be.getBooleanValue();
}
}