| 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); |
| } |
| } |
| } |