summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLászló Németh <laszlo.nemeth@collabora.com>2015-03-30 12:24:28 +0200
committerLászló Németh <laszlo.nemeth@collabora.com>2015-03-30 12:32:33 +0200
commit6ec9e87ced60add494f8d397017f8f9ffc65a00a (patch)
tree410d9761e033fa163e9e7167f0b792edd7c23043
parentc5b85b075c1063907dc37e304b0911cd81f5b062 (diff)
Unit tests for SkipImages
SkipImages filter option skips image loading during DOC and DOCX imports, but it keeps the text of textboxes and custom shapes. Change-Id: Ia0ab3b350b9da22d9375787883678cc357a704b3
-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());