Example #1
0
        public void TestRender_DynamicPanel_In_DataSourcePanel_Vertical()
        {
            var          report      = new TestReport();
            IXLWorksheet ws          = report.Workbook.AddWorksheet("Test");
            IXLRange     parentRange = ws.Range(1, 2, 4, 2);

            parentRange.AddToNamed("ParentRange", XLScope.Worksheet);

            IXLRange childRange = ws.Range(2, 2, 4, 2);

            childRange.AddToNamed("ChildRange", XLScope.Worksheet);

            ws.Cell(1, 2).Value = "{di:Name}";

            ws.Cell(2, 2).Value = "{Headers}";
            ws.Cell(3, 2).Value = "{Data}";
            ws.Cell(4, 2).Value = "{Totals}";

            var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor);
            var childPanel  = new ExcelDataSourceDynamicPanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor)
            {
                Parent = parentPanel,
            };

            parentPanel.Children = new[] { childPanel };
            parentPanel.Render();

            Assert.AreEqual(ws.Range(1, 2, 12, 3), parentPanel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourceDynamicPanel_InsideDataSourcePanel_Test),
                                                                                 nameof(TestRender_DynamicPanel_In_DataSourcePanel_Vertical)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
        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 TestPanelRenderEvents()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range  = ws.Range(2, 2, 2, 3);

            range.AddToNamed("TestRange", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Name}";
            ws.Cell(2, 3).Value = "{di:Date}";

            var panel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("TestRange"), report, report.TemplateProcessor)
            {
                BeforeRenderMethodName         = "TestExcelDataSourcePanelBeforeRender",
                AfterRenderMethodName          = "TestExcelDataSourcePanelAfterRender",
                BeforeDataItemRenderMethodName = "TestExcelDataItemPanelBeforeRender",
                AfterDataItemRenderMethodName  = "TestExcelDataItemPanelAfterRender",
            };

            panel.Render();

            Assert.AreEqual(ws.Range(2, 2, 4, 2), panel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelIEnumerableRenderTest),
                                                                                 nameof(TestPanelRenderEvents)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
        public void TestRenderDataSet()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range  = ws.Range(2, 2, 2, 6);

            range.AddToNamed("TestRange", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Id}";
            ws.Cell(2, 3).Value = "{di:Name}";
            ws.Cell(2, 4).Value = "{di:IsVip}";
            ws.Cell(2, 5).Value = "{di:Description}";
            ws.Cell(2, 6).Value = "{di:Type}";

            var panel = new ExcelDataSourcePanel("m:DataProvider:GetAllCustomersDataSet()", ws.NamedRange("TestRange"), report, report.TemplateProcessor);

            panel.Render();

            Assert.AreEqual(ws.Range(2, 2, 4, 6), panel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelDataSetRenderTest),
                                                                                 nameof(TestRenderDataSet)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
