|  | using System; | 
|  | using System.IO; | 
|  | using System.Text; | 
|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
|  | using Rhino.Mocks; | 
|  | using OfficeOpenXml.FormulaParsing; | 
|  | using OfficeOpenXml; | 
|  | namespace EPPlusTest.FormulaParsing.IntegrationTests.BuiltInFunctions | 
|  | { | 
|  | [TestClass] | 
|  | public class SubtotalTests : FormulaParserTestBase | 
|  | { | 
|  | private ExcelWorksheet _worksheet; | 
|  | private ExcelPackage _package; | 
|  |  | 
|  | [TestInitialize] | 
|  | public void Setup() | 
|  | { | 
|  | _package = new ExcelPackage(new MemoryStream()); | 
|  | _worksheet = _package.Workbook.Worksheets.Add("Test"); | 
|  | _parser = _worksheet.Workbook.FormulaParser; | 
|  | } | 
|  |  | 
|  | [TestCleanup] | 
|  | public void Cleanup() | 
|  | { | 
|  | _package.Dispose(); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_Avg() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(1, A2:A3)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 2d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(2d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_Count() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(2, A2:A3)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 2d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(1d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_CountA() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(3, A2:A3)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 2d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(1d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_Max() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(4, A2:A3)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 2d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(2d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_Min() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(5, A2:A3)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 2d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(2d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_Product() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(6, A2:A3)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 2d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(2d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_Stdev() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(7, A2:A4)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(7, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 5d; | 
|  | _worksheet.Cells["A4"].Value = 4d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Cells["A6"].Value = 4d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | result = Math.Round((double)result, 9); | 
|  | Assert.AreEqual(0.707106781d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_StdevP() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(8, A2:A4)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(8, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 5d; | 
|  | _worksheet.Cells["A4"].Value = 4d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Cells["A6"].Value = 4d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(0.5d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_Sum() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(9, A2:A3)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 2d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(2d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_Var() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(9, A2:A4)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(8, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 5d; | 
|  | _worksheet.Cells["A4"].Value = 4d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Cells["A6"].Value = 4d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(9d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubtotalShouldNotIncludeSubtotalChildren_VarP() | 
|  | { | 
|  | _worksheet.Cells["A1"].Formula = "SUBTOTAL(10, A2:A4)"; | 
|  | _worksheet.Cells["A2"].Formula = "SUBTOTAL(8, A5:A6)"; | 
|  | _worksheet.Cells["A3"].Value = 5d; | 
|  | _worksheet.Cells["A4"].Value = 4d; | 
|  | _worksheet.Cells["A5"].Value = 2d; | 
|  | _worksheet.Cells["A6"].Value = 4d; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A1"].Value; | 
|  | Assert.AreEqual(0.5d, result); | 
|  | } | 
|  | } | 
|  | } |