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