Example #1
0
        public void TestMissingArg()
        {
            ValueEval[] values =
            {
                new NumberEval(25.0),
                new NumberEval(26.0),
                new NumberEval(28.0),
            };
            AreaEval arg0 = EvalFactory.CreateAreaEval("A10:C10", values);

            ValueEval[] args = new ValueEval[] { arg0, MissingArgEval.instance, new NumberEval(2), };
            ValueEval   actualResult;

            try
            {
                actualResult = FUNC_INST.Evaluate(args, -1, -1);
            }
            catch (Exception e)
            {
                if (e.Message.Equals("Unexpected arg eval type (Npoi.Core.hssf.Record.Formula.Eval.MissingArgEval"))
                {
                    throw new AssertionException("Identified bug 47048b - INDEX() should support missing-arg");
                }
                throw e;
            }
            // result should be an area eval "B10:B10"
            AreaEval ae = ConfirmAreaEval("B10:B10", actualResult);

            actualResult = ae.GetValue(0, 0);
            Assert.AreEqual(typeof(NumberEval), actualResult.GetType());
            Assert.AreEqual(26.0, ((NumberEval)actualResult).NumberValue, 0.0);
        }
        protected ValueEval SingleOperandEvaluate(Eval eval, int srcRow, short srcCol)
        {
            ValueEval retval;

            if (eval is AreaEval)
            {
                AreaEval ae = (AreaEval)eval;
                if (ae.Contains(srcRow, srcCol))
                { // circular ref!
                    retval = ErrorEval.CIRCULAR_REF_ERROR;
                }
                else if (ae.IsRow)
                {
                    if (ae.ContainsColumn(srcCol))
                    {
                        ValueEval ve = ae.GetValue(ae.FirstRow, srcCol);
                        ve     = Xlator.AttemptXlateToNumeric(ve);
                        retval = Xlator.AttemptXlateToNumeric(ve);
                    }
                    else
                    {
                        retval = ErrorEval.VALUE_INVALID;
                    }
                }
                else if (ae.IsColumn)
                {
                    if (ae.ContainsRow(srcRow))
                    {
                        ValueEval ve = ae.GetValue(srcRow, ae.FirstColumn);
                        retval = Xlator.AttemptXlateToNumeric(ve);
                    }
                    else
                    {
                        retval = ErrorEval.VALUE_INVALID;
                    }
                }
                else
                {
                    retval = ErrorEval.VALUE_INVALID;
                }
            }
            else
            {
                retval = Xlator.AttemptXlateToNumeric((ValueEval)eval);
            }
            return(retval);
        }
Example #3
0
        /**
         * Returns an is StringValueEval or ErrorEval or BlankEval
         *
         * @param eval
         * @param srcRow
         * @param srcCol
         */
        protected ValueEval SingleOperandEvaluate(Eval eval, int srcRow, short srcCol)
        {
            ValueEval retval;

            if (eval is AreaEval)
            {
                AreaEval ae = (AreaEval)eval;
                if (ae.Contains(srcRow, srcCol))
                { // circular ref!
                    retval = ErrorEval.CIRCULAR_REF_ERROR;
                }
                else if (ae.IsRow)
                {
                    if (ae.ContainsColumn(srcCol))
                    {
                        ValueEval ve = ae.GetValue(ae.FirstRow, srcCol);
                        retval = InternalResolveEval(eval);
                    }
                    else
                    {
                        retval = ErrorEval.NAME_INVALID;
                    }
                }
                else if (ae.IsColumn)
                {
                    if (ae.ContainsRow(srcRow))
                    {
                        ValueEval ve = ae.GetValue(srcRow, ae.FirstColumn);
                        retval = InternalResolveEval(eval);
                    }
                    else
                    {
                        retval = ErrorEval.NAME_INVALID;
                    }
                }
                else
                {
                    retval = ErrorEval.NAME_INVALID;
                }
            }
            else
            {
                retval = InternalResolveEval(eval);
            }
            return(retval);
        }
Example #4
0
 /**
  * Resolve a ValueEval that's in an AreaEval.
  *
  * @param db AreaEval from which the cell to resolve is retrieved.
  * @param dbRow Relative row in the AreaEval.
  * @param dbCol Relative column in the AreaEval.
  * @return A ValueEval that is a NumberEval, StringEval, BoolEval, BlankEval or ErrorEval.
  */
 private static ValueEval ResolveReference(AreaEval db, int dbRow, int dbCol)
 {
     try
     {
         return(OperandResolver.GetSingleValue(db.GetValue(dbRow, dbCol), db.FirstRow + dbRow, db.FirstColumn + dbCol));
     }
     catch (EvaluationException e)
     {
         return(e.GetErrorEval());
     }
 }