sc/qa/unit/tiledrendering/SheetViewTest.cxx | 87 ++++++++++++++++++++++++++++ sc/source/ui/inc/viewdata.hxx | 2 2 files changed, 88 insertions(+), 1 deletion(-)
New commits: commit d027ba86ef01bf2d679e3396aa7542cbb163d4a6 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Thu Feb 26 23:31:56 2026 +0900 Commit: Miklos Vajna <[email protected]> CommitDate: Wed Mar 4 08:35:38 2026 +0100 sc: Add additional tests for issues previously found First test is related to deleting sheet views. It happened that adding a sheet view, then deleting it, moving to another tab and back would result in an empty sheet. Second test makes sure that when we create a new view (either a new window or a new user) we don't show the sheet view tab, but open its default view instead. Change-Id: I8afa3edbbeb5f7dbf0eec04f0f8200c7a50de169 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200764 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/sc/qa/unit/tiledrendering/SheetViewTest.cxx b/sc/qa/unit/tiledrendering/SheetViewTest.cxx index f6adb6ec61f9..f31e5ae0e686 100644 --- a/sc/qa/unit/tiledrendering/SheetViewTest.cxx +++ b/sc/qa/unit/tiledrendering/SheetViewTest.cxx @@ -1530,6 +1530,93 @@ CPPUNIT_TEST_FIXTURE(SyncTest, testSorting_NonAutoFilterRange) } } +CPPUNIT_TEST_FIXTURE(SheetViewTest, testRemoveSheetViewAndSwitchTab) +{ + // Test that creating a sheet view, removing it, switching to another tab + // and switching back shows the correct data (not an empty sheet). + + ScModelObj* pModelObj = createDoc("empty.ods"); + pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); + ScDocument& rDocument = *pModelObj->GetDocument(); + + ScTestViewCallback aView1; + ScTabViewShell* pTabView1 = aView1.getTabViewShell(); + + // Insert a second sheet + uno::Sequence<beans::PropertyValue> aArgsInsert(comphelper::InitPropertySequence( + { { "Name", uno::Any(u"Sheet2"_ustr) }, { "Index", uno::Any(sal_Int16(2)) } })); + dispatchCommand(mxComponent, u".uno:Insert"_ustr, aArgsInsert); + + CPPUNIT_ASSERT_EQUAL(SCTAB(2), rDocument.GetTableCount()); + + // Go back to the first sheet + pTabView1->SetTabNo(0); + + // Put some data in the first sheet + rDocument.SetString(ScAddress(0, 0, 0), u"ABC"_ustr); + CPPUNIT_ASSERT_EQUAL(u"ABC"_ustr, rDocument.GetString(ScAddress(0, 0, 0))); + + // Create a sheet view on the first sheet + createNewSheetViewInCurrentView(); + + // Verify we are now on the sheet view tab + CPPUNIT_ASSERT(rDocument.GetTableSheetViewID(pTabView1->GetViewData().GetTabNumber()) + != sc::DefaultSheetViewID); + + // Remove the sheet view + removeSheetViewInCurrentView(); + + // Should be back on the default tab (first sheet) + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView1->GetViewData().GetTabNumber()); + + // Switch to the second sheet + pTabView1->SetTabNo(1); + CPPUNIT_ASSERT_EQUAL(SCTAB(1), pTabView1->GetViewData().GetTabNumber()); + + // Switch back to the first sheet + pTabView1->SetTabNo(0); + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView1->GetViewData().GetTabNumber()); + + // Verify the data is still visible (not an empty sheet) + CPPUNIT_ASSERT_EQUAL(u"ABC"_ustr, rDocument.GetString(ScAddress(0, 0, 0))); +} + +CPPUNIT_TEST_FIXTURE(SheetViewTest, testNewViewOpensInDefaultView) +{ + // Test that opening a new view while on a sheet view tab opens the new + // view on the default tab, not on the sheet view tab. + + ScModelObj* pModelObj = createDoc("SheetView_AutoFilter.ods"); + pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); + + // Setup first view + ScTestViewCallback aView1; + ScTabViewShell* pTabView1 = aView1.getTabViewShell(); + + // Verify we start on tab 0 (default) + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView1->GetViewData().GetTabNumber()); + + // Create a sheet view - view 1 should move to the sheet view tab + createNewSheetViewInCurrentView(); + + // Create a new view - simulates a new user or new window + SfxLokHelper::createView(); + Scheduler::ProcessEventsToIdle(); + + ScTestViewCallback aView2; + ScTabViewShell* pTabView2 = aView2.getTabViewShell(); + + CPPUNIT_ASSERT(pTabView1 != pTabView2); + + // View 1 should be open on sheet view tab + CPPUNIT_ASSERT_EQUAL(SCTAB(1), pTabView1->GetViewData().GetTabNumber()); + CPPUNIT_ASSERT(pTabView1->GetViewData().GetSheetViewID() != sc::DefaultSheetViewID); + + // The view 2 should open on the default tab + CPPUNIT_ASSERT_EQUAL(SCTAB(0), pTabView2->GetViewData().GetTabNumber()); + CPPUNIT_ASSERT_EQUAL(sc::DefaultSheetViewID, pTabView2->GetViewData().GetSheetViewID()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/inc/viewdata.hxx b/sc/source/ui/inc/viewdata.hxx index 3bf7976b82e3..4369fbb86738 100644 --- a/sc/source/ui/inc/viewdata.hxx +++ b/sc/source/ui/inc/viewdata.hxx @@ -421,7 +421,7 @@ public: void SetSheetViewID(sc::SheetViewID nID); - sc::SheetViewID GetSheetViewID() const; + SC_DLLPUBLIC sc::SheetViewID GetSheetViewID() const; sc::SheetViewID GetSheetViewIDForSheet(SCTAB nTab) const;
