xref: /trunk/main/extensions/test/ole/unloading/unloadTest.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 
29 // MARKER(update_precomp.py): autogen include statement, do not remove
30 #include "precompiled_extensions.hxx"
31 
32 #include<osl/module.hxx>
33 #include <osl/time.h>
34 #include <rtl/ustring.hxx>
35 #include <stdio.h>
36 #include <cppuhelper/factory.hxx>
37 #include <cppuhelper/servicefactory.hxx>
38 #include <cppuhelper/bootstrap.hxx>
39 #include <com/sun/star/lang/XMultiComponentFactory.hpp>
40 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
41 #include <com/sun/star/lang/XServiceInfo.hpp>
42 #include <com/sun/star/lang/XComponent.hpp>
43 #include <com/sun/star/uno/XComponentContext.hpp>
44 #include <com/sun/star/registry/XSimpleRegistry.hpp>
45 
46 #include <stdio.h>
47 using namespace ::rtl;
48 using namespace ::osl;
49 using namespace ::com::sun::star::uno;
50 using namespace ::com::sun::star::lang;
51 using namespace ::cppu;
52 using namespace ::com::sun::star::registry;
53 
54 
55 sal_Bool test1();
56 sal_Bool test2();
57 sal_Bool test3();
58 sal_Bool test4();
59 
60 int main(int, char**)
61 {
62     sal_Bool bTest1= test1();
63     sal_Bool bTest2= test2();
64     sal_Bool bTest3= test3();
65     sal_Bool bTest4= test4();
66 
67     if( bTest1 && bTest2 && bTest3 && bTest4)
68         printf("\n#########################\n Test was successful\n#######################\n");
69 
70     return 0;
71 }
72 
73 sal_Bool test1()
74 {
75     printf("\n Test1:  com.sun.star.bridge.oleautomation.BridgeSupplier\n");
76     Reference<XSimpleRegistry> xreg= createSimpleRegistry();
77     xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("services.rdb")),
78                                sal_False, sal_False );
79 
80     Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
81     Reference<XMultiComponentFactory> fac= context->getServiceManager();
82     OUString sService1( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.oleautomation.BridgeSupplier"));
83     Reference<XInterface> xint1= fac->createInstanceWithContext( sService1, context);
84 
85     OUString sModule(
86         RTL_CONSTASCII_USTRINGPARAM("oleautobridge.uno" SAL_DLLEXTENSION));
87     oslModule hMod= osl_loadModule( sModule.pData, 0);
88     osl_unloadModule( hMod);
89 
90     rtl_unloadUnusedModules( NULL);
91 
92     OUString sFactoryFunc( RTL_CONSTASCII_USTRINGPARAM("component_getFactory"));
93     void* pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
94     // true, instance alive
95     sal_Bool bTest1= pSymbol ? sal_True : sal_False;
96 
97     xint1=0;
98     rtl_unloadUnusedModules( NULL);
99     pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
100     sal_Bool bTest2= pSymbol ? sal_False : sal_True;
101 
102     Reference<XComponent> xcomp( context, UNO_QUERY);
103     xcomp->dispose();
104 
105     return bTest2 && bTest1;
106 }
107 
108 sal_Bool test2()
109 {
110     printf("Test2:  com.sun.star.bridge.OleBridgeSupplierVar1\n");
111     Reference<XSimpleRegistry> xreg= createSimpleRegistry();
112     xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("services.rdb")),
113                                sal_False, sal_False );
114 
115     Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
116     Reference<XMultiComponentFactory> fac= context->getServiceManager();
117     OUString sService2( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.OleBridgeSupplierVar1"));
118     Reference<XInterface> xint= fac->createInstanceWithContext( sService2, context);
119 
120     OUString sModule(
121         RTL_CONSTASCII_USTRINGPARAM("oleautobridge.uno" SAL_DLLEXTENSION));
122     oslModule hMod= osl_loadModule( sModule.pData, 0);
123     osl_unloadModule( hMod);
124 
125     rtl_unloadUnusedModules( NULL);
126     OUString sFactoryFunc( RTL_CONSTASCII_USTRINGPARAM("component_getFactory"));
127     void* pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
128     // true, instance alive
129     sal_Bool bTest1= pSymbol ? sal_True : sal_False;
130 
131     xint=0;
132     rtl_unloadUnusedModules( NULL);
133     pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
134     sal_Bool bTest2= pSymbol ? sal_False : sal_True;
135 
136     Reference<XComponent> xcomp( context, UNO_QUERY);
137     xcomp->dispose();
138     return bTest1 && bTest2;
139 }
140 
141 sal_Bool test3()
142 {
143     printf("Test3:  com.sun.star.bridge.oleautomation.Factory\n");
144     Reference<XSimpleRegistry> xreg= createSimpleRegistry();
145     xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("services.rdb")),
146                 sal_False, sal_False );
147 
148     Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
149 
150     Reference<XMultiComponentFactory> fac= context->getServiceManager();
151     OUString sService( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.oleautomation.Factory"));
152     Reference<XInterface> xint= fac->createInstanceWithContext( sService, context);
153 
154 
155     OUString sModule(
156         RTL_CONSTASCII_USTRINGPARAM("oleautobridge.uno" SAL_DLLEXTENSION));
157     oslModule hMod= osl_loadModule( sModule.pData, 0);
158     osl_unloadModule( hMod);
159 
160     rtl_unloadUnusedModules( NULL);
161     OUString sFactoryFunc( RTL_CONSTASCII_USTRINGPARAM("component_getFactory"));
162     void* pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
163     // true, instance alive
164     sal_Bool bTest1= pSymbol ? sal_True : sal_False;
165 
166     xint=0;
167     rtl_unloadUnusedModules( NULL);
168     pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
169     sal_Bool bTest2= pSymbol ? sal_False : sal_True;
170 
171     Reference<XComponent> xcomp( context, UNO_QUERY);
172     xcomp->dispose();
173 
174 //  for (int i=0; i < 10; i++)
175 //  {
176 //      Reference<XSimpleRegistry> xreg= createSimpleRegistry();
177 //      xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("applicat.rdb")),
178 //                             sal_False, sal_False );
179 //      Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
180 //      Reference<XComponent> xcomp( context, UNO_QUERY);
181 //      xcomp->dispose();
182 //
183 //  }
184 
185 //  return sal_True;
186     return bTest1 && bTest2;
187 }
188 
189 sal_Bool test4()
190 {
191     void* pSymbol= NULL;
192     sal_Bool bTest1= sal_False;
193     sal_Bool bTest2= sal_False;
194     oslModule hMod= NULL;
195     OUString sModule(
196         RTL_CONSTASCII_USTRINGPARAM("oleautobridge.uno" SAL_DLLEXTENSION));
197     OUString sFactoryFunc( RTL_CONSTASCII_USTRINGPARAM("component_getFactory"));
198     {
199     printf("Test4:  com.sun.star.bridge.oleautomation.ApplicationRegistration\n");
200     Reference<XSimpleRegistry> xreg= createSimpleRegistry();
201     xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("services.rdb")),
202                                sal_False, sal_False );
203 
204     Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
205     Reference<XMultiComponentFactory> fac= context->getServiceManager();
206     OUString sService4( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.oleautomation.ApplicationRegistration"));
207     Reference<XInterface> xint= fac->createInstanceWithContext( sService4, context);
208 
209     hMod= osl_loadModule( sModule.pData, 0);
210     osl_unloadModule( hMod);
211 
212     rtl_unloadUnusedModules( NULL);
213     void* pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
214     // true, instance alive
215     bTest1= pSymbol ? sal_True : sal_False;
216     // ApplicationRegistration is a one-instance-service, therefore kill service manager first
217     Reference<XComponent> xcomp( context, UNO_QUERY);
218     xcomp->dispose();
219 
220     }
221     rtl_unloadUnusedModules( NULL);
222     pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
223     bTest2= pSymbol ? sal_False : sal_True;
224 
225     return bTest1 && bTest2;
226 }
227