blob: b730e741b29a47cd06bfb2a2eab5a02f01985fdf [file] [log] [blame]
using System;
using System.Text;
using System.Collections.Generic;
using System.Diagnostics.Design;
using System.Globalization;
using System.Linq;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OfficeOpenXml.FormulaParsing.ExcelUtilities;
namespace EPPlusTest
{
[TestClass]
public class ExpressionEvaluatorTests
{
private ExpressionEvaluator _evaluator;
[TestInitialize]
public void Setup()
{
_evaluator = new ExpressionEvaluator();
}
#region Numeric Expression Tests
[TestMethod]
public void EvaluateShouldReturnTrueIfOperandsAreEqual()
{
var result = _evaluator.Evaluate("1", "1");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateShouldReturnTrueIfOperandsAreMatchingButDifferentTypes()
{
var result = _evaluator.Evaluate(1d, "1");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateShouldEvaluateOperator()
{
var result = _evaluator.Evaluate(1d, "<2");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateShouldEvaluateNumericString()
{
var result = _evaluator.Evaluate("1", ">0");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateShouldHandleBooleanArg()
{
var result = _evaluator.Evaluate(true, "TRUE");
Assert.IsTrue(result);
}
[TestMethod, ExpectedException(typeof(ArgumentException))]
public void EvaluateShouldThrowIfOperatorIsNotBoolean()
{
var result = _evaluator.Evaluate(1d, "+1");
}
#endregion
#region Date tests
[TestMethod]
public void EvaluateShouldHandleDateArg()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
var result = _evaluator.Evaluate(new DateTime(2016,6,28), "2016-06-28");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateShouldHandleDateArgWithOperator()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
var result = _evaluator.Evaluate(new DateTime(2016, 6, 28), ">2016-06-27");
Assert.IsTrue(result);
}
#endregion
#region Blank Expression Tests
[TestMethod]
public void EvaluateBlankExpressionEqualsNull()
{
var result = _evaluator.Evaluate(null, "");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateBlankExpressionEqualsEmptyString()
{
var result = _evaluator.Evaluate(string.Empty, "");
Assert.IsFalse(result);
}
[TestMethod]
public void EvaluateBlankExpressionEqualsZero()
{
var result = _evaluator.Evaluate(0d, "");
Assert.IsFalse(result);
}
#endregion
#region Quotes Expression Tests
[TestMethod]
public void EvaluateQuotesExpressionEqualsNull()
{
var result = _evaluator.Evaluate(null, "\"\"");
Assert.IsFalse(result);
}
[TestMethod]
public void EvaluateQuotesExpressionEqualsZero()
{
var result = _evaluator.Evaluate(0d, "\"\"");
Assert.IsFalse(result);
}
[TestMethod]
public void EvaluateQuotesExpressionEqualsCharacter()
{
var result = _evaluator.Evaluate("a", "\"\"");
Assert.IsFalse(result);
}
#endregion
#region NotEqualToZero Expression Tests
[TestMethod]
public void EvaluateNotEqualToZeroExpressionEqualsNull()
{
var result = _evaluator.Evaluate(null, "<>0");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateNotEqualToZeroExpressionEqualsEmptyString()
{
var result = _evaluator.Evaluate(string.Empty, "<>0");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateNotEqualToZeroExpressionEqualsCharacter()
{
var result = _evaluator.Evaluate("a", "<>0");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateNotEqualToZeroExpressionEqualsNonZero()
{
var result = _evaluator.Evaluate(1d, "<>0");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateNotEqualToZeroExpressionEqualsZero()
{
var result = _evaluator.Evaluate(0d, "<>0");
Assert.IsFalse(result);
}
#endregion
#region NotEqualToBlank Expression Tests
[TestMethod]
public void EvaluateNotEqualToBlankExpressionEqualsNull()
{
var result = _evaluator.Evaluate(null, "<>");
Assert.IsFalse(result);
}
[TestMethod]
public void EvaluateNotEqualToBlankExpressionEqualsEmptyString()
{
var result = _evaluator.Evaluate(string.Empty, "<>");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateNotEqualToBlankExpressionEqualsCharacter()
{
var result = _evaluator.Evaluate("a", "<>");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateNotEqualToBlankExpressionEqualsNonZero()
{
var result = _evaluator.Evaluate(1d, "<>");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateNotEqualToBlankExpressionEqualsZero()
{
var result = _evaluator.Evaluate(0d, "<>");
Assert.IsTrue(result);
}
#endregion
#region Character Expression Tests
[TestMethod]
public void EvaluateCharacterExpressionEqualNull()
{
var result = _evaluator.Evaluate(null, "a");
Assert.IsFalse(result);
}
[TestMethod]
public void EvaluateCharacterExpressionEqualsEmptyString()
{
var result = _evaluator.Evaluate(string.Empty, "a");
Assert.IsFalse(result);
}
[TestMethod]
public void EvaluateCharacterExpressionEqualsNumeral()
{
var result = _evaluator.Evaluate(1d, "a");
Assert.IsFalse(result);
}
[TestMethod]
public void EvaluateCharacterExpressionEqualsSameCharacter()
{
var result = _evaluator.Evaluate("a", "a");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateCharacterExpressionEqualsDifferentCharacter()
{
var result = _evaluator.Evaluate("b", "a");
Assert.IsFalse(result);
}
#endregion
#region CharacterWithOperator Expression Tests
[TestMethod]
public void EvaluateCharacterWithOperatorExpressionEqualNull()
{
var result = _evaluator.Evaluate(null, ">a");
Assert.IsFalse(result);
result = _evaluator.Evaluate(null, "<a");
Assert.IsFalse(result);
}
[TestMethod]
public void EvaluateCharacterWithOperatorExpressionEqualsEmptyString()
{
var result = _evaluator.Evaluate(string.Empty, ">a");
Assert.IsFalse(result);
result = _evaluator.Evaluate(string.Empty, "<a");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateCharacterWithOperatorExpressionEqualsNumeral()
{
var result = _evaluator.Evaluate(1d, ">a");
Assert.IsFalse(result);
result = _evaluator.Evaluate(1d, "<a");
Assert.IsFalse(result);
}
[TestMethod]
public void EvaluateCharacterWithOperatorExpressionEqualsSameCharacter()
{
var result = _evaluator.Evaluate("a", ">a");
Assert.IsFalse(result);
result = _evaluator.Evaluate("a", ">=a");
Assert.IsTrue(result);
result = _evaluator.Evaluate("a", "<a");
Assert.IsFalse(result);
result = _evaluator.Evaluate("a", ">=a");
Assert.IsTrue(result);
}
[TestMethod]
public void EvaluateCharacterWithOperatorExpressionEqualsDifferentCharacter()
{
var result = _evaluator.Evaluate("b", ">a");
Assert.IsTrue(result);
result = _evaluator.Evaluate("b", "<a");
Assert.IsFalse(result);
}
#endregion
}
}