|  | 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 | 
|  | } | 
|  | } |