Example #5
0
        public void TestHorizontalInVerticalPanelsGrouping()
        {
            var          report      = new TestReport();
            IXLWorksheet ws          = report.Workbook.AddWorksheet("Test");
            IXLRange     parentRange = ws.Range(2, 2, 4, 3);

            parentRange.AddToNamed("ParentRange", XLScope.Worksheet);

            IXLRange child = ws.Range(2, 3, 4, 3);

            child.AddToNamed("ChildRange", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Name}";

            ws.Cell(3, 3).Value = "{di:Field1}";
            ws.Cell(4, 3).Value = "{di:Field2}";

            var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor);
            var childPanel  = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor)
            {
                Parent = parentPanel,
                Type   = PanelType.Horizontal,
            };

            parentPanel.Children = new[] { childPanel };
            parentPanel.Render();

            Assert.AreEqual(ws.Range(2, 2, 10, 5), parentPanel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_MixedPanels_Test),
                                                                                 nameof(TestHorizontalInVerticalPanelsGrouping)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
        public void TestRenderEmptyDataSet()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range  = ws.Range(2, 2, 2, 6);

            range.AddToNamed("TestRange", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Id}";
            ws.Cell(2, 3).Value = "{di:Name}";
            ws.Cell(2, 4).Value = "{di:IsVip}";
            ws.Cell(2, 5).Value = "{di:Description}";
            ws.Cell(2, 6).Value = "{di:Type}";

            var panel = new ExcelDataSourcePanel("m:DataProvider:GetEmptyDataSet()", ws.NamedRange("TestRange"), report, report.TemplateProcessor);

            panel.Render();

            Assert.IsNull(panel.ResultRange);

            Assert.AreEqual(0, ws.CellsUsed(XLCellsUsedOptions.Contents).Count());

            Assert.AreEqual(0, ws.NamedRanges.Count());
            Assert.AreEqual(0, ws.Workbook.NamedRanges.Count());

            Assert.AreEqual(1, ws.Workbook.Worksheets.Count);

            //report.Workbook.SaveAs("test.xlsx");
        }
        public void TestRenderIEnumerableVerticalNoShift()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range  = ws.Range(2, 2, 3, 5);

            range.AddToNamed("TestRange", XLScope.Worksheet);

            range.FirstCell().Style.Border.SetTopBorder(XLBorderStyleValues.Thin);
            range.FirstCell().Style.Border.SetBottomBorder(XLBorderStyleValues.Thin);
            range.FirstCell().Style.Border.SetLeftBorder(XLBorderStyleValues.Thin);

            ws.Cell(3, 5).Style.Border.SetBottomBorder(XLBorderStyleValues.Thin);

            ws.Cell(2, 4).DataType = XLDataType.Number;
            //ws.Cell(2, 4).DataType = XLCellValues.Number;

            ws.Cell(2, 2).Value = "{di:Name}";
            ws.Cell(2, 3).Value = "{di:Date}";
            ws.Cell(2, 4).Value = "{di:Sum}";
            ws.Cell(2, 5).Value = "{di:Contacts}";
            ws.Cell(3, 2).Value = "{di:Contacts.Phone}";
            ws.Cell(3, 3).Value = "{di:Contacts.Fax}";
            ws.Cell(3, 4).Value = "{p:StrParam}";

            ws.Cell(1, 1).Value = "{di:Name}";
            ws.Cell(4, 1).Value = "{di:Name}";
            ws.Cell(1, 6).Value = "{di:Name}";
            ws.Cell(4, 6).Value = "{di:Name}";
            ws.Cell(3, 1).Value = "{di:Name}";
            ws.Cell(3, 6).Value = "{di:Name}";
            ws.Cell(1, 4).Value = "{di:Name}";
            ws.Cell(4, 4).Value = "{di:Name}";
            ws.Cell(8, 5).Value = "{di:Date}";

            ws.Cell(8, 5).Style.Border.SetTopBorder(XLBorderStyleValues.Thin);
            ws.Cell(8, 5).Style.Border.SetRightBorder(XLBorderStyleValues.Thin);
            ws.Cell(8, 5).Style.Border.SetBottomBorder(XLBorderStyleValues.Thin);
            ws.Cell(8, 5).Style.Border.SetLeftBorder(XLBorderStyleValues.Thin);

            ws.Cell(8, 5).Style.Border.SetTopBorderColor(XLColor.Red);
            ws.Cell(8, 5).Style.Border.SetRightBorderColor(XLColor.Red);
            ws.Cell(8, 5).Style.Border.SetBottomBorderColor(XLColor.Red);
            ws.Cell(8, 5).Style.Border.SetLeftBorderColor(XLColor.Red);

            var panel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("TestRange"), report, report.TemplateProcessor)
            {
                ShiftType = ShiftType.NoShift,
            };

            panel.Render();

            Assert.AreEqual(ws.Range(2, 2, 7, 5), panel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelIEnumerableRenderTest),
                                                                                 nameof(TestRenderIEnumerableVerticalNoShift)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
Example #8
0
        public void Test_HorizontalPanelsGrouping_ChildLeft_ParentRowShiftChildRowShift_WithFictitiousColumn()
        {
            var          report      = new TestReport();
            IXLWorksheet ws          = report.Workbook.AddWorksheet("Test");
            IXLRange     parentRange = ws.Range(2, 2, 5, 4);

            parentRange.AddToNamed("ParentRange", XLScope.Worksheet);

            IXLRange child = ws.Range(2, 3, 5, 3);

            child.AddToNamed("ChildRange", XLScope.Worksheet);

            child.Range(2, 1, 4, 1).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            child.Range(2, 1, 4, 1).Style.Border.OutsideBorderColor = XLColor.Red;

            parentRange.Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            parentRange.Style.Border.OutsideBorderColor = XLColor.Black;

            ws.Cell(2, 4).Value = "{di:Name}";
            ws.Cell(3, 4).Value = "{di:Date}";

            ws.Cell(3, 3).Value = "{di:Field1}";
            ws.Cell(4, 3).Value = "{di:Field2}";
            ws.Cell(5, 3).Value = "{di:parent:Sum}";

            ws.Cell(1, 1).Value = "{di:Name}";
            ws.Cell(1, 3).Value = "{di:Name}";
            ws.Cell(1, 5).Value = "{di:Name}";
            ws.Cell(3, 1).Value = "{di:Name}";
            ws.Cell(3, 5).Value = "{di:Name}";
            ws.Cell(6, 1).Value = "{di:Name}";
            ws.Cell(6, 3).Value = "{di:Name}";
            ws.Cell(6, 5).Value = "{di:Name}";

            var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor)
            {
                Type      = PanelType.Horizontal,
                ShiftType = ShiftType.Row,
            };
            var childPanel = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor)
            {
                Parent    = parentPanel,
                Type      = PanelType.Horizontal,
                ShiftType = ShiftType.Row,
            };

            parentPanel.Children = new[] { childPanel };
            parentPanel.Render();

            Assert.AreEqual(ws.Range(2, 2, 5, 12), parentPanel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_HorizontalPanels_ChildLeft_Test),
                                                                                 "ParentRowShiftChildRowShift_WithFictitiousColumn"), ws.Workbook);

            //report.Workbook.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");
        }
