| using EPPlusTest.FormulaParsing.TestHelpers; | |
| using Microsoft.VisualStudio.TestTools.UnitTesting; | |
| using OfficeOpenXml; | |
| using OfficeOpenXml.FormulaParsing; | |
| using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; | |
| using OfficeOpenXml.FormulaParsing.ExcelUtilities; | |
| using static OfficeOpenXml.FormulaParsing.ExcelDataProvider; | |
| namespace EPPlusTest.FormulaParsing.Excel.Functions.Math | |
| { | |
| [TestClass] | |
| public class SumIfTests | |
| { | |
| private ExcelPackage _package; | |
| private EpplusExcelDataProvider _provider; | |
| private ParsingContext _parsingContext; | |
| private ExcelWorksheet _worksheet; | |
| [TestInitialize] | |
| public void Initialize() | |
| { | |
| _package = new ExcelPackage(); | |
| _provider = new EpplusExcelDataProvider(_package); | |
| _parsingContext = ParsingContext.Create(); | |
| _parsingContext.Scopes.NewScope(RangeAddress.Empty); | |
| _worksheet = _package.Workbook.Worksheets.Add("testsheet"); | |
| } | |
| [TestCleanup] | |
| public void Cleanup() | |
| { | |
| _package.Dispose(); | |
| } | |
| [TestMethod] | |
| public void SumIfNumeric() | |
| { | |
| _worksheet.Cells["A1"].Value = 1d; | |
| _worksheet.Cells["A2"].Value = 2d; | |
| _worksheet.Cells["A3"].Value = 3d; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, ">1", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(8d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfNonNumeric() | |
| { | |
| _worksheet.Cells["A1"].Value = "Monday"; | |
| _worksheet.Cells["A2"].Value = "Tuesday"; | |
| _worksheet.Cells["A3"].Value = "Thursday"; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, "T*day", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(8d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfNumericExpression() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = 1d; | |
| _worksheet.Cells["A3"].Value = "Not Empty"; | |
| var func = new SumIf(); | |
| IRangeInfo range = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| var args = FunctionsHelper.CreateArgs(range, 1d); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(1d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfEqualToEmptyString() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = "Not Empty"; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, "", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(1d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfNotEqualToNull() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = "Not Empty"; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, "<>", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(8d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfEqualToZero() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = 0d; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, "0", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(5d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfNotEqualToZero() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = 0d; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, "<>0", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(4d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfGreaterThanZero() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = 1d; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, ">0", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(5d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfGreaterThanOrEqualToZero() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = 1d; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, ">=0", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(5d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfLessThanZero() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = -1d; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, "<0", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(5d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfLessThanOrEqualToZero() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = -1d; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, "<=0", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(5d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfLessThanCharacter() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = "Not Empty"; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, "<a", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(3d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfLessThanOrEqualToCharacter() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = "Not Empty"; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, "<=a", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(3d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfGreaterThanCharacter() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = "Not Empty"; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, ">a", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(5d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfGreaterThanOrEqualToCharacter() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = "Not Empty"; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, ">=a", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(5d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfHandleDates() | |
| { | |
| _worksheet.Cells["A1"].Value = null; | |
| _worksheet.Cells["A2"].Value = string.Empty; | |
| _worksheet.Cells["A3"].Value = "Not Empty"; | |
| _worksheet.Cells["B1"].Value = 1d; | |
| _worksheet.Cells["B2"].Value = 3d; | |
| _worksheet.Cells["B3"].Value = 5d; | |
| var func = new SumIf(); | |
| IRangeInfo range1 = _provider.GetRange(_worksheet.Name, 1, 1, 3, 1); | |
| IRangeInfo range2 = _provider.GetRange(_worksheet.Name, 1, 2, 3, 2); | |
| var args = FunctionsHelper.CreateArgs(range1, ">=a", range2); | |
| var result = func.Execute(args, _parsingContext); | |
| Assert.AreEqual(5d, result.Result); | |
| } | |
| [TestMethod] | |
| public void SumIfShouldHandleBooleanArg() | |
| { | |
| using (var pck = new ExcelPackage()) | |
| { | |
| var sheet = pck.Workbook.Worksheets.Add("test"); | |
| sheet.Cells["A1"].Value = true; | |
| sheet.Cells["B1"].Value = 1; | |
| sheet.Cells["A2"].Value = false; | |
| sheet.Cells["B2"].Value = 1; | |
| sheet.Cells["C1"].Formula = "SUMIF(A1:A2,TRUE,B1:B2)"; | |
| sheet.Calculate(); | |
| Assert.AreEqual(1d, sheet.Cells["C1"].Value); | |
| } | |
| } | |
| } | |
| } |