diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2022-05-26 14:49:22 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2022-05-26 17:21:51 +0200 |
commit | ce12103990f7a8623c6de8b668784dbd0ab4d1b7 (patch) | |
tree | 3dad2d27634f7d092a0fa53f9c995ffa03f6a856 | |
parent | 8c018910ae4d8701b1ce2a95727b9baed4016da3 (diff) |
sw content controls, picture: add LOK API testcase
Fails with commit 9a76be53dfb801b754bf55f9d4b8c5f82991a62f (sw content
controls, picture: add LOK API, 2022-05-23) reverted.
Change-Id: I6164e597099632a2212afee86ac9a4c7555e5c61
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135022
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
-rw-r--r-- | sw/qa/extras/tiledrendering/tiledrendering.cxx | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx index 1090662aa127..2a8c05fe19e6 100644 --- a/sw/qa/extras/tiledrendering/tiledrendering.cxx +++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx @@ -66,6 +66,8 @@ #include <docsh.hxx> #include <txtfrm.hxx> #include <rootfrm.hxx> +#include <fmtanchr.hxx> +#include <textcontentcontrol.hxx> constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/tiledrendering/data/"; @@ -169,6 +171,7 @@ public: void testRedlinePortions(); void testContentControl(); void testDropDownContentControl(); + void testPictureContentControl(); CPPUNIT_TEST_SUITE(SwTiledRenderingTest); CPPUNIT_TEST(testRegisterCallback); @@ -258,6 +261,7 @@ public: CPPUNIT_TEST(testRedlinePortions); CPPUNIT_TEST(testContentControl); CPPUNIT_TEST(testDropDownContentControl); + CPPUNIT_TEST(testPictureContentControl); CPPUNIT_TEST_SUITE_END(); private: @@ -3714,6 +3718,72 @@ void SwTiledRenderingTest::testDropDownContentControl() CPPUNIT_ASSERT_EQUAL(OUString("green"), pTextNode->GetExpandText(pWrtShell->GetLayout())); } +void SwTiledRenderingTest::testPictureContentControl() +{ + // Given a document with a picture content control: + SwXTextDocument* pXTextDocument = createDoc(); + SwWrtShell* pWrtShell = pXTextDocument->GetDocShell()->GetWrtShell(); + setupLibreOfficeKitViewCallback(pWrtShell->GetSfxViewShell()); + uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY); + uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<text::XText> xText = xTextDocument->getText(); + uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor(); + uno::Reference<beans::XPropertySet> xTextGraphic( + xMSF->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY); + xTextGraphic->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AS_CHARACTER)); + uno::Reference<text::XTextContent> xTextContent(xTextGraphic, uno::UNO_QUERY); + xText->insertTextContent(xCursor, xTextContent, false); + xCursor->gotoStart(/*bExpand=*/false); + xCursor->gotoEnd(/*bExpand=*/true); + uno::Reference<text::XTextContent> xContentControl( + xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY); + xContentControlProps->setPropertyValue("ShowingPlaceHolder", uno::Any(true)); + xContentControlProps->setPropertyValue("Picture", uno::Any(true)); + xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true); + pWrtShell->SttEndDoc(/*bStt=*/true); + m_aContentControl.clear(); + + // When clicking on that content control: + pWrtShell->GotoObj(/*bNext=*/true, GotoObjFlags::Any); + pWrtShell->EnterSelFrameMode(); + const SwFrameFormat* pFlyFormat = pWrtShell->GetFlyFrameFormat(); + const SwFormatAnchor& rFormatAnchor = pFlyFormat->GetAnchor(); + const SwPosition* pAnchorPos = rFormatAnchor.GetContentAnchor(); + SwTextNode* pTextNode = pAnchorPos->nNode.GetNode().GetTextNode(); + SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL); + auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr); + auto& rFormatContentControl + = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr()); + pWrtShell->GotoContentControl(rFormatContentControl); + + // Then make sure that the callback is emitted: + // Without the accompanying fix in place, this test would have failed, no callback was emitted. + CPPUNIT_ASSERT(!m_aContentControl.isEmpty()); + std::stringstream aStream(m_aContentControl.getStr()); + boost::property_tree::ptree aTree; + boost::property_tree::read_json(aStream, aTree); + OString sAction = aTree.get_child("action").get_value<std::string>().c_str(); + CPPUNIT_ASSERT_EQUAL(OString("change-picture"), sAction); + + // And when replacing the image: + std::map<OUString, OUString> aArguments; + aArguments.emplace("type", "picture"); + OUString aURL = m_directories.getURLFromSrc(u"sw/qa/extras/uiwriter/data/ole2.png"); + aArguments.emplace("changed", aURL); + pXTextDocument->executeContentControlEvent(aArguments); + + // Then make sure that the document is updated accordingly: + uno::Reference<drawing::XShape> xShape = getShape(1); + auto xGraphic = getProperty<uno::Reference<beans::XPropertySet>>(xShape, "Graphic"); + // Without the accompanying fix in place, this test would have failed, xGraphic was empty after + // executeContentControlEvent(). + CPPUNIT_ASSERT(xGraphic.is()); + CPPUNIT_ASSERT_EQUAL(OUString("image/png"), getProperty<OUString>(xGraphic, "MimeType")); + +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwTiledRenderingTest); CPPUNIT_PLUGIN_IMPLEMENT(); |