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