public void TestMove() { XLWorkbook wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); var excelReport = Substitute.For <object>(); var templateProcessor = Substitute.For <ITemplateProcessor>(); IXLRange range = ws.Range(1, 1, 4, 5); IXLRange childRange1 = ws.Range(1, 1, 2, 5); IXLRange childRange2 = ws.Range(3, 1, 4, 5); childRange2.AddToNamed("childRange2", XLScope.Worksheet); IXLNamedRange namedChildRange = ws.NamedRange("childRange2"); IXLRange childOfChildRange1 = ws.Range(2, 1, 2, 5); childOfChildRange1.AddToNamed("childOfChildRange1", XLScope.Worksheet); IXLNamedRange childOfChildNamedRange = ws.NamedRange("childOfChildRange1"); IXLRange childOfChildRange2 = ws.Range(4, 1, 4, 5); var panel = new ExcelPanel(range, excelReport, templateProcessor) { Children = new List <IExcelPanel> { new ExcelPanel(childRange1, excelReport, templateProcessor) { Children = new List <IExcelPanel> { new ExcelDataSourcePanel("fn:DataSource:Method()", childOfChildNamedRange, excelReport, templateProcessor) } }, new ExcelNamedPanel(namedChildRange, excelReport, templateProcessor) { Children = new List <IExcelPanel> { new ExcelPanel(childOfChildRange2, excelReport, templateProcessor) } }, } }; IExcelPanel globalParent = new ExcelPanel(ws.Range(1, 1, 8, 10), excelReport, templateProcessor); panel.Children.First().Children.First().Parent = panel.Children.First(); panel.Children.Last().Children.First().Parent = panel.Children.Last(); panel.Children.ToList().ForEach(c => c.Parent = panel); panel.Parent = globalParent; panel.Move(ws.Cell(5, 6)); Assert.AreEqual(ws.Cell(5, 6), panel.Range.FirstCell()); Assert.AreEqual(ws.Cell(8, 10), panel.Range.LastCell()); Assert.AreSame(globalParent, panel.Parent); Assert.AreEqual(2, panel.Children.Count()); Assert.AreEqual(ws.Cell(5, 6), panel.Children.First().Range.FirstCell()); Assert.AreEqual(ws.Cell(6, 10), panel.Children.First().Range.LastCell()); Assert.IsInstanceOf <ExcelPanel>(panel.Children.First()); Assert.IsNotInstanceOf <INamedPanel>(panel.Children.First()); Assert.AreSame(panel, panel.Children.First().Parent); Assert.AreEqual(ws.Cell(7, 6), panel.Children.Last().Range.FirstCell()); Assert.AreEqual(ws.Cell(8, 10), panel.Children.Last().Range.LastCell()); Assert.AreEqual("childRange2", ((INamedPanel)panel.Children.Last()).Name); Assert.AreSame(panel, panel.Children.First().Parent); Assert.AreEqual(1, panel.Children.First().Children.Count()); Assert.AreEqual(ws.Cell(6, 6), panel.Children.First().Children.First().Range.FirstCell()); Assert.AreEqual(ws.Cell(6, 10), panel.Children.First().Children.First().Range.LastCell()); Assert.IsInstanceOf <ExcelDataSourcePanel>(panel.Children.First().Children.First()); Assert.AreEqual("childOfChildRange1", ((INamedPanel)panel.Children.First().Children.First()).Name); Assert.AreSame(panel.Children.First(), panel.Children.First().Children.First().Parent); Assert.AreEqual(1, panel.Children.Last().Children.Count()); Assert.AreEqual(ws.Cell(8, 6), panel.Children.Last().Children.First().Range.FirstCell()); Assert.AreEqual(ws.Cell(8, 10), panel.Children.Last().Children.First().Range.LastCell()); Assert.IsInstanceOf <ExcelPanel>(panel.Children.Last().Children.First()); Assert.IsNotInstanceOf <INamedPanel>(panel.Children.Last().Children.First()); Assert.AreSame(panel.Children.Last(), panel.Children.Last().Children.First().Parent); Assert.AreEqual(2, ws.NamedRanges.Count()); panel.Move(ws.Cell(6, 6)); Assert.AreEqual(ws.Cell(6, 6), panel.Range.FirstCell()); Assert.AreEqual(ws.Cell(9, 10), panel.Range.LastCell()); Assert.IsNull(panel.Parent); Assert.AreEqual(2, panel.Children.Count()); Assert.AreEqual(ws.Cell(6, 6), panel.Children.First().Range.FirstCell()); Assert.AreEqual(ws.Cell(7, 10), panel.Children.First().Range.LastCell()); Assert.IsInstanceOf <ExcelPanel>(panel.Children.First()); Assert.IsNotInstanceOf <INamedPanel>(panel.Children.First()); Assert.AreSame(panel, panel.Children.First().Parent); Assert.AreEqual(ws.Cell(8, 6), panel.Children.Last().Range.FirstCell()); Assert.AreEqual(ws.Cell(9, 10), panel.Children.Last().Range.LastCell()); Assert.AreEqual("childRange2", ((INamedPanel)panel.Children.Last()).Name); Assert.AreSame(panel, panel.Children.First().Parent); Assert.AreEqual(1, panel.Children.First().Children.Count()); Assert.AreEqual(ws.Cell(7, 6), panel.Children.First().Children.First().Range.FirstCell()); Assert.AreEqual(ws.Cell(7, 10), panel.Children.First().Children.First().Range.LastCell()); Assert.IsInstanceOf <ExcelDataSourcePanel>(panel.Children.First().Children.First()); Assert.AreEqual("childOfChildRange1", ((INamedPanel)panel.Children.First().Children.First()).Name); Assert.AreSame(panel.Children.First(), panel.Children.First().Children.First().Parent); Assert.AreEqual(1, panel.Children.Last().Children.Count()); Assert.AreEqual(ws.Cell(9, 6), panel.Children.Last().Children.First().Range.FirstCell()); Assert.AreEqual(ws.Cell(9, 10), panel.Children.Last().Children.First().Range.LastCell()); Assert.IsInstanceOf <ExcelPanel>(panel.Children.Last().Children.First()); Assert.IsNotInstanceOf <INamedPanel>(panel.Children.Last().Children.First()); Assert.AreSame(panel.Children.Last(), panel.Children.Last().Children.First().Parent); Assert.AreEqual(2, ws.NamedRanges.Count()); //wb.SaveAs("test.xlsx"); }