sw/qa/extras/uiwriter/uiwriter5.cxx | 182 ++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+)
New commits: commit c3b63fd92aef1e1f99932c0d6c9ff120cd0e614c Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Mon Aug 25 14:39:17 2025 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Mon Aug 25 15:54:59 2025 +0200 tdf#168068: sw_uiwriter5: Add test Change-Id: I81595ab54388cd836f3803e47501ff279103fd82 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190172 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> Tested-by: Jenkins diff --git a/sw/qa/extras/uiwriter/uiwriter5.cxx b/sw/qa/extras/uiwriter/uiwriter5.cxx index e37df27fd817..53b18f94d35d 100644 --- a/sw/qa/extras/uiwriter/uiwriter5.cxx +++ b/sw/qa/extras/uiwriter/uiwriter5.cxx @@ -100,6 +100,188 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, testTdf139127) CPPUNIT_ASSERT(!pWrtShell->GetViewOptions()->IsShowChangesInMargin()); } +CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, testTdf168068) +{ + createSwDoc(); + + SwWrtShell* const pWrtShell = getSwDocShell()->GetWrtShell(); + + pWrtShell->Insert(u"To be or not to be"_ustr); + + pWrtShell->SttPara(/*bSelect=*/false); + pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 3, /*bBasicCall=*/false); + + // Select second and third words + pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/true, 5, /*bBasicCall=*/false); + dispatchCommand(mxComponent, u".uno:Bold"_ustr, {}); + + { + auto xRun1(getRun(getParagraph(1), 1)); + CPPUNIT_ASSERT(xRun1.is()); + CPPUNIT_ASSERT_EQUAL(u"To "_ustr, xRun1->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun1, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun1, u"CharPosture"_ustr)); + + auto xRun2(getRun(getParagraph(1), 2)); + CPPUNIT_ASSERT(xRun2.is()); + CPPUNIT_ASSERT_EQUAL(u"be or"_ustr, xRun2->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xRun2, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun2, u"CharPosture"_ustr)); + + auto xRun3(getRun(getParagraph(1), 3)); + CPPUNIT_ASSERT(xRun3.is()); + CPPUNIT_ASSERT_EQUAL(u" not to be"_ustr, xRun3->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun3, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun3, u"CharPosture"_ustr)); + } + + pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/false, 2, /*bBasicCall=*/false); + + // Select third and fourth words + pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/true, 6, /*bBasicCall=*/false); + dispatchCommand(mxComponent, u".uno:Italic"_ustr, {}); + + { + auto xRun1(getRun(getParagraph(1), 1)); + CPPUNIT_ASSERT(xRun1.is()); + CPPUNIT_ASSERT_EQUAL(u"To "_ustr, xRun1->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun1, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun1, u"CharPosture"_ustr)); + + auto xRun2(getRun(getParagraph(1), 2)); + CPPUNIT_ASSERT(xRun2.is()); + CPPUNIT_ASSERT_EQUAL(u"be "_ustr, xRun2->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xRun2, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun2, u"CharPosture"_ustr)); + + auto xRun3(getRun(getParagraph(1), 3)); + CPPUNIT_ASSERT(xRun3.is()); + CPPUNIT_ASSERT_EQUAL(u"or"_ustr, xRun3->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xRun3, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun3, u"CharPosture"_ustr)); + + auto xRun4(getRun(getParagraph(1), 4)); + CPPUNIT_ASSERT(xRun4.is()); + CPPUNIT_ASSERT_EQUAL(u" not"_ustr, xRun4->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun4, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun4, u"CharPosture"_ustr)); + + auto xRun5(getRun(getParagraph(1), 5)); + CPPUNIT_ASSERT(xRun5.is()); + CPPUNIT_ASSERT_EQUAL(u" to be"_ustr, xRun5->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun5, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun5, u"CharPosture"_ustr)); + } + + pWrtShell->SttPara(/*bSelect=*/false); + pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 3, /*bBasicCall=*/false); + + // Select second, third and fourth words + pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/true, 9, /*bBasicCall=*/false); + dispatchCommand(mxComponent, u".uno:Bold"_ustr, {}); + + { + auto xRun1(getRun(getParagraph(1), 1)); + CPPUNIT_ASSERT(xRun1.is()); + CPPUNIT_ASSERT_EQUAL(u"To "_ustr, xRun1->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun1, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun1, u"CharPosture"_ustr)); + + auto xRun2(getRun(getParagraph(1), 2)); + CPPUNIT_ASSERT(xRun2.is()); + CPPUNIT_ASSERT_EQUAL(u"be "_ustr, xRun2->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xRun2, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun2, u"CharPosture"_ustr)); + + auto xRun3(getRun(getParagraph(1), 3)); + CPPUNIT_ASSERT(xRun3.is()); + CPPUNIT_ASSERT_EQUAL(u"or"_ustr, xRun3->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xRun3, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun3, u"CharPosture"_ustr)); + + auto xRun4(getRun(getParagraph(1), 4)); + CPPUNIT_ASSERT(xRun4.is()); + CPPUNIT_ASSERT_EQUAL(u" not"_ustr, xRun4->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xRun4, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun4, u"CharPosture"_ustr)); + + auto xRun5(getRun(getParagraph(1), 5)); + CPPUNIT_ASSERT(xRun5.is()); + CPPUNIT_ASSERT_EQUAL(u" to be"_ustr, xRun5->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun5, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun5, u"CharPosture"_ustr)); + } + + // Unbold + dispatchCommand(mxComponent, u".uno:Bold"_ustr, {}); + + { + auto xRun1(getRun(getParagraph(1), 1)); + CPPUNIT_ASSERT(xRun1.is()); + CPPUNIT_ASSERT_EQUAL(u"To "_ustr, xRun1->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun1, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun1, u"CharPosture"_ustr)); + + auto xRun2(getRun(getParagraph(1), 2)); + CPPUNIT_ASSERT(xRun2.is()); + CPPUNIT_ASSERT_EQUAL(u"be "_ustr, xRun2->getString()); + + // Without the fix in place, this test would have failed here with + // - Expected: 100 + // - Actual : 150 + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun2, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun2, u"CharPosture"_ustr)); + + auto xRun3(getRun(getParagraph(1), 3)); + CPPUNIT_ASSERT(xRun3.is()); + CPPUNIT_ASSERT_EQUAL(u"or"_ustr, xRun3->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun3, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun3, u"CharPosture"_ustr)); + + auto xRun4(getRun(getParagraph(1), 4)); + CPPUNIT_ASSERT(xRun4.is()); + CPPUNIT_ASSERT_EQUAL(u" not"_ustr, xRun4->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun4, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun4, u"CharPosture"_ustr)); + + auto xRun5(getRun(getParagraph(1), 5)); + CPPUNIT_ASSERT(xRun5.is()); + CPPUNIT_ASSERT_EQUAL(u" to be"_ustr, xRun5->getString()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, + getProperty<float>(xRun5, u"CharWeight"_ustr)); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + getProperty<awt::FontSlant>(xRun5, u"CharPosture"_ustr)); + } +} + CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, testTdf138479) { createSwDoc();