Example #10
0
        public void Test_VerticalPanelsGrouping_ChildTop_ParentNoShiftChildCellsShift_WithFictitiousRowWhichDeleteAfterRender()
        {
            var          report      = new TestReport();
            IXLWorksheet ws          = report.Workbook.AddWorksheet("Test");
            IXLRange     parentRange = ws.Range(2, 2, 4, 5);

            parentRange.AddToNamed("ParentRange", XLScope.Worksheet);

            IXLRange child = ws.Range(3, 2, 3, 5);

            child.AddToNamed("ChildRange", XLScope.Worksheet);

            child.Range(1, 2, 1, 4).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            child.Range(1, 2, 1, 4).Style.Border.OutsideBorderColor = XLColor.Red;

            parentRange.Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            parentRange.Style.Border.OutsideBorderColor = XLColor.Black;

            ws.Cell(4, 2).Value = "{di:Name}";
            ws.Cell(4, 3).Value = "{di:Date}";

            ws.Cell(3, 3).Value = "{di:Field1}";
            ws.Cell(3, 4).Value = "{di:Field2}";
            ws.Cell(3, 5).Value = "{di:parent:Sum}";

            ws.Cell(1, 1).Value = "{di:Name}";
            ws.Cell(5, 1).Value = "{di:Name}";
            ws.Cell(1, 6).Value = "{di:Name}";
            ws.Cell(5, 6).Value = "{di:Name}";
            ws.Cell(3, 1).Value = "{di:Name}";
            ws.Cell(3, 6).Value = "{di:Name}";
            ws.Cell(1, 4).Value = "{di:Name}";
            ws.Cell(5, 4).Value = "{di:Name}";

            var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor)
            {
                AfterDataItemRenderMethodName = "AfterRenderParentDataSourcePanelChildTop",
                ShiftType = ShiftType.NoShift,
            };
            var childPanel = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor)
            {
                Parent = parentPanel,
            };

            parentPanel.Children = new[] { childPanel };
            parentPanel.Render();

            Assert.AreEqual(ws.Range(2, 2, 9, 5), parentPanel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_VerticalPanels_ChildTop_Test),
                                                                                 "ParentNoShiftChildCellsShift_WithFictitiousRowWhichDeleteAfterRender"), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
        public void Test_VerticalPageBreaks_WithSimplePanel_RowShift()
        {
            var          report      = new TestReport();
            IXLWorksheet ws          = report.Workbook.AddWorksheet("Test");
            IXLRange     parentRange = ws.Range(2, 2, 5, 4);

            parentRange.AddToNamed("ParentRange", XLScope.Worksheet);

            parentRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;

            IXLRange child1 = ws.Range(2, 3, 5, 3);

            child1.AddToNamed("ChildRange1", XLScope.Worksheet);

            IXLRange child2 = ws.Range(2, 4, 5, 4);

            child2.AddToNamed("ChildRange2", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Name}";
            ws.Cell(3, 2).Value = "{di:Date}";

            ws.Cell(3, 3).Value = "{di:Field1}";
            ws.Cell(4, 3).Value = "{di:Field2}";
            ws.Cell(5, 3).Value = "{di:parent:Sum}";

            ws.Cell(2, 4).Value = "{VertPageBreak}";

            var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor)
            {
                Type      = PanelType.Horizontal,
                ShiftType = ShiftType.Row,
            };
            var childPanel1 = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange1"), report, report.TemplateProcessor)
            {
                Parent    = parentPanel,
                Type      = PanelType.Horizontal,
                ShiftType = ShiftType.Row,
            };
            var childPanel2 = new ExcelNamedPanel(ws.NamedRange("ChildRange2"), report, report.TemplateProcessor)
            {
                Parent = parentPanel,
            };

            parentPanel.Children = new[] { childPanel1, childPanel2 };
            parentPanel.Render();

            Assert.AreEqual(ws.Range(2, 2, 5, 12), parentPanel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_PageBreaks_Test),
                                                                                 "Test_VerticalPageBreaks"), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
