Kaydet (Commit) 6ec9e87c authored tarafından László Németh's avatar László Németh

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
üst c5b85b07
......@@ -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;
......
This diff was suppressed by a .gitattributes entry.
......@@ -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();
......
......@@ -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());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment