public void TestActiveSheetAfterDelete_bug40414() { HSSFWorkbook wb = new HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet0 = wb.CreateSheet("Sheet0"); NPOI.SS.UserModel.ISheet sheet1 = wb.CreateSheet("Sheet1"); NPOI.SS.UserModel.ISheet sheet2 = wb.CreateSheet("Sheet2"); NPOI.SS.UserModel.ISheet sheet3 = wb.CreateSheet("Sheet3"); NPOI.SS.UserModel.ISheet sheet4 = wb.CreateSheet("Sheet4"); // Confirm default activation/selection ConfirmActiveSelected(sheet0, true); ConfirmActiveSelected(sheet1, false); ConfirmActiveSelected(sheet2, false); ConfirmActiveSelected(sheet3, false); ConfirmActiveSelected(sheet4, false); wb.SetActiveSheet(3); wb.SetSelectedTab(3); ConfirmActiveSelected(sheet0, false); ConfirmActiveSelected(sheet1, false); ConfirmActiveSelected(sheet2, false); ConfirmActiveSelected(sheet3, true); ConfirmActiveSelected(sheet4, false); wb.RemoveSheetAt(3); // after removing the only active/selected sheet, another should be active/selected in its place if (!sheet4.IsSelected) { throw new AssertionException("identified bug 40414 a"); } if (!sheet4.IsActive) { throw new AssertionException("identified bug 40414 b"); } ConfirmActiveSelected(sheet0, false); ConfirmActiveSelected(sheet1, false); ConfirmActiveSelected(sheet2, false); ConfirmActiveSelected(sheet4, true); sheet3 = sheet4; // re-align local vars in this Test case // Some more cases of removing sheets // Starting with a multiple selection, and different active sheet wb.SetSelectedTabs(new int[] { 1, 3, }); wb.SetActiveSheet(2); ConfirmActiveSelected(sheet0, false, false); ConfirmActiveSelected(sheet1, false, true); ConfirmActiveSelected(sheet2, true, false); ConfirmActiveSelected(sheet3, false, true); // removing a sheet that is not active, and not the only selected sheet wb.RemoveSheetAt(3); ConfirmActiveSelected(sheet0, false, false); ConfirmActiveSelected(sheet1, false, true); ConfirmActiveSelected(sheet2, true, false); // removing the only selected sheet wb.RemoveSheetAt(1); ConfirmActiveSelected(sheet0, false, false); ConfirmActiveSelected(sheet2, true, true); // The last remaining sheet should always be active+selected wb.RemoveSheetAt(1); ConfirmActiveSelected(sheet0, true, true); }