public void TestIfGroupByPropertyIsInvalid() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 3, 2); ws.Cell(2, 2).Value = "One"; ws.Cell(3, 2).Value = "One"; var panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = "str" }; var method = panel.GetType().GetMethod("GroupResult", BindingFlags.Instance | BindingFlags.NonPublic); SetResultRange(panel, range); ExceptionAssert.ThrowsBaseException <InvalidCastException>(() => method.Invoke(panel, null), $"Parse \"GroupBy\" property failed. Cannot convert value \"str\" to {nameof(Int32)}"); panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = "1, 1.4" }; SetResultRange(panel, range); ExceptionAssert.ThrowsBaseException <InvalidCastException>(() => method.Invoke(panel, null), $"Parse \"GroupBy\" property failed. Cannot convert value \"1.4\" to {nameof(Int32)}"); }
public void TestCopyIfDataIsSet() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); var excelReport = Substitute.For <object>(); var templateProcessor = Substitute.For <ITemplateProcessor>(); IXLRange range = ws.Range(1, 1, 2, 4); range.AddToNamed("DataPanel", XLScope.Worksheet); IXLNamedRange namedRange = ws.NamedRange("DataPanel"); object[] data = { 1, "One" }; var panel = new ExcelDataSourcePanel(data, namedRange, excelReport, templateProcessor) { RenderPriority = 10, Type = PanelType.Horizontal, ShiftType = ShiftType.NoShift, BeforeRenderMethodName = "BeforeRenderMethod", AfterRenderMethodName = "AfterRenderMethod", BeforeDataItemRenderMethodName = "BeforeDataItemRenderMethodName", AfterDataItemRenderMethodName = "AfterDataItemRenderMethodName", GroupBy = "2,4", }; ExcelDataSourcePanel copiedPanel = (ExcelDataSourcePanel)panel.Copy(ws.Cell(5, 5)); Assert.AreSame(excelReport, copiedPanel.GetType().GetField("_report", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(copiedPanel)); Assert.AreSame(templateProcessor, copiedPanel.GetType().GetField("_templateProcessor", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(copiedPanel)); Assert.IsNull(copiedPanel.GetType().GetField("_dataSourceTemplate", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(copiedPanel)); Assert.AreSame(data, copiedPanel.GetType().GetField("_data", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(copiedPanel)); Assert.AreEqual(ws.Cell(5, 5), copiedPanel.Range.FirstCell()); Assert.AreEqual(ws.Cell(6, 8), copiedPanel.Range.LastCell()); Assert.AreEqual(10, copiedPanel.RenderPriority); Assert.AreEqual(PanelType.Horizontal, copiedPanel.Type); Assert.AreEqual(ShiftType.NoShift, copiedPanel.ShiftType); Assert.AreEqual("BeforeRenderMethod", copiedPanel.BeforeRenderMethodName); Assert.AreEqual("AfterRenderMethod", copiedPanel.AfterRenderMethodName); Assert.AreEqual("BeforeDataItemRenderMethodName", copiedPanel.BeforeDataItemRenderMethodName); Assert.AreEqual("AfterDataItemRenderMethodName", copiedPanel.AfterDataItemRenderMethodName); Assert.AreEqual("2,4", copiedPanel.GroupBy); Assert.IsNull(copiedPanel.Parent); //wb.SaveAs("test.xlsx"); }
public void TestIfGroupByPropertyIsEmpty() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 6, 3); ws.Cell(2, 2).Value = "One"; ws.Cell(3, 2).Value = "One"; ws.Cell(4, 2).Value = "Two"; ws.Cell(5, 2).Value = "Three"; ws.Cell(6, 2).Value = "Three"; ws.Cell(7, 2).Value = "Three"; ws.Cell(8, 2).Value = "Four"; ws.Cell(9, 2).Value = "Five"; ws.Cell(2, 3).Value = "Orange"; ws.Cell(3, 3).Value = "Apple"; ws.Cell(4, 3).Value = "Apple"; ws.Cell(5, 3).Value = string.Empty; ws.Cell(6, 3).Value = null; ws.Cell(8, 3).Value = "Pear"; ws.Cell(9, 3).Value = "Pear"; var panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = null }; var method = panel.GetType().GetMethod("GroupResult", BindingFlags.Instance | BindingFlags.NonPublic); SetResultRange(panel, range); method.Invoke(panel, null); Assert.AreEqual(0, ws.MergedRanges.Count); panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = string.Empty }; SetResultRange(panel, range); method.Invoke(panel, null); Assert.AreEqual(0, ws.MergedRanges.Count); panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = " " }; SetResultRange(panel, range); method.Invoke(panel, null); Assert.AreEqual(0, ws.MergedRanges.Count); //wb.SaveAs("test.xlsx"); }
public void TestGroupResultHorizontal() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 6, 9); ws.Cell(2, 2).Value = "One"; ws.Cell(2, 3).Value = "One"; ws.Cell(2, 4).Value = "Two"; ws.Cell(2, 5).Value = "Three"; ws.Cell(2, 6).Value = "Three"; ws.Cell(2, 7).Value = "Three"; ws.Cell(2, 8).Value = "Four"; ws.Cell(2, 9).Value = "Five"; ws.Range(2, 5, 2, 6).Merge(); ws.Cell(3, 2).Value = "Orange"; ws.Cell(3, 3).Value = "Apple"; ws.Cell(3, 4).Value = "Apple"; ws.Cell(3, 5).Value = string.Empty; ws.Cell(3, 6).Value = null; ws.Cell(3, 8).Value = "Pear"; ws.Cell(3, 9).Value = "Pear"; ws.Cell(4, 2).Value = true; ws.Cell(4, 3).Value = true; ws.Cell(4, 4).Value = 1; ws.Cell(4, 5).Value = null; ws.Cell(4, 7).Value = 0; ws.Cell(4, 8).Value = false; ws.Cell(4, 9).Value = false; ws.Cell(5, 2).Value = 1; ws.Cell(5, 3).Value = 1; ws.Cell(5, 4).Value = 1; ws.Cell(5, 5).Value = 56; ws.Cell(5, 6).Value = 56.1; ws.Cell(5, 7).Value = 56; ws.Cell(5, 8).Value = 77.7; ws.Cell(5, 9).Value = 77.7m; ws.Range(5, 3, 5, 4).Merge(); ws.Cell(6, 2).Value = new DateTime(2018, 2, 18); ws.Cell(6, 3).Value = new DateTime(2018, 2, 20); ws.Cell(6, 4).Value = new DateTime(2018, 2, 20); ws.Cell(6, 5).Value = new DateTime(2018, 2, 18); ws.Cell(6, 6).Value = null; ws.Cell(6, 8).Value = new DateTime(2018, 2, 21); ws.Cell(6, 9).Value = new DateTime(2018, 2, 21).ToString(); var panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = "1,2, 3 , 4,5", Type = PanelType.Horizontal, }; var method = panel.GetType().GetMethod("GroupResult", BindingFlags.Instance | BindingFlags.NonPublic); SetResultRange(panel, range); method.Invoke(panel, null); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(ExcelDataSourcePanelTest), nameof(TestGroupResultHorizontal)), wb); //wb.SaveAs("test.xlsx"); }