Example #12
0
        public void Test_TwoChildren_Horizontal()
        {
            var          report      = new TestReport();
            IXLWorksheet ws          = report.Workbook.AddWorksheet("Test");
            IXLRange     parentRange = ws.Range(2, 2, 5, 6);

            parentRange.AddToNamed("ParentRange", XLScope.Worksheet);

            IXLRange child1 = ws.Range(2, 4, 5, 4);

            child1.AddToNamed("ChildRange1", XLScope.Worksheet);

            IXLRange child2 = ws.Range(2, 6, 5, 6);

            child2.AddToNamed("ChildRange2", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Name}";

            ws.Cell(3, 3).Value           = "Field1";
            ws.Cell(3, 3).Style.Font.Bold = true;
            ws.Cell(4, 3).Value           = "Field2";
            ws.Cell(4, 3).Style.Font.Bold = true;
            ws.Cell(3, 4).Value           = "{di:Field1}";
            ws.Cell(4, 4).Value           = "{di:Field2}";
            ws.Cell(5, 5).Value           = "Number";
            ws.Cell(5, 5).Style.Font.Bold = true;
            ws.Cell(5, 6).Value           = "{di:di}";

            var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor);
            var childPanel1 = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange1"), report, report.TemplateProcessor)
            {
                Parent = parentPanel,
                Type   = PanelType.Horizontal,
            };
            var childPanel2 = new ExcelDataSourcePanel("di:ChildrenPrimitive", ws.NamedRange("ChildRange2"), report, report.TemplateProcessor)
            {
                Parent = parentPanel,
                Type   = PanelType.Horizontal,
            };

            parentPanel.Children = new[] { childPanel1, childPanel2 };
            parentPanel.Render();

            Assert.AreEqual(ws.Range(2, 2, 13, 8), parentPanel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_MultipleChildrenInOneParent),
                                                                                 nameof(Test_TwoChildren_Horizontal)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
Example #13
0
        public void TestRenderDictionaryEnumerable()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range1 = ws.Range(2, 2, 2, 4);

            range1.AddToNamed("TestRange1", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Name}";
            ws.Cell(2, 3).Value = "{di:Value}";
            ws.Cell(2, 4).Value = "{di:IsVip}";

            var panel1 = new ExcelDataSourcePanel("m:DataProvider:GetDictionaryEnumerable()", ws.NamedRange("TestRange1"), report, report.TemplateProcessor);

            panel1.Render();

            var dictWithDecimalValues = new List <IDictionary <string, decimal> >
            {
                new Dictionary <string, decimal> {
                    ["Value"] = 25.7m
                },
                new Dictionary <string, decimal> {
                    ["Value"] = 250.7m
                },
                new Dictionary <string, decimal> {
                    ["Value"] = 2500.7m
                },
            };

            IXLRange range2 = ws.Range(2, 6, 2, 6);

            range2.AddToNamed("TestRange2", XLScope.Worksheet);

            ws.Cell(2, 6).Value = "{di:Value}";

            var panel2 = new ExcelDataSourcePanel(dictWithDecimalValues, ws.NamedRange("TestRange2"), report, report.TemplateProcessor);

            panel2.Render();

            Assert.AreEqual(ws.Range(2, 2, 4, 4), panel1.ResultRange);
            Assert.AreEqual(ws.Range(2, 6, 4, 6), panel2.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelDictionaryRenderTest),
                                                                                 nameof(TestRenderDictionaryEnumerable)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
