diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-11-20 14:54:16 +0000 |
---|---|---|
committer | Michael Stahl <michael.stahl@cib.de> | 2019-11-22 17:47:57 +0100 |
commit | 44a4c6f8e283c47b808cb7b783ed704574b30159 (patch) | |
tree | b37fb20af6ea1a32f3d3dff4b3740166ed7db402 /sc/qa | |
parent | afbb9883f1b2af418009599a4b1e12577b0515e9 (diff) |
If a SdrOle2Obj object is missing/broken show the preview set for it
if the object isn't valid, e.g. link to something that doesn't exist, set the fallback
graphic as mxGraphic so SdrOle2Obj::GetGraphic will show the fallback, otherwise
the failing mxObjRef.is test in SdrOle2Obj::GetGraphic means it doesn't get used
Reviewed-on: https://gerrit.libreoffice.org/83329
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
(cherry picked from commit 35300000346902db38f063b4427a07fdaf6240cd)
Change-Id: I8f1aea6b25dc216e01a0f888a44d10876bb1bebd
Reviewed-on: https://gerrit.libreoffice.org/83422
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
Tested-by: Michael Stahl <michael.stahl@cib.de>
Diffstat (limited to 'sc/qa')
-rw-r--r-- | sc/qa/unit/data/ods/keep-preview-missing-obj-link.ods | bin | 0 -> 18464 bytes | |||
-rw-r--r-- | sc/qa/unit/helper/qahelper.cxx | 17 | ||||
-rw-r--r-- | sc/qa/unit/helper/qahelper.hxx | 2 | ||||
-rw-r--r-- | sc/qa/unit/subsequent_filters-test.cxx | 19 |
4 files changed, 34 insertions, 4 deletions
diff --git a/sc/qa/unit/data/ods/keep-preview-missing-obj-link.ods b/sc/qa/unit/data/ods/keep-preview-missing-obj-link.ods Binary files differnew file mode 100644 index 000000000000..e7b15fd7688a --- /dev/null +++ b/sc/qa/unit/data/ods/keep-preview-missing-obj-link.ods diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx index e2cad71da65a..3577dcc7d50a 100644 --- a/sc/qa/unit/helper/qahelper.cxx +++ b/sc/qa/unit/helper/qahelper.cxx @@ -280,7 +280,7 @@ void testFormats(ScBootstrapFixture* pTest, ScDocument* pDoc, sal_Int32 nFormat) CPPUNIT_ASSERT_EQUAL(ScRangeList(ScRange(1,1,2,3,1,2)), rRange3); } -const SdrOle2Obj* getSingleChartObject(ScDocument& rDoc, sal_uInt16 nPage) +const SdrOle2Obj* getSingleOleObject(ScDocument& rDoc, sal_uInt16 nPage) { // Retrieve the chart object instance from the 2nd page (for the 2nd sheet). ScDrawLayer* pDrawLayer = rDoc.GetDrawLayer(); @@ -316,14 +316,23 @@ const SdrOle2Obj* getSingleChartObject(ScDocument& rDoc, sal_uInt16 nPage) return nullptr; } - const SdrOle2Obj& rOleObj = static_cast<const SdrOle2Obj&>(*pObj); - if (!rOleObj.IsChart()) + return static_cast<const SdrOle2Obj*>(pObj); +} + +const SdrOle2Obj* getSingleChartObject(ScDocument& rDoc, sal_uInt16 nPage) +{ + const SdrOle2Obj* pObj = getSingleOleObject(rDoc, nPage); + + if (!pObj) + return pObj; + + if (!pObj->IsChart()) { cout << "This should be a chart object." << endl; return nullptr; } - return &rOleObj; + return pObj; } std::vector<OUString> getChartRangeRepresentations(const SdrOle2Obj& rChartObj) diff --git a/sc/qa/unit/helper/qahelper.hxx b/sc/qa/unit/helper/qahelper.hxx index 1b8808dcdf97..c218c3da8e86 100644 --- a/sc/qa/unit/helper/qahelper.hxx +++ b/sc/qa/unit/helper/qahelper.hxx @@ -129,6 +129,8 @@ SCQAHELPER_DLLPUBLIC void testFile(const OUString& aFileName, ScDocument& rDoc, //need own handler because conditional formatting strings must be generated SCQAHELPER_DLLPUBLIC void testCondFile(const OUString& aFileName, ScDocument* pDoc, SCTAB nTab); +SCQAHELPER_DLLPUBLIC const SdrOle2Obj* getSingleOleObject(ScDocument& rDoc, sal_uInt16 nPage); + SCQAHELPER_DLLPUBLIC const SdrOle2Obj* getSingleChartObject(ScDocument& rDoc, sal_uInt16 nPage); SCQAHELPER_DLLPUBLIC std::vector<OUString> getChartRangeRepresentations(const SdrOle2Obj& rChartObj); diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx index 83a803f71374..2090dc4e6b0f 100644 --- a/sc/qa/unit/subsequent_filters-test.cxx +++ b/sc/qa/unit/subsequent_filters-test.cxx @@ -248,6 +248,7 @@ public: void testHiddenRowsColumnsXLSXML(); void testColumnWidthRowHeightXLSXML(); void testTdf62268(); + void testPreviewMissingObjLink(); CPPUNIT_TEST_SUITE(ScFiltersTest); CPPUNIT_TEST(testBooleanFormatXLSX); @@ -382,6 +383,7 @@ public: CPPUNIT_TEST(testColumnWidthRowHeightXLSXML); CPPUNIT_TEST(testCondFormatFormulaListenerXLSX); CPPUNIT_TEST(testTdf62268); + CPPUNIT_TEST(testPreviewMissingObjLink); CPPUNIT_TEST_SUITE_END(); @@ -4114,6 +4116,23 @@ void ScFiltersTest::testTdf62268() xDocSh->DoClose(); } +void ScFiltersTest::testPreviewMissingObjLink() +{ + ScDocShellRef xDocSh = loadDoc("keep-preview-missing-obj-link.", FORMAT_ODS); + CPPUNIT_ASSERT_MESSAGE("Failed to load keep-preview-missing-obj-link.ods.", xDocSh.is()); + + ScDocument& rDoc = xDocSh->GetDocument(); + + // Retrieve the ole object + const SdrOle2Obj* pOleObj = getSingleOleObject(rDoc, 0); + CPPUNIT_ASSERT_MESSAGE("Failed to retrieve an ole object from the 2nd sheet.", pOleObj); + + const Graphic* pGraphic = pOleObj->GetGraphic(); + CPPUNIT_ASSERT_MESSAGE("the ole object links to a missing file, but we should retain its preview", pGraphic); + + xDocSh->DoClose(); +} + ScFiltersTest::ScFiltersTest() : ScBootstrapFixture( "sc/qa/unit/data" ) { |