|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
|  | using System; | 
|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using System.Text; | 
|  | using System.Threading.Tasks; | 
|  | using OfficeOpenXml; | 
|  | using OfficeOpenXml.FormulaParsing.Exceptions; | 
|  |  | 
|  | namespace EPPlusTest.FormulaParsing.Excel.Functions | 
|  | { | 
|  | [TestClass] | 
|  | public class CountIfsTests | 
|  | { | 
|  | private ExcelPackage _package; | 
|  | private ExcelWorksheet _worksheet; | 
|  |  | 
|  | [TestInitialize] | 
|  | public void Initialize() | 
|  | { | 
|  | _package = new ExcelPackage(); | 
|  | _worksheet = _package.Workbook.Worksheets.Add("testsheet"); | 
|  | } | 
|  |  | 
|  | [TestCleanup] | 
|  | public void Cleanup() | 
|  | { | 
|  | _package.Dispose(); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ShouldHandleSingleNumericCriteria() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = 1; | 
|  | _worksheet.Cells["A2"].Value = 1; | 
|  | _worksheet.Cells["A3"].Value = 2; | 
|  | _worksheet.Cells["A4"].Formula = "COUNTIFS(A1:A3, 1)"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(2d, _worksheet.Cells["A4"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ShouldHandleSingleRangeCriteria() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = 1; | 
|  | _worksheet.Cells["A2"].Value = 1; | 
|  | _worksheet.Cells["A3"].Value = 2; | 
|  | _worksheet.Cells["B1"].Value = 1; | 
|  | _worksheet.Cells["A4"].Formula = "COUNTIFS(A1:A3, B1)"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(2d, _worksheet.Cells["A4"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ShouldHandleSingleNumericWildcardCriteria() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = 1; | 
|  | _worksheet.Cells["A2"].Value = 2; | 
|  | _worksheet.Cells["A3"].Value = 3; | 
|  | _worksheet.Cells["A4"].Formula = "COUNTIFS(A1:A3, \"<3\")"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(2d, _worksheet.Cells["A4"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ShouldHandleSingleStringCriteria() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = "abc"; | 
|  | _worksheet.Cells["A2"].Value = "def"; | 
|  | _worksheet.Cells["A3"].Value = "def"; | 
|  | _worksheet.Cells["A4"].Formula = "COUNTIFS(A1:A3, \"def\")"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(2d, _worksheet.Cells["A4"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ShouldHandleSingleStringWildcardCriteria() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = "abc"; | 
|  | _worksheet.Cells["A2"].Value = "def"; | 
|  | _worksheet.Cells["A3"].Value = "def"; | 
|  | _worksheet.Cells["A4"].Formula = "COUNTIFS(A1:A3, \"d*f\")"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(2d, _worksheet.Cells["A4"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ShouldHandleNullRangeCriteria() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = null; | 
|  | _worksheet.Cells["A2"].Value = 1; | 
|  | _worksheet.Cells["A3"].Value = null; | 
|  | _worksheet.Cells["A4"].Formula = "COUNTIFS(A1:A3, B1)"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(0d, _worksheet.Cells["A4"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ShouldHandleMultipleRangesAndCriterias() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = "abc"; | 
|  | _worksheet.Cells["A2"].Value = "def"; | 
|  | _worksheet.Cells["A3"].Value = "def"; | 
|  | _worksheet.Cells["A4"].Value = "def"; | 
|  | _worksheet.Cells["B1"].Value = 1; | 
|  | _worksheet.Cells["B2"].Value = 2; | 
|  | _worksheet.Cells["B3"].Value = 3; | 
|  | _worksheet.Cells["B4"].Value = 2; | 
|  | _worksheet.Cells["C1"].Value = null; | 
|  | _worksheet.Cells["C2"].Value = 200; | 
|  | _worksheet.Cells["C3"].Value = 3; | 
|  | _worksheet.Cells["C4"].Value = 2; | 
|  | _worksheet.Cells["A5"].Formula = "COUNTIFS(A1:A4, \"d*f\", B1:B4; 2; C1:C4; 200)"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(1d, _worksheet.Cells["A5"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ShouldSetErrorValueIfNumberOfCellsInRangesDiffer() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = "abc"; | 
|  | _worksheet.Cells["A2"].Value = "def"; | 
|  | _worksheet.Cells["A3"].Value = "def"; | 
|  | _worksheet.Cells["A4"].Value = "def"; | 
|  | _worksheet.Cells["B1"].Value = 1; | 
|  | _worksheet.Cells["B2"].Value = 2; | 
|  | _worksheet.Cells["B3"].Value = 3; | 
|  | _worksheet.Cells["B4"].Value = 2; | 
|  | _worksheet.Cells["A5"].Formula = "COUNTIFS(A1:A4, \"d*f\", B1:B3; 2)"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(ExcelErrorValue.Create(eErrorType.Value), _worksheet.Cells["A5"].Value); | 
|  | } | 
|  | } | 
|  | } |