diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2014-05-15 12:19:27 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2014-05-15 12:23:39 +0200 |
commit | 4cacc6080e61374fd573fffb3bc2a54968c1b61a (patch) | |
tree | 923e2993db864aca83b5be831a0fb085979d15ef | |
parent | Minor utl::TempFile clean up (diff) | |
download | core-4cacc6080e61374fd573fffb3bc2a54968c1b61a.tar.gz core-4cacc6080e61374fd573fffb3bc2a54968c1b61a.zip |
Make sure to dispose services supporting the XComponent protocol
...to e.g. avoid leftover temp files from instantiating
com.sun.star.comp.report.OReportDefinition. But dispose all instances only at
the very end, to avoid disposing some single-instance services too early.
Change-Id: I71fc50e80f4b5d1a1ca16e392725903b079ce2d1
-rw-r--r-- | postprocess/qa/services.cxx | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/postprocess/qa/services.cxx b/postprocess/qa/services.cxx index c9d30f4f1031..2d29e918a420 100644 --- a/postprocess/qa/services.cxx +++ b/postprocess/qa/services.cxx @@ -9,7 +9,10 @@ #include <sal/config.h> +#include <vector> + #include <com/sun/star/container/XHierarchicalNameAccess.hpp> +#include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/reflection/XServiceConstructorDescription.hpp> #include <com/sun/star/reflection/XServiceTypeDescription2.hpp> #include <test/bootstrapfixture.hxx> @@ -37,6 +40,7 @@ void ServicesTest::test() "/singletons/com.sun.star.reflection.theTypeDescriptionManager"), UNO_QUERY_THROW ); Sequence<OUString> s = m_xContext->getServiceManager()->getAvailableServiceNames(); + std::vector< css::uno::Reference<css::lang::XComponent> > comps; for (sal_Int32 i = 0; i < s.getLength(); i++) { if (!xTypeManager->hasByHierarchicalName(s[i])) @@ -54,12 +58,13 @@ void ServicesTest::test() Sequence< Reference< XServiceConstructorDescription > > xseq = xDesc->getConstructors(); for (sal_Int32 c = 0; c < xseq.getLength(); c++) if (!xseq[c]->getParameters().hasElements()) + { + Reference< XInterface > instance; try { OString message = OUStringToOString(s[i], RTL_TEXTENCODING_UTF8); bool bDefConstructor = xseq[c]->isDefaultConstructor(); Reference< css::lang::XMultiComponentFactory > serviceManager = m_xContext->getServiceManager(); - Reference< XInterface > instance; if( bDefConstructor ) instance = serviceManager->createInstanceWithContext(s[i], m_xContext); @@ -75,6 +80,18 @@ void ServicesTest::test() OUStringToOString(s[i] + ": " + e.Message, RTL_TEXTENCODING_UTF8); CPPUNIT_FAIL(exc.getStr()); } + css::uno::Reference<css::lang::XComponent> comp( + instance, css::uno::UNO_QUERY); + if (comp.is()) { + comps.push_back(comp); + } + } + } + for (std::vector< css::uno::Reference<css::lang::XComponent> >::iterator i( + comps.begin()); + i != comps.end(); ++i) + { + (*i)->dispose(); } } |