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