blob: 7cbdf955a7478050b700036a56dccf8677c9667a [file] [log] [blame]
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);
}
}
}