diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2014-06-04 08:45:54 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2014-06-04 08:55:12 +0200 |
commit | 369d95931f42267eb2f55e066f58ee859183025d (patch) | |
tree | f6047cebccb31dea56653bb1adfa08f853d09918 /vcl/source | |
parent | 9e13afeaf67b9c07762692cd858de4b577234ab7 (diff) |
DeInitVCL at end of tests
This required some changes to the framework:
* Init-/DeInitVCL is no longer done per individual test in BootstrapFixture, but
once per CppunitTest invocation in a new vclbootstrapprotector (similarly to
the exisiting unobootstrapprotector). CppunitTests that need VCL now need to
declare gb_CppunitTest_use_vcl.
* For things to work properly, the UNO component context needs to be disposed
from within DeInitVCL (cf. Desktop's Application::DeInit called from
DeInitVCL). The easiest solution was to introduce an
Application::setDeInitHook (where the hook is called from DeInitVCL)
specifically for vclbootstrapprotector to call.
* PythonTests don't (yet) call DeInitVCL; they still hook into
BootstrapFixture's original test_init functionality (to call InitVCL), and do
not make use of the vclbootstrapprotector.
Change-Id: I4f3a3c75db30b58c1cd49d81c51db14902ed68b2
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/app/svapp.cxx | 10 | ||||
-rw-r--r-- | vcl/source/app/svmain.cxx | 15 |
2 files changed, 23 insertions, 2 deletions
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx index b27b9c31174e..50cda48010c6 100644 --- a/vcl/source/app/svapp.cxx +++ b/vcl/source/app/svapp.cxx @@ -68,6 +68,7 @@ #include "comphelper/solarmutex.hxx" #include "osl/process.h" +#include <cassert> #include <utility> using namespace ::com::sun::star; @@ -1654,6 +1655,15 @@ Application::createFolderPicker( const Reference< uno::XComponentContext >& xSM return pSVData->mpDefInst->createFolderPicker( xSM ); } +void Application::setDeInitHook(Link const & hook) { + ImplSVData * pSVData = ImplGetSVData(); + assert(!pSVData->maDeInitHook.IsSet()); + pSVData->maDeInitHook = hook; + // Fake this for VCLXToolkit ctor instantiated from + // postprocess/CppunitTest_services.mk: + pSVData->maAppData.mbInAppMain = true; +} + // helper method to allow inline constructor even for pWindow!=NULL case void ImplDelData::AttachToWindow( const Window* pWindow ) { diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx index 25c8f995a0db..0acb009292a5 100644 --- a/vcl/source/app/svmain.cxx +++ b/vcl/source/app/svmain.cxx @@ -17,6 +17,10 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <sal/config.h> + +#include <cassert> + #include "rtl/logfile.hxx" #include <osl/file.hxx> @@ -464,13 +468,20 @@ void DeInitVCL() } } - if( pSVData->mpApp ) + if( pSVData->mpApp || pSVData->maDeInitHook.IsSet() ) { sal_uLong nCount = Application::ReleaseSolarMutex(); // call deinit to deinitialize application class // soffice/sfx implementation disposes the global service manager // Warning: After this call you can't call uno services - pSVData->mpApp->DeInit(); + if( pSVData->mpApp ) + { + pSVData->mpApp->DeInit(); + } + if( pSVData->maDeInitHook.IsSet() ) + { + pSVData->maDeInitHook.Call(0); + } Application::AcquireSolarMutex(nCount); } |