Example #14
0
        public void TestSimplePanelExpansion()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");

            IXLRange simplePanelRange = ws.Range(1, 1, 3, 5);
            var      simplePanel      = new ExcelPanel(simplePanelRange, report, report.TemplateProcessor);

            IXLRange dataPanelRange = ws.Range(2, 2, 2, 5);

            dataPanelRange.AddToNamed("d_Data", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Name}";
            ws.Cell(2, 3).Value = "{di:Date}";
            ws.Cell(2, 4).Value = "{di:Sex}";
            ws.Cell(2, 5).Value = "{di:Sum}";

            var dataPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("d_Data"), report, report.TemplateProcessor)
            {
                Parent = simplePanel,
            };

            IXLRange totalsPanelRange = ws.Range(3, 2, 3, 5);

            totalsPanelRange.AddToNamed("t_Totals", XLScope.Worksheet);

            ws.Cell(3, 2).Value = "{Max(di:Name)}";
            ws.Cell(3, 3).Value = "{Min(di:Date)}";
            ws.Cell(3, 4).Value = "{Max(di:Sex)}";
            ws.Cell(3, 5).Value = "{Sum(di:Sum)}";

            var totalsPanel = new ExcelTotalsPanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("t_Totals"), report, report.TemplateProcessor)
            {
                Parent = simplePanel,
            };

            simplePanel.Children = new[] { dataPanel, totalsPanel };
            simplePanel.Render();

            Assert.AreEqual(ws.Range(1, 1, 5, 5), simplePanel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(PanelRenderTest),
                                                                                 nameof(TestSimplePanelExpansion)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
        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 TestPanelRenderWithParentContext()
        {
            var          report      = new TestReport();
            IXLWorksheet ws          = report.Workbook.AddWorksheet("Test");
            IXLRange     parentRange = ws.Range(2, 2, 3, 5);

            parentRange.AddToNamed("ParentRange", XLScope.Worksheet);

            IXLRange child1 = ws.Range(2, 2, 2, 5);

            child1.AddToNamed("ChildRange1", XLScope.Worksheet);

            IXLRange child2 = ws.Range(3, 2, 3, 5);

            child2.AddToNamed("ChildRange2", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Field1}";
            ws.Cell(2, 3).Value = "{di:Field2}";

            ws.Cell(3, 2).Value = "{Count(di:Field1)}";
            ws.Cell(3, 3).Value = "{Max(di:Field2)}";
            ws.Cell(3, 4).Value = "{Max(di:parent:Sum)}";
            ws.Cell(3, 5).Value = "{di:parent:Name}";

            var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor);
            var childPanel1 = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange1"), report, report.TemplateProcessor)
            {
                Parent = parentPanel,
            };
            var childPanel2 = new ExcelTotalsPanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange2"), report, report.TemplateProcessor)
            {
                Parent = parentPanel
            };

            parentPanel.Children = new[] { childPanel1, childPanel2 };
            parentPanel.Render();

            Assert.AreEqual(ws.Range(2, 2, 9, 5), parentPanel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(TotalsPanelRenderTest),
                                                                                 nameof(TestPanelRenderWithParentContext)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
Example #17
0
        public void TestRenderDictionary()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range1 = ws.Range(2, 2, 2, 3);

            range1.AddToNamed("TestRange", XLScope.Worksheet);

            IXLRange range2 = ws.Range(2, 5, 2, 6);

            range2.AddToNamed("TestRange2", XLScope.Worksheet);

            ws.Cell(1, 2).Value = "Key";
            ws.Cell(1, 3).Value = "Value";
            ws.Cell(2, 2).Value = "{di:Key}";
            ws.Cell(2, 3).Value = "{di:Value}";

            ws.Cell(1, 5).Value = "Key";
            ws.Cell(1, 6).Value = "Value";
            ws.Cell(2, 5).Value = "{di:Key}";
            ws.Cell(2, 6).Value = "{di:Value}";

            IDictionary <string, object> data1 = new DataProvider().GetDictionaryEnumerable().First();
            var panel1 = new ExcelDataSourcePanel(data1, ws.NamedRange("TestRange"), report, report.TemplateProcessor);

            panel1.Render();

            IEnumerable <KeyValuePair <string, object> > data2 = new DataProvider().GetDictionaryEnumerable().First()
                                                                 .Select(x => new KeyValuePair <string, object>(x.Key, x.Value));
            var panel2 = new ExcelDataSourcePanel(data2, ws.NamedRange("TestRange2"), report, report.TemplateProcessor);

            panel2.Render();

            Assert.AreEqual(ws.Range(2, 2, 4, 3), panel1.ResultRange);
            Assert.AreEqual(ws.Range(2, 5, 4, 6), panel2.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelDictionaryRenderTest),
                                                                                 nameof(TestRenderDictionary)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
        public void TestRenderIEnumerableOfString()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range  = ws.Range(2, 2, 2, 2);

            range.AddToNamed("TestRange", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:di}";

            var panel = new ExcelDataSourcePanel(new[] { "One", "Two", "Three", "Four" }, ws.NamedRange("TestRange"), report, report.TemplateProcessor);

            panel.Render();

            Assert.AreEqual(ws.Range(2, 2, 5, 2), panel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelIEnumerableRenderTest),
                                                                                 nameof(TestRenderIEnumerableOfString)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
Example #19
0
        public void TestRenderNullItemHorizontalNoShift()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range  = ws.Range(2, 2, 3, 5);

            range.AddToNamed("TestRange", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Name}";
            ws.Cell(2, 3).Value = "{di:Date}";
            ws.Cell(2, 4).Value = "{m:Multiply(di:Sum, 5)}";
            ws.Cell(2, 5).Value = "{di:Contacts}";
            ws.Cell(3, 2).Value = "{di:Contacts.Phone}";
            ws.Cell(3, 3).Value = "{di:Contacts.Fax}";
            ws.Cell(3, 4).Value = "{p:StrParam}";

            ws.Cell(1, 1).Value = "{di:Name}";
            ws.Cell(4, 1).Value = "{di:Name}";
            ws.Cell(1, 6).Value = "{di:Name}";
            ws.Cell(4, 6).Value = "{di:Name}";
            ws.Cell(3, 1).Value = "{di:Name}";
            ws.Cell(3, 6).Value = "{di:Name}";
            ws.Cell(1, 4).Value = "{di:Name}";
            ws.Cell(4, 4).Value = "{di:Name}";

            var panel = new ExcelDataSourcePanel("m:DataProvider:GetNullItem()", ws.NamedRange("TestRange"), report, report.TemplateProcessor)
            {
                Type      = PanelType.Horizontal,
                ShiftType = ShiftType.NoShift,
            };

            panel.Render();

            Assert.IsNull(panel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelNullItemRenderTest),
                                                                                 nameof(TestRenderNullItemHorizontalNoShift)), ws.Workbook);

            //report.Workbook.SaveAs("test.xlsx");
        }
        // Rendering speed test
        //[Test]
        public void TestPanelRenderSpeed()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range  = ws.Range(2, 2, 2, 6);

            range.AddToNamed("TestRange", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Name}";
            ws.Cell(2, 3).Value = "{di:Date}";
            ws.Cell(2, 4).Value = "{di:Sum}";
            ws.Cell(2, 5).Value = "{di:Contacts.Phone}";
            ws.Cell(2, 6).Value = "{di:Contacts.Fax}";

            const int        dataCount = 6000;
            IList <TestItem> data      = new List <TestItem>(dataCount);

            for (int i = 0; i < dataCount; i++)
            {
                data.Add(new TestItem($"Name_{i}", DateTime.Now.AddHours(1), i + 10, new Contacts($"Phone_{i}", $"Fax_{i}")));
            }

            var panel = new ExcelDataSourcePanel(data, ws.NamedRange("TestRange"), report, report.TemplateProcessor)
            {
                //ShiftType = ShiftType.Row,
                //ShiftType = ShiftType.NoShift,
            };

            Stopwatch sw = Stopwatch.StartNew();

            panel.Render();

            sw.Stop();

            //Stopwatch sw2 = Stopwatch.StartNew();

            //report.Workbook.SaveAs("test.xlsx");

            //sw2.Stop();
        }
        public void TestExpandSimplePanel_ChildAcrossWidth_ChildCenter_NoShift()
        {
            var          report      = new TestReport();
            IXLWorksheet ws          = report.Workbook.AddWorksheet("Test");
            IXLRange     parentRange = ws.Range(2, 2, 4, 5);

            parentRange.AddToNamed("ParentRange", XLScope.Worksheet);

            parentRange.Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            parentRange.Style.Border.OutsideBorderColor = XLColor.Black;

            IXLRange childRange = ws.Range(3, 2, 3, 5);

            childRange.AddToNamed("ChildRange", XLScope.Worksheet);

            childRange.Style.Border.OutsideBorder      = XLBorderStyleValues.Dashed;
            childRange.Style.Border.OutsideBorderColor = XLColor.Blue;

            ws.Cell(2, 2).Value = "{p:StrParam}";

            ws.Cell(3, 3).Value = "{di:Name}";
            ws.Cell(3, 4).Value = "{di:Date}";
            ws.Cell(3, 5).Value = "{di:Sum}";

            var parentPanel = new ExcelPanel(parentRange, report, report.TemplateProcessor);
            var childPanel  = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ChildRange"), report, report.TemplateProcessor)
            {
                Parent    = parentPanel,
                ShiftType = ShiftType.NoShift,
            };

            parentPanel.Children = new[] { childPanel };
            parentPanel.Render();

            Assert.AreEqual(ws.Range(2, 2, 5, 5), parentPanel.ResultRange);

            //report.Workbook.SaveAs("test.xlsx");
        }
        public void TestMakePanelsHierarchy()
        {
            var          wb = new XLWorkbook();
            IXLWorksheet ws = wb.AddWorksheet("Test");

            IXLRange panel1Range = ws.Range(1, 1, 4, 4);
            IXLRange panel2Range = ws.Range(1, 1, 2, 4);

            panel2Range.AddToNamed("Panel2", XLScope.Worksheet);
            IXLRange panel3Range = ws.Range(2, 1, 2, 4);

            panel3Range.AddToNamed("Panel3", XLScope.Workbook);
            IXLRange panel4Range = ws.Range(5, 1, 6, 5);
            IXLRange panel5Range = ws.Range(6, 1, 6, 5);

            panel5Range.AddToNamed("Panel5", XLScope.Worksheet);
            IXLRange panel6Range = ws.Range(3, 1, 4, 4);
            IXLRange panel7Range = ws.Range(10, 10, 10, 10);
            IXLRange panel8Range = ws.Range(8, 9, 9, 10);

            panel8Range.AddToNamed("Panel8", XLScope.Worksheet);

            var panel1 = new ExcelPanel(panel1Range, new object(), Substitute.For <ITemplateProcessor>());
            var panel2 = new ExcelDataSourcePanel("Stub", ws.NamedRange("Panel2"), new object(),
                                                  Substitute.For <ITemplateProcessor>());
            var panel3 = new ExcelDataSourcePanel("Stub", wb.NamedRange("Panel3"), new object(),
                                                  Substitute.For <ITemplateProcessor>());
            var panel4 = new ExcelPanel(panel4Range, new object(), Substitute.For <ITemplateProcessor>());
            var panel5 = new ExcelDataSourceDynamicPanel("Stub", ws.NamedRange("Panel5"), new object(),
                                                         Substitute.For <ITemplateProcessor>());
            var panel6 = new ExcelPanel(panel6Range, new object(), Substitute.For <ITemplateProcessor>());
            var panel7 = new ExcelPanel(panel7Range, new object(), Substitute.For <ITemplateProcessor>());
            var panel8 = new ExcelTotalsPanel("Stub", ws.NamedRange("Panel8"), new object(),
                                              Substitute.For <ITemplateProcessor>());

            IDictionary <string, (IExcelPanel, string)> panelsFlatView = new Dictionary <string, (IExcelPanel, string)>
            {
        public void TestCancelPanelRender()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range  = ws.Range(2, 2, 2, 2);

            range.AddToNamed("TestRange", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:di}";

            var panel = new ExcelDataSourcePanel(new[] { 1, 2, 3, 4 }, ws.NamedRange("TestRange"), report, report.TemplateProcessor)
            {
                BeforeRenderMethodName = "CancelPanelRender",
            };

            panel.Render();

            Assert.AreEqual(range, panel.ResultRange);

            Assert.AreEqual(1, ws.CellsUsed(XLCellsUsedOptions.Contents).Count());
            Assert.AreEqual("{di:di}", ws.Cell(2, 2).Value);

            //report.Workbook.SaveAs("test.xlsx");
        }
Example #24
0
        public void TestMultipleHorizontalPanelsGrouping()
        {
            var          report      = new TestReport();
            IXLWorksheet ws          = report.Workbook.AddWorksheet("Test");
            IXLRange     parentRange = ws.Range(2, 2, 7, 6);

            parentRange.AddToNamed("ParentRange", XLScope.Worksheet);

            IXLRange simpleRange1 = ws.Range(3, 3, 4, 3);

            simpleRange1.AddToNamed("simpleRange1");

            IXLRange child = ws.Range(2, 4, 7, 6);

            child.AddToNamed("ChildRange", XLScope.Worksheet);

            IXLRange childOfChild = ws.Range(2, 5, 7, 6);

            childOfChild.AddToNamed("ChildOfChildRange");

            IXLRange simpleRange2 = ws.Range(5, 6, 7, 6);

            simpleRange2.AddToNamed("simpleRange2", XLScope.Worksheet);

            simpleRange2.Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            simpleRange2.Style.Border.OutsideBorderColor = XLColor.Orange;

            childOfChild.Range(3, 1, 6, 2).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            childOfChild.Range(3, 1, 6, 2).Style.Border.OutsideBorderColor = XLColor.Green;

            child.Range(2, 1, 6, 3).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            child.Range(2, 1, 6, 3).Style.Border.OutsideBorderColor = XLColor.Red;

            simpleRange1.Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            simpleRange1.Style.Border.OutsideBorderColor = XLColor.Brown;

            parentRange.Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            parentRange.Style.Border.OutsideBorderColor = XLColor.Black;

            ws.Cell(2, 2).Value = "{di:Name}";
            ws.Cell(3, 2).Value = "{di:Date}";

            ws.Cell(3, 3).Value = "{p:StrParam}";
            ws.Cell(4, 3).Value = "{di:Sum}";
            ws.Cell(5, 3).Value = "{p:IntParam}";

            ws.Cell(3, 4).Value = "{di:Field1}";
            ws.Cell(4, 4).Value = "{di:Field2}";
            ws.Cell(5, 4).Value = "{di:parent:Sum}";
            ws.Cell(6, 4).Value = "{di:parent:Contacts}";

            ws.Cell(4, 5).Value = "{di:Field1}";
            ws.Cell(5, 5).Value = "{di:Field2}";
            ws.Cell(6, 5).Value = "{di:parent:Field1}";
            ws.Cell(7, 5).Value = "{di:parent:parent:Contacts.Phone}";

            ws.Cell(5, 6).Value = "{p:DateParam}";
            ws.Cell(6, 6).Value = "{di:parent:Field2}";
            ws.Cell(7, 6).Value = "{di:parent:parent:Contacts.Fax}";

            var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor)
            {
                Type = PanelType.Horizontal,
            };
            var simplePanel1 = new ExcelNamedPanel(ws.Workbook.NamedRange("simpleRange1"), report, report.TemplateProcessor)
            {
                Parent = parentPanel,
            };
            var childPanel = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor)
            {
                Parent = parentPanel,
                Type   = PanelType.Horizontal,
            };
            var childOfChildPanel = new ExcelDataSourcePanel("di:Children", ws.Workbook.NamedRange("ChildOfChildRange"), report, report.TemplateProcessor)
            {
                Parent = childPanel,
                Type   = PanelType.Horizontal,
            };
            var simplePanel2 = new ExcelNamedPanel(ws.NamedRange("simpleRange2"), report, report.TemplateProcessor)
            {
                Parent = childOfChildPanel,
            };

            childOfChildPanel.Children = new[] { simplePanel2 };
            childPanel.Children        = new[] { childOfChildPanel };
            parentPanel.Children       = new[] { childPanel, simplePanel1 };
            parentPanel.Render();

            Assert.AreEqual(ws.Range(2, 2, 7, 20), parentPanel.ResultRange);

            ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_MixedPanels_Test),
                                                                                 nameof(TestMultipleHorizontalPanelsGrouping)), ws.Workbook);

            //report.Workbook.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");
        }
        // Rendering speed test
        //[Test]
        public void TestPanelRenderSpeedWithMultiHierarchy()
        {
            var          report = new TestReport();
            IXLWorksheet ws     = report.Workbook.AddWorksheet("Test");
            IXLRange     range  = ws.Range(2, 2, 4, 6);

            range.AddToNamed("ParentRange", XLScope.Worksheet);

            ws.Cell(2, 2).Value = "{di:Name}";
            ws.Cell(2, 3).Value = "{di:Date}";
            ws.Cell(2, 4).Value = "{di:Sum}";
            ws.Cell(2, 5).Value = "{di:Contacts.Phone}";
            ws.Cell(2, 6).Value = "{di:Contacts.Fax}";

            IXLRange child1 = ws.Range(3, 2, 4, 6);

            child1.AddToNamed("ChildRange1", XLScope.Worksheet);

            ws.Cell(3, 2).Value = "{di:Field1}";
            ws.Cell(3, 3).Value = "{di:Field2}";

            IXLRange child2 = ws.Range(4, 2, 4, 6);

            child2.AddToNamed("ChildRange2", XLScope.Worksheet);

            ws.Cell(4, 5).Value = "{di:Field1}";
            ws.Cell(4, 6).Value = "{di:Field2}";

            const int        dataCount = 50;
            IList <TestItem> data      = new List <TestItem>(dataCount);

            for (int i = 0; i < dataCount; i++)
            {
                data.Add(new TestItem($"Name_{i}", DateTime.Now.AddHours(1), i + 1, new Contacts($"Phone_{i}", $"Fax_{i}")));
            }

            var parentPanel = new ExcelDataSourcePanel(data, ws.NamedRange("ParentRange"), report, report.TemplateProcessor)
            {
                //ShiftType = ShiftType.Row,
                //ShiftType = ShiftType.NoShift,
            };

            var childPanel1 = new ExcelDataSourcePanel("m:DataProvider:GetChildrenRandom(4, 6)", ws.NamedRange("ChildRange1"), report, report.TemplateProcessor)
            {
                //ShiftType = ShiftType.Row,
                //ShiftType = ShiftType.NoShift,
                Parent = parentPanel,
            };

            var childPanel2 = new ExcelDataSourcePanel("m:DataProvider:GetChildrenRandom(10, 15)", ws.NamedRange("ChildRange2"), report, report.TemplateProcessor)
            {
                //ShiftType = ShiftType.Row,
                //ShiftType = ShiftType.NoShift,
                Parent = childPanel1,
            };

            parentPanel.Children.Add(childPanel1);
            childPanel1.Children.Add(childPanel2);

            Stopwatch sw = Stopwatch.StartNew();

            parentPanel.Render();

            sw.Stop();

            //Stopwatch sw2 = Stopwatch.StartNew();

            //report.Workbook.SaveAs("test.xlsx");

            //sw2.Stop();
        }