blob: bf5281f5a15feb650085284c6edf9379727a4940 [file] [log] [blame]
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");
}
}
}
}