| using System; | |
| using System.Text; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using Microsoft.VisualStudio.TestTools.UnitTesting; | |
| using OfficeOpenXml.FormulaParsing; | |
| using EPPlusTest.FormulaParsing.TestHelpers; | |
| using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; | |
| using OfficeOpenXml; | |
| namespace EPPlusTest.Excel.Functions | |
| { | |
| [TestClass] | |
| public class LogicalFunctionsTests | |
| { | |
| private ParsingContext _parsingContext = ParsingContext.Create(); | |
| [TestMethod] | |
| public void IfShouldReturnCorrectResult() | |
| { | |
| var func = new If(); | |
| var args = FunctionsHelper.CreateArgs(true, "A", "B"); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual("A", result.Result); | |
| } | |
| [TestMethod] | |
| public void NotShouldReturnFalseIfArgumentIsTrue() | |
| { | |
| var func = new Not(); | |
| var args = FunctionsHelper.CreateArgs(true); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.IsFalse((bool)result.Result); | |
| } | |
| [TestMethod] | |
| public void NotShouldReturnTrueIfArgumentIs0() | |
| { | |
| var func = new Not(); | |
| var args = FunctionsHelper.CreateArgs(0); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.IsTrue((bool)result.Result); | |
| } | |
| [TestMethod] | |
| public void NotShouldReturnFalseIfArgumentIs1() | |
| { | |
| var func = new Not(); | |
| var args = FunctionsHelper.CreateArgs(1); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.IsFalse((bool)result.Result); | |
| } | |
| [TestMethod] | |
| public void NotShouldHandleExcelReference() | |
| { | |
| using(var package = new ExcelPackage()) | |
| { | |
| var sheet = package.Workbook.Worksheets.Add("sheet1"); | |
| sheet.Cells["A1"].Value = false; | |
| sheet.Cells["A2"].Formula = "NOT(A1)"; | |
| sheet.Calculate(); | |
| Assert.IsTrue((bool)sheet.Cells["A2"].Value); | |
| } | |
| } | |
| [TestMethod] | |
| public void AndShouldReturnTrueIfAllArgumentsAreTrue() | |
| { | |
| var func = new And(); | |
| var args = FunctionsHelper.CreateArgs(true, true, true); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.IsTrue((bool)result.Result); | |
| } | |
| [TestMethod] | |
| public void AndShouldReturnTrueIfAllArgumentsAreTrueOr1() | |
| { | |
| var func = new And(); | |
| var args = FunctionsHelper.CreateArgs(true, true, 1, true, 1); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.IsTrue((bool)result.Result); | |
| } | |
| [TestMethod] | |
| public void AndShouldReturnFalseIfOneArgumentIsFalse() | |
| { | |
| var func = new And(); | |
| var args = FunctionsHelper.CreateArgs(true, false, true); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.IsFalse((bool)result.Result); | |
| } | |
| [TestMethod] | |
| public void AndShouldReturnFalseIfOneArgumentIs0() | |
| { | |
| var func = new And(); | |
| var args = FunctionsHelper.CreateArgs(true, 0, true); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.IsFalse((bool)result.Result); | |
| } | |
| [TestMethod] | |
| public void OrShouldReturnTrueIfOneArgumentIsTrue() | |
| { | |
| var func = new Or(); | |
| var args = FunctionsHelper.CreateArgs(true, false, false); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.IsTrue((bool)result.Result); | |
| } | |
| [TestMethod] | |
| public void IfErrorShouldReturnSecondArgIfCriteriaEvaluatesAsAnError() | |
| { | |
| using (var package = new ExcelPackage()) | |
| { | |
| var s1 = package.Workbook.Worksheets.Add("test"); | |
| s1.Cells["A1"].Formula = "IFERROR(0/0, \"hello\")"; | |
| s1.Calculate(); | |
| Assert.AreEqual("hello", s1.Cells["A1"].Value); | |
| } | |
| } | |
| [TestMethod] | |
| public void IfErrorShouldReturnSecondArgIfCriteriaEvaluatesAsAnError2() | |
| { | |
| using (var package = new ExcelPackage()) | |
| { | |
| var s1 = package.Workbook.Worksheets.Add("test"); | |
| s1.Cells["A1"].Formula = "IFERROR(A2, \"hello\")"; | |
| s1.Cells["A2"].Formula = "23/0"; | |
| s1.Calculate(); | |
| Assert.AreEqual("hello", s1.Cells["A1"].Value); | |
| } | |
| } | |
| [TestMethod] | |
| public void IfErrorShouldReturnResultOfFormulaIfNoError() | |
| { | |
| using (var package = new ExcelPackage()) | |
| { | |
| var s1 = package.Workbook.Worksheets.Add("test"); | |
| s1.Cells["A1"].Formula = "IFERROR(A2, \"hello\")"; | |
| s1.Cells["A2"].Value = "hi there"; | |
| s1.Calculate(); | |
| Assert.AreEqual("hi there", s1.Cells["A1"].Value); | |
| } | |
| } | |
| [TestMethod] | |
| public void IfNaShouldReturnSecondArgIfCriteriaEvaluatesAsAnError2() | |
| { | |
| using (var package = new ExcelPackage()) | |
| { | |
| var s1 = package.Workbook.Worksheets.Add("test"); | |
| s1.Cells["A1"].Formula = "IFERROR(A2, \"hello\")"; | |
| s1.Cells["A2"].Value = ExcelErrorValue.Create(eErrorType.NA); | |
| s1.Calculate(); | |
| Assert.AreEqual("hello", s1.Cells["A1"].Value); | |
| } | |
| } | |
| [TestMethod] | |
| public void IfNaShouldReturnResultOfFormulaIfNoError() | |
| { | |
| using (var package = new ExcelPackage()) | |
| { | |
| var s1 = package.Workbook.Worksheets.Add("test"); | |
| s1.Cells["A1"].Formula = "IFNA(A2, \"hello\")"; | |
| s1.Cells["A2"].Value = "hi there"; | |
| s1.Calculate(); | |
| Assert.AreEqual("hi there", s1.Cells["A1"].Value); | |
| } | |
| } | |
| } | |
| } |