summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/unotest/macros_test.hxx3
-rw-r--r--sw/qa/extras/globalfilter/data/skipimages.docbin0 -> 19968 bytes
-rw-r--r--sw/qa/extras/globalfilter/data/skipimages.docxbin0 -> 10925 bytes
-rw-r--r--sw/qa/extras/globalfilter/globalfilter.cxx72
-rw-r--r--unotest/source/cpp/macros_test.cxx15
5 files changed, 88 insertions, 2 deletions
diff --git a/include/unotest/macros_test.hxx b/include/unotest/macros_test.hxx
index 12108baa721b..ae006fc3570d 100644
--- a/include/unotest/macros_test.hxx
+++ b/include/unotest/macros_test.hxx
@@ -27,7 +27,8 @@ namespace unotest {
class OOO_DLLPUBLIC_UNOTEST MacrosTest
{
public:
- css::uno::Reference< css::lang::XComponent > loadFromDesktop(const OUString& rURL, const OUString& rDocService = OUString() );
+ css::uno::Reference< css::lang::XComponent > loadFromDesktop(const OUString& rURL, const OUString& rDocService = OUString(),
+ css::uno::Sequence<css::beans::PropertyValue> extra_args = css::uno::Sequence<css::beans::PropertyValue>() );
protected:
css::uno::Reference< css::frame::XDesktop2> mxDesktop;
diff --git a/sw/qa/extras/globalfilter/data/skipimages.doc b/sw/qa/extras/globalfilter/data/skipimages.doc
new file mode 100644
index 000000000000..3c40599b083a
--- /dev/null
+++ b/sw/qa/extras/globalfilter/data/skipimages.doc
Binary files differ
diff --git a/sw/qa/extras/globalfilter/data/skipimages.docx b/sw/qa/extras/globalfilter/data/skipimages.docx
new file mode 100644
index 000000000000..cc6a4f4ceab4
--- /dev/null
+++ b/sw/qa/extras/globalfilter/data/skipimages.docx
Binary files differ
diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx b/sw/qa/extras/globalfilter/globalfilter.cxx
index c0c51912d1e0..2e95927af8cd 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -33,6 +33,7 @@ public:
void testCharHighlightBody();
void testMSCharBackgroundEditing();
void testCharBackgroundToHighlighting();
+ void testSkipImages();
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testSwappedOutImageExport);
@@ -42,6 +43,7 @@ public:
CPPUNIT_TEST(testCharHighlight);
CPPUNIT_TEST(testMSCharBackgroundEditing);
CPPUNIT_TEST(testCharBackgroundToHighlighting);
+ CPPUNIT_TEST(testSkipImages);
CPPUNIT_TEST_SUITE_END();
};
@@ -653,6 +655,76 @@ void Test::testCharBackgroundToHighlighting()
}
}
+void Test::testSkipImages()
+{
+ // Check how LO skips image loading (but not texts of textboxes and custom shapes)
+ // during DOC and DOCX import, using the "SkipImages" FilterOptions.
+
+ const char* aFilterNames[][2] = {
+ { "/sw/qa/extras/globalfilter/data/skipimages.doc", "" },
+ { "/sw/qa/extras/globalfilter/data/skipimages.doc", "SkipImages" },
+ { "/sw/qa/extras/globalfilter/data/skipimages.docx", "" },
+ { "/sw/qa/extras/globalfilter/data/skipimages.docx", "SkipImages" }
+ };
+
+ // FilterOptions parameter (Value will be set before loadFromDesktop call)
+
+ uno::Sequence<beans::PropertyValue> args(1);
+ args[0].Name = "FilterOptions";
+ args[0].Handle = -1;
+ args[0].State = beans::PropertyState_DIRECT_VALUE;
+
+ for( size_t nFilter = 0; nFilter < SAL_N_ELEMENTS(aFilterNames); ++nFilter )
+ {
+ bool bSkipImages = *(aFilterNames[nFilter][1]) != '\0';
+
+ if (mxComponent.is())
+ mxComponent->dispose();
+
+ args[0].Value <<= OUString::createFromAscii(aFilterNames[nFilter][1]);
+
+ mxComponent = loadFromDesktop(getURLFromSrc(aFilterNames[nFilter][0]), "com.sun.star.text.TextDocument", args);
+
+ // Check shapes (images, textboxes, custom shapes
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
+
+ const OString sFailedMessage = OString("Failed on filter: ") + aFilterNames[nFilter][0] + " - " + aFilterNames[nFilter][1];
+
+ uno::Reference<drawing::XShape> xShape;
+ uno::Reference<graphic::XGraphic> xGraphic;
+ uno::Reference< beans::XPropertySet > XPropSet;
+ uno::Reference<awt::XBitmap> xBitmap;
+
+ bool bHasTextboxText = false;
+ bool bHasCustomShapeText = false;
+ sal_Int32 nImageCount = 0;
+
+ for (int i = 1; i<= xDraws->getCount(); i++)
+ {
+ xShape = getShape(i);
+ XPropSet.set( xShape, uno::UNO_QUERY_THROW );
+ try
+ {
+ XPropSet->getPropertyValue("Graphic") >>= xGraphic;
+ xBitmap.set(xGraphic, uno::UNO_QUERY);
+ if (xBitmap.is()) nImageCount++;
+ }
+ catch (beans::UnknownPropertyException &)
+ {
+ uno::Reference<text::XTextRange> xText(xShape, uno::UNO_QUERY);
+ if (xText->getString().startsWith("Lorem ipsum")) bHasTextboxText = true;
+ if (xText->getString().startsWith("Nam pretium")) bHasCustomShapeText = true;
+ }
+ }
+
+ CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), bHasTextboxText);
+ CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), bHasCustomShapeText);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), static_cast<sal_Int32>(bSkipImages ? 0 : 3), nImageCount );
+ }
+}
+
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/unotest/source/cpp/macros_test.cxx b/unotest/source/cpp/macros_test.cxx
index 44f0d56e5540..02b14ba9f3e3 100644
--- a/unotest/source/cpp/macros_test.cxx
+++ b/unotest/source/cpp/macros_test.cxx
@@ -19,7 +19,7 @@ using namespace css;
namespace unotest {
-uno::Reference<css::lang::XComponent> MacrosTest::loadFromDesktop(const OUString& rURL, const OUString& rDocService)
+uno::Reference<css::lang::XComponent> MacrosTest::loadFromDesktop(const OUString& rURL, const OUString& rDocService, uno::Sequence<beans::PropertyValue> extraArgs)
{
CPPUNIT_ASSERT_MESSAGE("no desktop", mxDesktop.is());
uno::Reference<frame::XComponentLoader> xLoader = uno::Reference<frame::XComponentLoader>(mxDesktop, uno::UNO_QUERY);
@@ -39,6 +39,19 @@ uno::Reference<css::lang::XComponent> MacrosTest::loadFromDesktop(const OUString
args[1].State = beans::PropertyState_DIRECT_VALUE;
}
+ if (extraArgs.getLength() > 0)
+ {
+ sal_Int32 aSize = args.getLength();
+ args.realloc(aSize + extraArgs.getLength());
+ for (int i = 0; i < extraArgs.getLength(); i++)
+ {
+ args[aSize + i].Name = extraArgs[i].Name;
+ args[aSize + i].Handle = extraArgs[i].Handle;
+ args[aSize + i].Value = extraArgs[i].Value;
+ args[aSize + i].State = extraArgs[i].State;
+ }
+ }
+
uno::Reference<lang::XComponent> xComponent = xLoader->loadComponentFromURL(rURL, OUString("_default"), 0, args);
OUString sMessage = "loading failed: " + rURL;
CPPUNIT_ASSERT_MESSAGE(OUStringToOString( sMessage, RTL_TEXTENCODING_UTF8 ).getStr( ), xComponent.is());