forked from amazingfate/loongoffice
Nowadays, MS Paint is optional component distributed through MS Store (https://www.microsoft.com/store/productId/9PCFS5B6T72H); it may be absent on some systems, resulting in tests relying on it failing. [build CUT] embeddedobj_msole [_RUN_____] testSaveOnThread::TestBody warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olevisual.cxx:207: Loaded object has no cached size! warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olevisual.cxx:232: OleEmbeddedObject::getVisualAreaSize: GetExtent() failed: com.sun.star.embed.UnreachableStateException message: "Class not registered Bitmap Image at C:/lo/core/embeddedobj/source/msole/olecomponent.cxx:904" context: class OleComponent warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olecomponent.cxx:1142: OleComponent::GetCachedExtent: GetExtent() failed warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olevisual.cxx:257: OleEmbeddedObject::getVisualAreaSize: GetCachedExtent() failed: com.sun.star.lang.IllegalArgumentException message: "at C:/lo/core/embeddedobj/source/msole/olecomponent.cxx:1143" ArgumentPosition: 0 warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olecomponent.cxx:1160: OleComponent::GetRecommendedExtent: GetExtent() failed warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olevisual.cxx:271: OleEmbeddedObject::getVisualAreaSize: GetRecommendedExtent() failed: com.sun.star.lang.IllegalArgumentException message: "at C:/lo/core/embeddedobj/source/msole/olecomponent.cxx:1161" ArgumentPosition: 0 warn:svtools.misc:123152:104988:svtools/source/misc/embedhlp.cxx:554: EmbeddedObjectRef::GetSize: no visual area size warn:svtools.misc:123152:104988:svtools/source/misc/embedhlp.cxx:573: EmbeddedObjectRef::GetSize: empty size, defaulting to 5x5cm warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olevisual.cxx:207: Loaded object has no cached size! warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olevisual.cxx:232: OleEmbeddedObject::getVisualAreaSize: GetExtent() failed: com.sun.star.embed.UnreachableStateException message: "Class not registered Bitmap Image at C:/lo/core/embeddedobj/source/msole/olecomponent.cxx:904" context: class OleComponent warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olecomponent.cxx:1142: OleComponent::GetCachedExtent: GetExtent() failed warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olevisual.cxx:257: OleEmbeddedObject::getVisualAreaSize: GetCachedExtent() failed: com.sun.star.lang.IllegalArgumentException message: "at C:/lo/core/embeddedobj/source/msole/olecomponent.cxx:1143" ArgumentPosition: 0 warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olecomponent.cxx:1160: OleComponent::GetRecommendedExtent: GetExtent() failed warn:embeddedobj.ole:123152:104988:embeddedobj/source/msole/olevisual.cxx:271: OleEmbeddedObject::getVisualAreaSize: GetRecommendedExtent() failed: com.sun.star.lang.IllegalArgumentException message: "at C:/lo/core/embeddedobj/source/msole/olecomponent.cxx:1161" ArgumentPosition: 0 warn:svtools.misc:123152:104988:svtools/source/misc/embedhlp.cxx:554: EmbeddedObjectRef::GetSize: no visual area size warn:svtools.misc:123152:104988:svtools/source/misc/embedhlp.cxx:573: EmbeddedObjectRef::GetSize: empty size, defaulting to 5x5cm C:/lo/core/test/source/xmltesttools.cxx:171:testSaveOnThread::TestBody equality assertion failed - Expected: 0.1665in - Actual : 1.9685in - In <>, attribute 'visible-area-width' of '//style:graphic-properties' incorrect value. Check the class registration, and exit early if needed. It is unclear if we should do something specific with MS Paint objects on Windows, when MS Paint is absent, as we do on Linux; this is just a quick workaround. Similar checks might be needed in other tests. Change-Id: I4d99bc3b13d84da53bdb5aa6259083a68ccc8871 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160597 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
135 lines
3.9 KiB
C++
135 lines
3.9 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#include <test/unoapixml_test.hxx>
|
|
|
|
#include <com/sun/star/frame/Desktop.hpp>
|
|
#include <com/sun/star/embed/XStorage.hpp>
|
|
#include <com/sun/star/frame/XStorable.hpp>
|
|
#include <com/sun/star/util/XCloseable.hpp>
|
|
|
|
#include <comphelper/embeddedobjectcontainer.hxx>
|
|
#include <comphelper/propertyvalue.hxx>
|
|
#include <comphelper/scopeguard.hxx>
|
|
#include <comphelper/storagehelper.hxx>
|
|
#include <officecfg/Office/Common.hxx>
|
|
#include <unotools/tempfile.hxx>
|
|
#include <osl/thread.hxx>
|
|
#include <vcl/svapp.hxx>
|
|
#include <tools/debug.hxx>
|
|
#include <unotools/ucbstreamhelper.hxx>
|
|
#include <vcl/outdev.hxx>
|
|
|
|
#ifdef _WIN32
|
|
#include <systools/win32/comtools.hxx>
|
|
#endif
|
|
|
|
using namespace ::com::sun::star;
|
|
|
|
namespace
|
|
{
|
|
/// Covers embeddedobj/source/msole/ fixes.
|
|
class Test : public UnoApiXmlTest
|
|
{
|
|
public:
|
|
Test()
|
|
: UnoApiXmlTest("/embeddedobj/qa/cppunit/data/")
|
|
{
|
|
}
|
|
};
|
|
|
|
bool IsPaintClassNotRegistered()
|
|
{
|
|
#ifdef _WIN32
|
|
sal::systools::CoInitializeGuard g(0);
|
|
// Check if MS Paint's {0003000A-0000-0000-C000-000000000046} is registered
|
|
CLSID clsidPaint{ 0x0003000A, 0000, 0000, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } };
|
|
LPOLESTR pProgId = nullptr;
|
|
if (ProgIDFromCLSID(clsidPaint, &pProgId) == REGDB_E_CLASSNOTREG)
|
|
return true;
|
|
CoTaskMemFree(pProgId);
|
|
#endif
|
|
return false;
|
|
}
|
|
}
|
|
|
|
namespace
|
|
{
|
|
class OdtExportThread : public osl::Thread
|
|
{
|
|
uno::Reference<lang::XComponent> mxComponent;
|
|
OUString maURL;
|
|
|
|
public:
|
|
OdtExportThread(const uno::Reference<lang::XComponent>& xComponent, const OUString& rURL);
|
|
virtual void SAL_CALL run() override;
|
|
};
|
|
|
|
OdtExportThread::OdtExportThread(const uno::Reference<lang::XComponent>& xComponent,
|
|
const OUString& rURL)
|
|
: mxComponent(xComponent)
|
|
, maURL(rURL)
|
|
{
|
|
}
|
|
|
|
void OdtExportThread::run()
|
|
{
|
|
uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
|
|
uno::Sequence<beans::PropertyValue> aStoreProperties = {
|
|
comphelper::makePropertyValue("FilterName", OUString("writer8")),
|
|
};
|
|
xStorable->storeToURL(maURL, aStoreProperties);
|
|
}
|
|
}
|
|
|
|
CPPUNIT_TEST_FIXTURE(Test, testSaveOnThread)
|
|
{
|
|
// Given an embedded object which hosts mspaint data:
|
|
if (Application::GetDefaultDevice()->GetDPIX() != 96)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (IsPaintClassNotRegistered())
|
|
return;
|
|
|
|
DBG_TESTSOLARMUTEX();
|
|
OUString aURL = createFileURL(u"reqif-ole2.xhtml");
|
|
uno::Sequence<beans::PropertyValue> aLoadProperties = {
|
|
comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")),
|
|
comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")),
|
|
};
|
|
mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", aLoadProperties);
|
|
|
|
// When saving that document on a thread:
|
|
OdtExportThread aThread(mxComponent, maTempFile.GetURL());
|
|
aThread.create();
|
|
{
|
|
SolarMutexReleaser r;
|
|
while (aThread.isRunning())
|
|
{
|
|
SolarMutexGuard g;
|
|
Application::Reschedule(/*bHandleAllCurrentEvents=*/true);
|
|
}
|
|
}
|
|
|
|
// Then make sure its visible area's width is correct.
|
|
xmlDocUniquePtr pXmlDoc = parseExport("content.xml");
|
|
// 16 pixels, assuming 96 DPI.
|
|
// Without the accompanying fix in place, this test would have failed with:
|
|
// - Expected: 0.1665in
|
|
// - Actual : 1.9685in
|
|
// i.e. we wrote a hardcoded 5cm width, not the real one.
|
|
assertXPath(pXmlDoc, "//style:graphic-properties", "visible-area-width", "0.1665in");
|
|
}
|
|
|
|
CPPUNIT_PLUGIN_IMPLEMENT();
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|