| using System; |
| using System.Text; |
| using System.Collections.Generic; |
| using System.Linq; |
| using Microsoft.VisualStudio.TestTools.UnitTesting; |
| using OfficeOpenXml; |
| using Rhino.Mocks; |
| using OfficeOpenXml.FormulaParsing; |
| using OfficeOpenXml.FormulaParsing.Exceptions; |
| |
| namespace EPPlusTest.FormulaParsing.IntegrationTests.BuiltInFunctions |
| { |
| [TestClass] |
| public class InformationFunctionsTests : FormulaParserTestBase |
| { |
| private ExcelDataProvider _excelDataProvider; |
| |
| [TestInitialize] |
| public void Setup() |
| { |
| _excelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); |
| _parser = new FormulaParser(_excelDataProvider); |
| } |
| |
| [TestMethod] |
| public void IsBlankShouldReturnCorrectValue() |
| { |
| var result = _parser.Parse("ISBLANK(A1)"); |
| Assert.IsTrue((bool)result); |
| } |
| |
| [TestMethod] |
| public void IsNumberShouldReturnCorrectValue() |
| { |
| var result = _parser.Parse("ISNUMBER(10/2)"); |
| Assert.IsTrue((bool)result); |
| } |
| |
| [TestMethod] |
| public void IsErrorShouldReturnTrueWhenDivBy0() |
| { |
| var result = _parser.Parse("ISERROR(10/0)"); |
| Assert.IsTrue((bool)result); |
| } |
| |
| [TestMethod] |
| public void IsTextShouldReturnTrueWhenReferencedCellContainsText() |
| { |
| using(var pck = new ExcelPackage()) |
| { |
| var sheet = pck.Workbook.Worksheets.Add("Test"); |
| sheet.Cells["A1"].Value = "Abc"; |
| sheet.Cells["A2"].Formula = "ISTEXT(A1)"; |
| sheet.Calculate(); |
| var result = sheet.Cells["A2"].Value; |
| Assert.IsTrue((bool)result); |
| } |
| } |
| |
| [TestMethod] |
| public void IsErrShouldReturnFalseIfErrorCodeIsNa() |
| { |
| using (var pck = new ExcelPackage()) |
| { |
| var sheet = pck.Workbook.Worksheets.Add("Test"); |
| sheet.Cells["A1"].Value = ExcelErrorValue.Parse("#N/A"); |
| sheet.Cells["A2"].Formula = "ISERR(A1)"; |
| sheet.Calculate(); |
| var result = sheet.Cells["A2"].Value; |
| Assert.IsFalse((bool)result); |
| } |
| } |
| |
| [TestMethod] |
| public void IsNaShouldReturnTrueCodeIsNa() |
| { |
| using (var pck = new ExcelPackage()) |
| { |
| var sheet = pck.Workbook.Worksheets.Add("Test"); |
| sheet.Cells["A1"].Value = ExcelErrorValue.Parse("#N/A"); |
| sheet.Cells["A2"].Formula = "ISNA(A1)"; |
| sheet.Calculate(); |
| var result = sheet.Cells["A2"].Value; |
| Assert.IsTrue((bool)result); |
| } |
| } |
| |
| [TestMethod] |
| public void ErrorTypeShouldReturnCorrectErrorCodes() |
| { |
| using (var pck = new ExcelPackage()) |
| { |
| var sheet = pck.Workbook.Worksheets.Add("Test"); |
| sheet.Cells["A1"].Value = ExcelErrorValue.Create(eErrorType.Null); |
| sheet.Cells["B1"].Formula = "ERROR.TYPE(A1)"; |
| sheet.Cells["A2"].Value = ExcelErrorValue.Create(eErrorType.Div0); |
| sheet.Cells["B2"].Formula = "ERROR.TYPE(A2)"; |
| sheet.Cells["A3"].Value = ExcelErrorValue.Create(eErrorType.Value); |
| sheet.Cells["B3"].Formula = "ERROR.TYPE(A3)"; |
| sheet.Cells["A4"].Value = ExcelErrorValue.Create(eErrorType.Ref); |
| sheet.Cells["B4"].Formula = "ERROR.TYPE(A4)"; |
| sheet.Cells["A5"].Value = ExcelErrorValue.Create(eErrorType.Name); |
| sheet.Cells["B5"].Formula = "ERROR.TYPE(A5)"; |
| sheet.Cells["A6"].Value = ExcelErrorValue.Create(eErrorType.Num); |
| sheet.Cells["B6"].Formula = "ERROR.TYPE(A6)"; |
| sheet.Cells["A7"].Value = ExcelErrorValue.Create(eErrorType.NA); |
| sheet.Cells["B7"].Formula = "ERROR.TYPE(A7)"; |
| sheet.Cells["A8"].Value = 10; |
| sheet.Cells["B8"].Formula = "ERROR.TYPE(A8)"; |
| sheet.Calculate(); |
| var nullResult = sheet.Cells["B1"].Value; |
| var div0Result = sheet.Cells["B2"].Value; |
| var valueResult = sheet.Cells["B3"].Value; |
| var refResult = sheet.Cells["B4"].Value; |
| var nameResult = sheet.Cells["B5"].Value; |
| var numResult = sheet.Cells["B6"].Value; |
| var naResult = sheet.Cells["B7"].Value; |
| var noErrorResult = sheet.Cells["B8"].Value; |
| Assert.AreEqual(1, nullResult, "Null error was not 1"); |
| Assert.AreEqual(2, div0Result, "Div0 error was not 2"); |
| Assert.AreEqual(3, valueResult, "Value error was not 3"); |
| Assert.AreEqual(4, refResult, "Ref error was not 4"); |
| Assert.AreEqual(5, nameResult, "Name error was not 5"); |
| Assert.AreEqual(6, numResult, "Num error was not 6"); |
| Assert.AreEqual(7, naResult, "NA error was not 7"); |
| Assert.AreEqual(ExcelErrorValue.Create(eErrorType.NA), noErrorResult, "No error did not return N/A error"); |
| } |
| } |
| } |
| } |