| using System; |
| using System.Text; |
| using System.Collections.Generic; |
| using System.Linq; |
| using Microsoft.VisualStudio.TestTools.UnitTesting; |
| using OfficeOpenXml; |
| using OfficeOpenXml.FormulaParsing.Excel.Operators; |
| using OfficeOpenXml.FormulaParsing.Exceptions; |
| using OfficeOpenXml.FormulaParsing.ExpressionGraph; |
| |
| namespace EPPlusTest.Excel |
| { |
| [TestClass] |
| public class OperatorsTests |
| { |
| [TestMethod] |
| public void OperatorPlusShouldThrowExceptionIfNonNumericOperand() |
| { |
| var result = Operator.Plus.Apply(new CompileResult(1, DataType.Integer), new CompileResult("a", DataType.String)); |
| Assert.AreEqual(ExcelErrorValue.Create(eErrorType.Value), result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorPlusShouldAddNumericStringAndNumber() |
| { |
| var result = Operator.Plus.Apply(new CompileResult(1, DataType.Integer), new CompileResult("2", DataType.String)); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorMinusShouldThrowExceptionIfNonNumericOperand() |
| { |
| var result = Operator.Minus.Apply(new CompileResult(1, DataType.Integer), new CompileResult("a", DataType.String)); |
| Assert.AreEqual(ExcelErrorValue.Create(eErrorType.Value), result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorMinusShouldSubtractNumericStringAndNumber() |
| { |
| var result = Operator.Minus.Apply(new CompileResult(5, DataType.Integer), new CompileResult("2", DataType.String)); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorDivideShouldReturnDivideByZeroIfRightOperandIsZero() |
| { |
| var result = Operator.Divide.Apply(new CompileResult(1d, DataType.Decimal), new CompileResult(0d, DataType.Decimal)); |
| Assert.AreEqual(ExcelErrorValue.Create(eErrorType.Div0), result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorDivideShouldDivideCorrectly() |
| { |
| var result = Operator.Divide.Apply(new CompileResult(9d, DataType.Decimal), new CompileResult(3d, DataType.Decimal)); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorDivideShouldReturnValueErrorIfNonNumericOperand() |
| { |
| var result = Operator.Divide.Apply(new CompileResult(1, DataType.Integer), new CompileResult("a", DataType.String)); |
| Assert.AreEqual(ExcelErrorValue.Create(eErrorType.Value), result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorDivideShouldDivideNumericStringAndNumber() |
| { |
| var result = Operator.Divide.Apply(new CompileResult(9, DataType.Integer), new CompileResult("3", DataType.String)); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorMultiplyShouldThrowExceptionIfNonNumericOperand() |
| { |
| Operator.Multiply.Apply(new CompileResult(1, DataType.Integer), new CompileResult("a", DataType.String)); |
| } |
| |
| [TestMethod] |
| public void OperatoMultiplyShouldMultiplyNumericStringAndNumber() |
| { |
| var result = Operator.Multiply.Apply(new CompileResult(1, DataType.Integer), new CompileResult("3", DataType.String)); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorConcatShouldConcatTwoStrings() |
| { |
| var result = Operator.Concat.Apply(new CompileResult("a", DataType.String), new CompileResult("b", DataType.String)); |
| Assert.AreEqual("ab", result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorConcatShouldConcatANumberAndAString() |
| { |
| var result = Operator.Concat.Apply(new CompileResult(12, DataType.Integer), new CompileResult("b", DataType.String)); |
| Assert.AreEqual("12b", result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorEqShouldReturnTruefSuppliedValuesAreEqual() |
| { |
| var result = Operator.Eq.Apply(new CompileResult(12, DataType.Integer), new CompileResult(12, DataType.Integer)); |
| Assert.IsTrue((bool)result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorEqShouldReturnFalsefSuppliedValuesDiffer() |
| { |
| var result = Operator.Eq.Apply(new CompileResult(11, DataType.Integer), new CompileResult(12, DataType.Integer)); |
| Assert.IsFalse((bool)result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorNotEqualToShouldReturnTruefSuppliedValuesDiffer() |
| { |
| var result = Operator.NotEqualsTo.Apply(new CompileResult(11, DataType.Integer), new CompileResult(12, DataType.Integer)); |
| Assert.IsTrue((bool)result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorNotEqualToShouldReturnFalsefSuppliedValuesAreEqual() |
| { |
| var result = Operator.NotEqualsTo.Apply(new CompileResult(11, DataType.Integer), new CompileResult(11, DataType.Integer)); |
| Assert.IsFalse((bool)result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorGreaterThanToShouldReturnTrueIfLeftIsSetAndRightIsNull() |
| { |
| var result = Operator.GreaterThan.Apply(new CompileResult(11, DataType.Integer), new CompileResult(null, DataType.Empty)); |
| Assert.IsTrue((bool)result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorGreaterThanToShouldReturnTrueIfLeftIs11AndRightIs10() |
| { |
| var result = Operator.GreaterThan.Apply(new CompileResult(11, DataType.Integer), new CompileResult(10, DataType.Integer)); |
| Assert.IsTrue((bool)result.Result); |
| } |
| |
| [TestMethod] |
| public void OperatorExpShouldReturnCorrectResult() |
| { |
| var result = Operator.Exp.Apply(new CompileResult(2, DataType.Integer), new CompileResult(3, DataType.Integer)); |
| Assert.AreEqual(8d, result.Result); |
| } |
| } |
| } |