Files
libreoffice/dbaccess/qa/extras/dialog-save.cxx

122 lines
4.7 KiB
C++
Raw Normal View History

/* -*- 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 <sal/config.h>
#include <test/bootstrapfixture.hxx>
#include <test/unoapi_test.hxx>
#include <rtl/strbuf.hxx>
#include <osl/file.hxx>
#include <com/sun/star/frame/Desktop.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/frame/XStorable.hpp>
#include <com/sun/star/document/XEmbeddedScripts.hpp>
#include <com/sun/star/script/XStorageBasedLibraryContainer.hpp>
#include <com/sun/star/script/XLibraryContainer.hpp>
#include <com/sun/star/util/XModifiable.hpp>
#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
#include <com/sun/star/io/XStream.hpp>
#include <com/sun/star/io/XInputStream.hpp>
#include <sfx2/app.hxx>
#include <sfx2/docfilt.hxx>
#include <sfx2/docfile.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/sfxmodelfactory.hxx>
#include <svl/intitem.hxx>
#include <basic/sbxdef.hxx>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
class DialogSaveTest : public UnoApiTest
{
public:
DialogSaveTest();
void test();
CPPUNIT_TEST_SUITE(DialogSaveTest);
// Should we disable this test on MOX and WNT?
// #if !defined(MACOSX) && !defined(_WIN32)
CPPUNIT_TEST(test);
// #endif
CPPUNIT_TEST_SUITE_END();
};
DialogSaveTest::DialogSaveTest()
: UnoApiTest("/dbaccess/qa/extras/testdocuments")
{
}
void DialogSaveTest::test()
{
Prevent SolarMutex deadlock in unit test Seen once a deadlock between d 12 (Thread 0x2af5a4c8a700 (LWP 7618)): > #0 0x00002af58ac97ddd in __lll_lock_wait () from /lib64/libpthread.so.0 > #1 0x00002af58ac93bbc in _L_lock_839 () from /lib64/libpthread.so.0 > #2 0x00002af58ac93ad9 in pthread_mutex_lock () from /lib64/libpthread.so.0 > #3 0x00002af589e2383a in osl_acquireMutex (pMutex=0x9329b0) at sal/osl/unx/mutex.c:104 > #4 0x00002af598d577ec in vcl::SolarMutexObject::acquire (this=0x8dd120) at vcl/source/app/solarmutex.cxx:35 > #5 0x00002af599305c82 in SalYieldMutex::acquire (this=0x8dd120) at vcl/generic/app/geninst.cxx:49 > #6 0x00002af59e9bfb7b in framework::LockHelper::acquireReadAccess (this=0x2af5a2406088) at framework/source/fwi/threadhelp/lockhelper.cxx:150 > #7 0x00002af59ca29ccf in framework::ReadGuard::lock (this=0x2af5a4c894c0) at framework/inc/threadhelp/readguard.hxx:113 > #8 0x00002af59ca29c81 in framework::ReadGuard::ReadGuard (this=0x2af5a4c894c0, rLock=...) at framework/inc/threadhelp/readguard.hxx:79 > #9 0x00002af59cb52fce in (anonymous namespace)::Frame::getContainerWindow (this=0x2af5a2406010) at framework/source/services/frame.cxx:985 > #10 0x00002af5a32582d2 in tdoc_ucp::OfficeDocumentsManager::isWithoutOrInTopLevelFrame (this=0x2af5a24a1f18, xModel=uno::Reference to (dbaccess::ODatabaseDocument *) 0x2af5a4edc5a8) at ucb/source/ucp/tdoc/tdoc_docmgr.cxx:626 > #11 0x00002af5a325870f in tdoc_ucp::OfficeDocumentsManager::isOfficeDocument (this=0x2af5a24a1f18, xDoc=uno::Reference to (dbaccess::ODatabaseDocument *) 0x2af5a4edc558) at ucb/source/ucp/tdoc/tdoc_docmgr.cxx:697 > #12 0x00002af5a325651e in tdoc_ucp::OfficeDocumentsManager::notifyEvent (this=0x2af5a24a1f18, Event=...) at ucb/source/ucp/tdoc/tdoc_docmgr.cxx:305 > #13 0x00002af594251195 in cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XEventListener, com::sun::star::document::EventObject>::operator() (this=0x2af5a4c89b20, listener=uno::Reference to (tdoc_ucp::OfficeDocumentsManager *) 0x2af5a24a1f40) at include/cppuhelper/interfacecontainer.h:262 > #14 0x00002af59425023e in cppu::OInterfaceContainerHelper::forEach<com::sun::star::document::XEventListener, cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XEventListener, com::sun::star::document::EventObject> > (this=0x2af5a24a36a0, func=...) at include/cppuhelper/interfacecontainer.h:276 > #15 0x00002af59424f4da in cppu::OInterfaceContainerHelper::notifyEach<com::sun::star::document::XEventListener, com::sun::star::document::EventObject> (this=0x2af5a24a36a0, NotificationMethod=&virtual com::sun::star::document::XEventListener::notifyEvent(com::sun::star::document::EventObject const&), Event=...) at include/cppuhelper/interfacecontainer.h:289 > #16 0x00002af59424d864 in (anonymous namespace)::SfxGlobalEvents_Impl::implts_notifyListener (this=0x2af5a24a3628, aEvent=...) at sfx2/source/notify/globalevents.cxx:505 > #17 0x00002af59424c543 in (anonymous namespace)::SfxGlobalEvents_Impl::documentEventOccured (this=0x2af5a24a3628, _Event=...) at sfx2/source/notify/globalevents.cxx:315 > #18 0x00002af59016a5a5 in cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XDocumentEventListener, com::sun::star::document::DocumentEvent>::operator() (this=0x2af5a4c89c90, listener=uno::Reference to ((anonymous namespace)::SfxGlobalEvents_Impl *) 0x2af5a24a3678) at include/cppuhelper/interfacecontainer.h:262 > #19 0x00002af59016a35e in cppu::OInterfaceContainerHelper::forEach<com::sun::star::document::XDocumentEventListener, cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XDocumentEventListener, com::sun::star::document::DocumentEvent> > (this=0x11c0378, func=...) at include/cppuhelper/interfacecontainer.h:276 > #20 0x00002af590169ed6 in cppu::OInterfaceContainerHelper::notifyEach<com::sun::star::document::XDocumentEventListener, com::sun::star::document::DocumentEvent> (this=0x11c0378, NotificationMethod=&virtual com::sun::star::document::XDocumentEventListener::documentEventOccured(com::sun::star::document::DocumentEvent const&), Event=...) at include/cppuhelper/interfacecontainer.h:289 > #21 0x00002af5901690ed in dbaccess::DocumentEventNotifier_Impl::impl_notifyEvent_nothrow (this=0x11c0330, _rEvent=...) at dbaccess/source/core/dataaccess/documenteventnotifier.cxx:200 > #22 0x00002af5901693fa in dbaccess::DocumentEventNotifier_Impl::processEvent (this=0x11c0330, _rEvent=...) at dbaccess/source/core/dataaccess/documenteventnotifier.cxx:231 > #23 0x00002af58cba5de9 in comphelper::AsyncEventNotifier::execute (this=0x128c4e0) at comphelper/source/misc/asyncnotification.cxx:221 > #24 0x00002af58bcfe9c4 in salhelper::Thread::run (this=0x128c4e0) at salhelper/source/thread.cxx:40 > #25 0x00002af58bcfed8d in osl::threadFunc (param=0x128c4f0) at include/osl/thread.hxx:187 > #26 0x00002af589e2e2e7 in osl_thread_start_Impl (pData=0x128db40) at sal/osl/unx/thread.c:236 > #27 0x00002af58ac91c53 in start_thread () from /lib64/libpthread.so.0 > #28 0x00002af58a9bedbd in clone () from /lib64/libc.so.6 and > Thread 1 (Thread 0x2af589931980 (LWP 7598)): > #0 0x00002af58ac95565 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 > #1 0x00002af589e67146 in osl_waitCondition (Condition=0x11a22a0, pTimeout=0x0) at sal/osl/unx/conditn.cxx:275 > #2 0x00002af59e9c0866 in osl::Condition::wait (this=0x2af5a24060d0, pTimeout=0x0) at include/osl/conditn.hxx:82 > #3 0x00002af59e9c0bf5 in framework::Gate::wait (this=0x2af5a24060c0, pTimeOut=0x0) at framework/inc/threadhelp/gate.hxx:197 > #4 0x00002af59e9c0041 in framework::TransactionManager::setWorkingMode (this=0x2af5a24060b0, eMode=framework::E_BEFORECLOSE) at framework/source/fwi/threadhelp/transactionmanager.cxx:119 > #5 0x00002af59cb56c8f in (anonymous namespace)::Frame::dispose (this=0x2af5a2406010) at framework/source/services/frame.cxx:2229 > #6 0x00002af59cb55bec in (anonymous namespace)::Frame::close (this=0x2af5a2406010, bDeliverOwnership=0 '\000') at framework/source/services/frame.cxx:2002 > #7 0x00002af59010f9cc in dbaccess::ODatabaseDocument::impl_closeControllerFrames_nolck_throw (this=0x2af5a4edc538, _bDeliverOwnership=0 '\000') at dbaccess/source/core/dataaccess/databasedocument.cxx:1441 > #8 0x00002af59010fe24 in dbaccess::ODatabaseDocument::close (this=0x2af5a4edc538, _bDeliverOwnership=0 '\000') at dbaccess/source/core/dataaccess/databasedocument.cxx:1498 > #9 0x00002af58f6c59c6 in DialogSaveTest::test (this=0x922c10) at dbaccess/qa/extras/dialog-save.cxx:104 > #10 0x00002af58f6cc8d4 in CppUnit::TestCaller<DialogSaveTest>::runTest (this=0x879cc0) at workdir/UnpackedTarball/cppunit/include/cppunit/TestCaller.h:166 > #11 0x00002af589bb41b4 in CppUnit::TestCaseMethodFunctor::operator() (this=0x7fff58142f30) at TestCase.cpp:32 > #12 0x00002af58c8ab9e3 in (anonymous namespace)::Prot::protect (this=0x879da0, functor=...) at unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx:88 > #13 0x00002af589bac2ef in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x922aa0) at ProtectorChain.cpp:20 > #14 0x00002af58b4b5536 in (anonymous namespace)::Prot::protect (this=0x879dc0, functor=..., context=...) at unotest/source/cpp/unoexceptionprotector/unoexceptionprotector.cxx:64 > #15 0x00002af589bac2ef in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x922ca0) at ProtectorChain.cpp:20 > #16 0x00002af589b9dc64 in CppUnit::DefaultProtector::protect (this=0x8756a0, functor=..., context=...) at DefaultProtector.cpp:15 > #17 0x00002af589bac2ef in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x922c70) at ProtectorChain.cpp:20 > #18 0x00002af589bac184 in CppUnit::ProtectorChain::protect (this=0x8753c0, functor=..., context=...) at ProtectorChain.cpp:77 > #19 0x00002af589bc339a in CppUnit::TestResult::protect (this=0x7fff58143450, functor=..., test=0x879cc0, shortDescription="") at TestResult.cpp:181 > #20 0x00002af589bb3c84 in CppUnit::TestCase::run (this=0x879cc0, result=0x7fff58143450) at TestCase.cpp:92 > #21 0x00002af589bb4a20 in CppUnit::TestComposite::doRunChildTests (this=0x922b50, controller=0x7fff58143450) at TestComposite.cpp:64 > #22 0x00002af589bb48aa in CppUnit::TestComposite::run (this=0x922b50, result=0x7fff58143450) at TestComposite.cpp:23 > #23 0x00002af589bb4a20 in CppUnit::TestComposite::doRunChildTests (this=0x922ad0, controller=0x7fff58143450) at TestComposite.cpp:64 > #24 0x00002af589bb48aa in CppUnit::TestComposite::run (this=0x922ad0, result=0x7fff58143450) at TestComposite.cpp:23 > #25 0x00002af589bca586 in CppUnit::TestRunner::WrappingSuite::run (this=0x879d30, result=0x7fff58143450) at TestRunner.cpp:47 > #26 0x00002af589bc30a4 in CppUnit::TestResult::runTest (this=0x7fff58143450, test=0x879d30) at TestResult.cpp:148 > #27 0x00002af589bca7e4 in CppUnit::TestRunner::run (this=0x7fff581432e0, controller=..., testPath="") at TestRunner.cpp:96 > #28 0x0000000000403ecf in (anonymous namespace)::ProtectedFixtureFunctor::run (this=0x7fff581433a0) at sal/cppunittester/cppunittester.cxx:150 > #29 0x0000000000404561 in sal_main () at sal/cppunittester/cppunittester.cxx:242 > #30 0x00000000004041a9 in main (argc=18, argv=0x7fff581436a8) at sal/cppunittester/cppunittester.cxx:166 and indeed UnoApiTest::setUp -> test::BootstrapFixture::setUp -> test_init_impl -> InitVCL -> CreateSalInstance -> SalGenericInstance::AcquireYieldMutex causes all such UnoApiTests to be run with the SolarMutex locked. This reverts acdfb2593564ea23d4bbb999856922568d7ab2c3 "dbaccess: disable hanging close() for now." Change-Id: Ifac49da2c55b0b27b780a348074f69de86967aa1
2014-02-03 12:04:02 +01:00
// UnoApiTest::setUp (via InitVCL) puts each test under a locked SolarMutex,
// but at least the below xDocCloseable->close call could lead to a deadlock
// then, and it looks like none of the code here requires the SolarMutex to
// be locked anyway:
SolarMutexReleaser rel;
const OUString sStandard("Standard");
const OUString aFileName(m_directories.getURLFromWorkdir("CppunitTest/testDialogSave.odb"));
{
uno::Reference< lang::XComponent > xComponent = loadFromDesktop(aFileName);
CPPUNIT_ASSERT(xComponent.is());
uno::Reference< frame::XStorable > xDocStorable(xComponent, UNO_QUERY_THROW);
uno::Reference< document::XEmbeddedScripts > xDocScr(xComponent, UNO_QUERY_THROW);
uno::Reference< script::XStorageBasedLibraryContainer > xStorBasLib(xDocScr->getBasicLibraries());
CPPUNIT_ASSERT(xStorBasLib.is());
uno::Reference< script::XLibraryContainer > xBasLib(xStorBasLib, UNO_QUERY_THROW);
uno::Reference< script::XStorageBasedLibraryContainer > xStorDlgLib(xDocScr->getDialogLibraries());
CPPUNIT_ASSERT(xStorDlgLib.is());
uno::Reference< script::XLibraryContainer > xDlgLib(xStorDlgLib, UNO_QUERY_THROW);
xBasLib->loadLibrary(sStandard);
CPPUNIT_ASSERT(xBasLib->isLibraryLoaded(sStandard));
// the whole point of this test is to test the "save" operation
// when the Basic library is loaded, but not the Dialog library
CPPUNIT_ASSERT(!xDlgLib->isLibraryLoaded(sStandard));
// make some change to enable a save
// uno::Reference< document::XDocumentPropertiesSupplier > xDocPropSuppl(xComponent, UNO_QUERY_THROW);
// uno::Reference< document::XDocumentPropertiesSupplier > xDocProps(xDocPropSuppl->getDocumentProperties());
// CPPUNIT_ASSERT(xDocProps.is());
// xDocProps.setTitle(xDocProps.getTitle() + " suffix");
uno::Reference< util::XModifiable > xDocMod(xComponent, UNO_QUERY_THROW);
xDocMod->setModified(true);
// now save; the code path to exercise in this test is the "store to same location"
// do *not* change to store(As|To|URL)!
xDocStorable->store();
// close
uno::Reference< util::XCloseable > xDocCloseable(xComponent, UNO_QUERY_THROW);
Prevent SolarMutex deadlock in unit test Seen once a deadlock between d 12 (Thread 0x2af5a4c8a700 (LWP 7618)): > #0 0x00002af58ac97ddd in __lll_lock_wait () from /lib64/libpthread.so.0 > #1 0x00002af58ac93bbc in _L_lock_839 () from /lib64/libpthread.so.0 > #2 0x00002af58ac93ad9 in pthread_mutex_lock () from /lib64/libpthread.so.0 > #3 0x00002af589e2383a in osl_acquireMutex (pMutex=0x9329b0) at sal/osl/unx/mutex.c:104 > #4 0x00002af598d577ec in vcl::SolarMutexObject::acquire (this=0x8dd120) at vcl/source/app/solarmutex.cxx:35 > #5 0x00002af599305c82 in SalYieldMutex::acquire (this=0x8dd120) at vcl/generic/app/geninst.cxx:49 > #6 0x00002af59e9bfb7b in framework::LockHelper::acquireReadAccess (this=0x2af5a2406088) at framework/source/fwi/threadhelp/lockhelper.cxx:150 > #7 0x00002af59ca29ccf in framework::ReadGuard::lock (this=0x2af5a4c894c0) at framework/inc/threadhelp/readguard.hxx:113 > #8 0x00002af59ca29c81 in framework::ReadGuard::ReadGuard (this=0x2af5a4c894c0, rLock=...) at framework/inc/threadhelp/readguard.hxx:79 > #9 0x00002af59cb52fce in (anonymous namespace)::Frame::getContainerWindow (this=0x2af5a2406010) at framework/source/services/frame.cxx:985 > #10 0x00002af5a32582d2 in tdoc_ucp::OfficeDocumentsManager::isWithoutOrInTopLevelFrame (this=0x2af5a24a1f18, xModel=uno::Reference to (dbaccess::ODatabaseDocument *) 0x2af5a4edc5a8) at ucb/source/ucp/tdoc/tdoc_docmgr.cxx:626 > #11 0x00002af5a325870f in tdoc_ucp::OfficeDocumentsManager::isOfficeDocument (this=0x2af5a24a1f18, xDoc=uno::Reference to (dbaccess::ODatabaseDocument *) 0x2af5a4edc558) at ucb/source/ucp/tdoc/tdoc_docmgr.cxx:697 > #12 0x00002af5a325651e in tdoc_ucp::OfficeDocumentsManager::notifyEvent (this=0x2af5a24a1f18, Event=...) at ucb/source/ucp/tdoc/tdoc_docmgr.cxx:305 > #13 0x00002af594251195 in cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XEventListener, com::sun::star::document::EventObject>::operator() (this=0x2af5a4c89b20, listener=uno::Reference to (tdoc_ucp::OfficeDocumentsManager *) 0x2af5a24a1f40) at include/cppuhelper/interfacecontainer.h:262 > #14 0x00002af59425023e in cppu::OInterfaceContainerHelper::forEach<com::sun::star::document::XEventListener, cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XEventListener, com::sun::star::document::EventObject> > (this=0x2af5a24a36a0, func=...) at include/cppuhelper/interfacecontainer.h:276 > #15 0x00002af59424f4da in cppu::OInterfaceContainerHelper::notifyEach<com::sun::star::document::XEventListener, com::sun::star::document::EventObject> (this=0x2af5a24a36a0, NotificationMethod=&virtual com::sun::star::document::XEventListener::notifyEvent(com::sun::star::document::EventObject const&), Event=...) at include/cppuhelper/interfacecontainer.h:289 > #16 0x00002af59424d864 in (anonymous namespace)::SfxGlobalEvents_Impl::implts_notifyListener (this=0x2af5a24a3628, aEvent=...) at sfx2/source/notify/globalevents.cxx:505 > #17 0x00002af59424c543 in (anonymous namespace)::SfxGlobalEvents_Impl::documentEventOccured (this=0x2af5a24a3628, _Event=...) at sfx2/source/notify/globalevents.cxx:315 > #18 0x00002af59016a5a5 in cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XDocumentEventListener, com::sun::star::document::DocumentEvent>::operator() (this=0x2af5a4c89c90, listener=uno::Reference to ((anonymous namespace)::SfxGlobalEvents_Impl *) 0x2af5a24a3678) at include/cppuhelper/interfacecontainer.h:262 > #19 0x00002af59016a35e in cppu::OInterfaceContainerHelper::forEach<com::sun::star::document::XDocumentEventListener, cppu::OInterfaceContainerHelper::NotifySingleListener<com::sun::star::document::XDocumentEventListener, com::sun::star::document::DocumentEvent> > (this=0x11c0378, func=...) at include/cppuhelper/interfacecontainer.h:276 > #20 0x00002af590169ed6 in cppu::OInterfaceContainerHelper::notifyEach<com::sun::star::document::XDocumentEventListener, com::sun::star::document::DocumentEvent> (this=0x11c0378, NotificationMethod=&virtual com::sun::star::document::XDocumentEventListener::documentEventOccured(com::sun::star::document::DocumentEvent const&), Event=...) at include/cppuhelper/interfacecontainer.h:289 > #21 0x00002af5901690ed in dbaccess::DocumentEventNotifier_Impl::impl_notifyEvent_nothrow (this=0x11c0330, _rEvent=...) at dbaccess/source/core/dataaccess/documenteventnotifier.cxx:200 > #22 0x00002af5901693fa in dbaccess::DocumentEventNotifier_Impl::processEvent (this=0x11c0330, _rEvent=...) at dbaccess/source/core/dataaccess/documenteventnotifier.cxx:231 > #23 0x00002af58cba5de9 in comphelper::AsyncEventNotifier::execute (this=0x128c4e0) at comphelper/source/misc/asyncnotification.cxx:221 > #24 0x00002af58bcfe9c4 in salhelper::Thread::run (this=0x128c4e0) at salhelper/source/thread.cxx:40 > #25 0x00002af58bcfed8d in osl::threadFunc (param=0x128c4f0) at include/osl/thread.hxx:187 > #26 0x00002af589e2e2e7 in osl_thread_start_Impl (pData=0x128db40) at sal/osl/unx/thread.c:236 > #27 0x00002af58ac91c53 in start_thread () from /lib64/libpthread.so.0 > #28 0x00002af58a9bedbd in clone () from /lib64/libc.so.6 and > Thread 1 (Thread 0x2af589931980 (LWP 7598)): > #0 0x00002af58ac95565 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 > #1 0x00002af589e67146 in osl_waitCondition (Condition=0x11a22a0, pTimeout=0x0) at sal/osl/unx/conditn.cxx:275 > #2 0x00002af59e9c0866 in osl::Condition::wait (this=0x2af5a24060d0, pTimeout=0x0) at include/osl/conditn.hxx:82 > #3 0x00002af59e9c0bf5 in framework::Gate::wait (this=0x2af5a24060c0, pTimeOut=0x0) at framework/inc/threadhelp/gate.hxx:197 > #4 0x00002af59e9c0041 in framework::TransactionManager::setWorkingMode (this=0x2af5a24060b0, eMode=framework::E_BEFORECLOSE) at framework/source/fwi/threadhelp/transactionmanager.cxx:119 > #5 0x00002af59cb56c8f in (anonymous namespace)::Frame::dispose (this=0x2af5a2406010) at framework/source/services/frame.cxx:2229 > #6 0x00002af59cb55bec in (anonymous namespace)::Frame::close (this=0x2af5a2406010, bDeliverOwnership=0 '\000') at framework/source/services/frame.cxx:2002 > #7 0x00002af59010f9cc in dbaccess::ODatabaseDocument::impl_closeControllerFrames_nolck_throw (this=0x2af5a4edc538, _bDeliverOwnership=0 '\000') at dbaccess/source/core/dataaccess/databasedocument.cxx:1441 > #8 0x00002af59010fe24 in dbaccess::ODatabaseDocument::close (this=0x2af5a4edc538, _bDeliverOwnership=0 '\000') at dbaccess/source/core/dataaccess/databasedocument.cxx:1498 > #9 0x00002af58f6c59c6 in DialogSaveTest::test (this=0x922c10) at dbaccess/qa/extras/dialog-save.cxx:104 > #10 0x00002af58f6cc8d4 in CppUnit::TestCaller<DialogSaveTest>::runTest (this=0x879cc0) at workdir/UnpackedTarball/cppunit/include/cppunit/TestCaller.h:166 > #11 0x00002af589bb41b4 in CppUnit::TestCaseMethodFunctor::operator() (this=0x7fff58142f30) at TestCase.cpp:32 > #12 0x00002af58c8ab9e3 in (anonymous namespace)::Prot::protect (this=0x879da0, functor=...) at unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx:88 > #13 0x00002af589bac2ef in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x922aa0) at ProtectorChain.cpp:20 > #14 0x00002af58b4b5536 in (anonymous namespace)::Prot::protect (this=0x879dc0, functor=..., context=...) at unotest/source/cpp/unoexceptionprotector/unoexceptionprotector.cxx:64 > #15 0x00002af589bac2ef in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x922ca0) at ProtectorChain.cpp:20 > #16 0x00002af589b9dc64 in CppUnit::DefaultProtector::protect (this=0x8756a0, functor=..., context=...) at DefaultProtector.cpp:15 > #17 0x00002af589bac2ef in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x922c70) at ProtectorChain.cpp:20 > #18 0x00002af589bac184 in CppUnit::ProtectorChain::protect (this=0x8753c0, functor=..., context=...) at ProtectorChain.cpp:77 > #19 0x00002af589bc339a in CppUnit::TestResult::protect (this=0x7fff58143450, functor=..., test=0x879cc0, shortDescription="") at TestResult.cpp:181 > #20 0x00002af589bb3c84 in CppUnit::TestCase::run (this=0x879cc0, result=0x7fff58143450) at TestCase.cpp:92 > #21 0x00002af589bb4a20 in CppUnit::TestComposite::doRunChildTests (this=0x922b50, controller=0x7fff58143450) at TestComposite.cpp:64 > #22 0x00002af589bb48aa in CppUnit::TestComposite::run (this=0x922b50, result=0x7fff58143450) at TestComposite.cpp:23 > #23 0x00002af589bb4a20 in CppUnit::TestComposite::doRunChildTests (this=0x922ad0, controller=0x7fff58143450) at TestComposite.cpp:64 > #24 0x00002af589bb48aa in CppUnit::TestComposite::run (this=0x922ad0, result=0x7fff58143450) at TestComposite.cpp:23 > #25 0x00002af589bca586 in CppUnit::TestRunner::WrappingSuite::run (this=0x879d30, result=0x7fff58143450) at TestRunner.cpp:47 > #26 0x00002af589bc30a4 in CppUnit::TestResult::runTest (this=0x7fff58143450, test=0x879d30) at TestResult.cpp:148 > #27 0x00002af589bca7e4 in CppUnit::TestRunner::run (this=0x7fff581432e0, controller=..., testPath="") at TestRunner.cpp:96 > #28 0x0000000000403ecf in (anonymous namespace)::ProtectedFixtureFunctor::run (this=0x7fff581433a0) at sal/cppunittester/cppunittester.cxx:150 > #29 0x0000000000404561 in sal_main () at sal/cppunittester/cppunittester.cxx:242 > #30 0x00000000004041a9 in main (argc=18, argv=0x7fff581436a8) at sal/cppunittester/cppunittester.cxx:166 and indeed UnoApiTest::setUp -> test::BootstrapFixture::setUp -> test_init_impl -> InitVCL -> CreateSalInstance -> SalGenericInstance::AcquireYieldMutex causes all such UnoApiTests to be run with the SolarMutex locked. This reverts acdfb2593564ea23d4bbb999856922568d7ab2c3 "dbaccess: disable hanging close() for now." Change-Id: Ifac49da2c55b0b27b780a348074f69de86967aa1
2014-02-03 12:04:02 +01:00
xDocCloseable->close(false);
// All our uno::References are (should?) be invalid now -> let them go out of scope
}
{
uno::Sequence<uno::Any> args(1);
args[0] <<= aFileName;
Reference<container::XHierarchicalNameAccess> xHNA(getMultiServiceFactory()->createInstanceWithArguments("com.sun.star.packages.Package", args), UNO_QUERY_THROW);
Reference< beans::XPropertySet > xPS(xHNA->getByHierarchicalName("Dialogs/Standard/Dialog1.xml"), UNO_QUERY_THROW);
sal_Int64 nSize = 0;
CPPUNIT_ASSERT(xPS->getPropertyValue("Size") >>= nSize);
CPPUNIT_ASSERT(nSize != 0);
}
}
CPPUNIT_TEST_SUITE_REGISTRATION(DialogSaveTest);
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */