tdf#93747: sw_uiwriter2: Add unittest

Change-Id: I622cb779549dea729dbe7c8474b5f25034b97278
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124761
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index 202c6d5..8ab21d4 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -5187,6 +5187,97 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf123218)
    CPPUNIT_ASSERT_EQUAL(chart2::AxisOrientation_REVERSE, aScaleData.Orientation);
}

CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf93747)
{
    SwDoc* pDoc = createSwDoc();
    SwWrtShell* pWrtSh = pDoc->GetDocShell()->GetWrtShell();

    uno::Sequence<beans::PropertyValue> aArgs(comphelper::InitPropertySequence(
        { { "Rows", uno::makeAny(sal_Int32(2)) }, { "Columns", uno::makeAny(sal_Int32(2)) } }));

    dispatchCommand(mxComponent, ".uno:InsertTable", aArgs);
    Scheduler::ProcessEventsToIdle();

    pWrtSh->Insert("Col1");

    // Move the cursor to B1
    pWrtSh->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false);

    pWrtSh->Insert("Col2");

    uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
    uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
                                                         uno::UNO_QUERY);
    uno::Reference<text::XTextTable> xTextTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
    CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
    CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getRows()->getCount());
    CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTextTable->getColumns()->getCount());

    uno::Reference<text::XTextRange> xCellA1(xTextTable->getCellByName("A1"), uno::UNO_QUERY);
    CPPUNIT_ASSERT_EQUAL(OUString("Col1"), xCellA1->getString());

    uno::Reference<text::XTextRange> xCellB1(xTextTable->getCellByName("B1"), uno::UNO_QUERY);
    CPPUNIT_ASSERT_EQUAL(OUString("Col2"), xCellB1->getString());

    // Select backwards B1 and A1
    pWrtSh->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 5, /*bBasicCall=*/false);

    // Just select the whole B1
    pWrtSh->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false);

    uno::Sequence<beans::PropertyValue> aPropertyValues = comphelper::InitPropertySequence({
        { "Style", uno::makeAny(OUString("Heading 1")) },
        { "FamilyName", uno::makeAny(OUString("ParagraphStyles")) },
    });
    dispatchCommand(mxComponent, ".uno:StyleApply", aPropertyValues);

    // Without the fix in place, this test would have failed with
    // - Expected: Table Contents
    // - Actual  : Heading 1
    CPPUNIT_ASSERT_EQUAL(
        OUString("Table Contents"),
        getProperty<OUString>(getParagraphOfText(1, xCellA1->getText()), "ParaStyleName"));

    CPPUNIT_ASSERT_EQUAL(
        OUString("Heading 1"),
        getProperty<OUString>(getParagraphOfText(1, xCellB1->getText()), "ParaStyleName"));

    // Now select A1 again
    pWrtSh->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false);

    dispatchCommand(mxComponent, ".uno:StyleApply", aPropertyValues);

    CPPUNIT_ASSERT_EQUAL(
        OUString("Heading 1"),
        getProperty<OUString>(getParagraphOfText(1, xCellA1->getText()), "ParaStyleName"));

    CPPUNIT_ASSERT_EQUAL(
        OUString("Heading 1"),
        getProperty<OUString>(getParagraphOfText(1, xCellB1->getText()), "ParaStyleName"));

    dispatchCommand(mxComponent, ".uno:Undo", {});
    Scheduler::ProcessEventsToIdle();

    CPPUNIT_ASSERT_EQUAL(
        OUString("Table Contents"),
        getProperty<OUString>(getParagraphOfText(1, xCellA1->getText()), "ParaStyleName"));

    CPPUNIT_ASSERT_EQUAL(
        OUString("Heading 1"),
        getProperty<OUString>(getParagraphOfText(1, xCellB1->getText()), "ParaStyleName"));

    dispatchCommand(mxComponent, ".uno:Undo", {});
    Scheduler::ProcessEventsToIdle();

    CPPUNIT_ASSERT_EQUAL(
        OUString("Table Contents"),
        getProperty<OUString>(getParagraphOfText(1, xCellA1->getText()), "ParaStyleName"));

    CPPUNIT_ASSERT_EQUAL(
        OUString("Table Contents"),
        getProperty<OUString>(getParagraphOfText(1, xCellB1->getText()), "ParaStyleName"));
}

CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf126735)
{
    SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf39721.fodt");