summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2022-05-26 14:49:22 +0200
committerMiklos Vajna <vmiklos@collabora.com>2022-05-26 17:21:51 +0200
commitce12103990f7a8623c6de8b668784dbd0ab4d1b7 (patch)
tree3dad2d27634f7d092a0fa53f9c995ffa03f6a856
parent8c018910ae4d8701b1ce2a95727b9baed4016da3 (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.cxx70
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();