postprocess/qa/services.cxx |   19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

New commits:
commit 4cacc6080e61374fd573fffb3bc2a54968c1b61a
Author: Stephan Bergmann <sberg...@redhat.com>
Date:   Thu May 15 12:19:27 2014 +0200

    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

diff --git a/postprocess/qa/services.cxx b/postprocess/qa/services.cxx
index c9d30f4..2d29e91 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();
     }
 }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to