From 924f3b749650aa07dbc1c20f9b8e8ec5ececc986 Mon Sep 17 00:00:00 2001 From: Vasily Melenchuk Date: Wed, 22 Dec 2021 14:16:09 +0300 Subject: tdf#104823: unittest Ensure reading and writing to datasources Change-Id: Idbc907a21fe3b881d1b835ed0e8c795c4ea36863 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127311 Tested-by: Jenkins Reviewed-by: Vasily Melenchuk Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127334 Tested-by: Thorsten Behrens Reviewed-by: Thorsten Behrens --- sw/qa/extras/ooxmlexport/data/tdf104823.docx | Bin 0 -> 21260 bytes sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx | 61 +++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 sw/qa/extras/ooxmlexport/data/tdf104823.docx diff --git a/sw/qa/extras/ooxmlexport/data/tdf104823.docx b/sw/qa/extras/ooxmlexport/data/tdf104823.docx new file mode 100644 index 000000000000..4a354b848eea Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104823.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx index e587b982a863..255d4444b14d 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx @@ -11,11 +11,14 @@ #include #include #include +#include + +char const DATA_DIRECTORY[] = "/sw/qa/extras/ooxmlexport/data/"; class Test : public SwModelTestBase { public: - Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {} + Test() : SwModelTestBase(DATA_DIRECTORY, "Office Open XML Text") {} protected: /** @@ -771,6 +774,62 @@ DECLARE_OOXMLEXPORT_TEST( testSdtDatePicker, "test_sdt_datepicker.docx" ) CPPUNIT_ASSERT_EQUAL(OUString("008000"), sColor); } +CPPUNIT_TEST_FIXTURE(Test, testTdf104823) +{ + // Test how we can roundtrip sdt plain text with databindings support + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf104823.docx"; + loadURL(aURL, nullptr); + + css::uno::Reference xTextFieldsSupplier( + mxComponent, css::uno::UNO_QUERY_THROW); + auto xFields(xTextFieldsSupplier->getTextFields()->createEnumeration()); + + // FIXME: seems order of fields is different than in source document + // so feel free to modify testcase if order is changed + + // First field: content from core properties + uno::Reference xField1(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + // Check field value (it should be value from data source) and set new + CPPUNIT_ASSERT_EQUAL(OUString("True Core Property Value"), xField1->getPresentation(false)); + uno::Reference xField1Props(xField1, uno::UNO_QUERY); + xField1Props->setPropertyValue("Content", uno::makeAny(OUString("New Core Property Value"))); + + // Third field: content from custom properties + uno::Reference xField2(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xFields->hasMoreElements()); + // Check field value (it should be value from data source) and set new + CPPUNIT_ASSERT_EQUAL(OUString("True Custom XML Value"), xField2->getPresentation(false)); + uno::Reference xField2Props(xField2, uno::UNO_QUERY); + xField2Props->setPropertyValue("Content", uno::makeAny(OUString("New Custom XML Value"))); + + // Second field: content from extended properties + uno::Reference xField3(xFields->nextElement(), uno::UNO_QUERY); + CPPUNIT_ASSERT(!xFields->hasMoreElements()); + // Check field value (it should be value from data source) and set new + CPPUNIT_ASSERT_EQUAL(OUString("True Extended Property Value"), xField3->getPresentation(false)); + uno::Reference xField3Props(xField3, uno::UNO_QUERY); + xField3Props->setPropertyValue("Content", uno::makeAny(OUString("New Extended Property Value"))); + + // Save and check saved data + save("Office Open XML Text", maTempFile); + mbExported = true; + xmlDocPtr pXmlCustomPropsDoc = parseExport("customXml/item1.xml"); + CPPUNIT_ASSERT(pXmlCustomPropsDoc); + // FIXME: strange it won't run simple /employees/employee/name xpath query. Does not like namespaces? + assertXPathContent(pXmlCustomPropsDoc, "//*/*[local-name()='name']", "New Custom XML Value"); + + xmlDocPtr pXmlAppPropsDoc = parseExport("docProps/app.xml"); + CPPUNIT_ASSERT(pXmlAppPropsDoc); + // TODO: extended properties are not written yet + assertXPathContent(pXmlAppPropsDoc, "//*/*[local-name()='Company']", "True Extended Property Value"); + + xmlDocPtr pXmlCorePropsDoc = parseExport("docProps/core.xml"); + CPPUNIT_ASSERT(pXmlCorePropsDoc); + // TODO: core properties are not written yet + assertXPathContent(pXmlCorePropsDoc, "//*/*[local-name()='creator']", "True Core Property Value"); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit