You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2010/09/04 11:48:35 UTC

svn commit: r992570 - in /poi/trunk/src: documentation/content/xdocs/status.xml java/org/apache/poi/hssf/record/formula/functions/TextFunction.java testcases/org/apache/poi/hssf/record/formula/functions/TestLeftRight.java

Author: yegor
Date: Sat Sep  4 09:48:34 2010
New Revision: 992570

URL: http://svn.apache.org/viewvc?rev=992570&view=rev
Log:
fixed LEFT and RIGHT to return #VALUE! when called with a negative operand, see Bugzilla 49841

Added:
    poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/functions/TestLeftRight.java
Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/TextFunction.java

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=992570&r1=992569&r2=992570&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Sat Sep  4 09:48:34 2010
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.7-beta3" date="2010-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">49841 - fixed LEFT and RIGHT to return #VALUE! when called with a negative operand </action>
            <action dev="POI-DEVELOPERS" type="fix">49783 - fixed evaluation of XSSF workbooks containing formulas with reference errors (#REF!)</action>
            <action dev="POI-DEVELOPERS" type="fix">49751 - fixed fetching names of user defined styles in HSSFCellStyle.getUserStyleName()</action>
            <action dev="POI-DEVELOPERS" type="add">48900 - support for protecting a XSSF workbook</action>

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/TextFunction.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/TextFunction.java?rev=992570&r1=992569&r2=992570&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/TextFunction.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/TextFunction.java Sat Sep  4 09:48:34 2010
@@ -173,7 +173,11 @@ public abstract class TextFunction imple
 			} catch (EvaluationException e) {
 				return e.getErrorEval();
 			}
-
+			
+			if(index < 0) {
+				return ErrorEval.VALUE_INVALID;
+			}
+			
 			String result;
 			if (_isLeft) {
 				result = arg.substring(0, Math.min(arg.length(), index));

Added: poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/functions/TestLeftRight.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/functions/TestLeftRight.java?rev=992570&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/functions/TestLeftRight.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/functions/TestLeftRight.java Sat Sep  4 09:48:34 2010
@@ -0,0 +1,73 @@
+/* ====================================================================
+   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.hssf.record.formula.functions;
+
+import org.apache.poi.hssf.record.formula.eval.ErrorEval;
+import org.apache.poi.hssf.record.formula.eval.NumberEval;
+import org.apache.poi.hssf.record.formula.eval.StringEval;
+import org.apache.poi.hssf.record.formula.eval.ValueEval;
+
+import junit.framework.TestCase;
+
+/**
+ * 
+ * Test cases for {@link TextFunction#LEFT} and {@link TextFunction#RIGHT}
+ * 
+ * @author Brendan Nolan
+ *
+ */
+public class TestLeftRight extends TestCase {
+
+	private static final NumberEval NEGATIVE_OPERAND = new NumberEval(-1.0);
+	private static final StringEval ANY_STRING_VALUE = new StringEval("ANYSTRINGVALUE");
+
+	
+	private static ValueEval invokeLeft(ValueEval text, ValueEval operand) {
+		ValueEval[] args = new ValueEval[] { text, operand };
+		return TextFunction.LEFT.evaluate(args, -1, (short)-1);
+	}
+	
+	private static ValueEval invokeRight(ValueEval text, ValueEval operand) {
+		ValueEval[] args = new ValueEval[] { text, operand };
+		return TextFunction.RIGHT.evaluate(args, -1, (short)-1);
+	}
+	
+	public void testLeftRight_bug49841() {
+
+		try {
+			invokeLeft(ANY_STRING_VALUE, NEGATIVE_OPERAND);
+			invokeRight(ANY_STRING_VALUE, NEGATIVE_OPERAND);
+		} catch (StringIndexOutOfBoundsException e) {
+			fail("Identified bug 49841");
+		}
+
+	}
+	
+	public void testLeftRightNegativeOperand() {
+		
+		assertEquals(ErrorEval.VALUE_INVALID, invokeRight(ANY_STRING_VALUE, NEGATIVE_OPERAND));		
+		assertEquals(ErrorEval.VALUE_INVALID, invokeLeft(ANY_STRING_VALUE, NEGATIVE_OPERAND));
+
+	}
+	
+	
+	
+	
+
+	
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org