summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-05-15 12:19:27 +0200
committerStephan Bergmann <sbergman@redhat.com>2014-05-15 12:23:39 +0200
commit4cacc6080e61374fd573fffb3bc2a54968c1b61a (patch)
tree923e2993db864aca83b5be831a0fb085979d15ef
parentMinor utl::TempFile clean up (diff)
downloadcore-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.cxx19
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();
}
}