xref: /AOO41X/main/extensions/test/ole/unloading/unloadTest.cxx (revision 2a97ec55f1442d65917e8c8b82a55ab76c9ff676)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 
25 // MARKER(update_precomp.py): autogen include statement, do not remove
26 #include "precompiled_extensions.hxx"
27 
28 #include<osl/module.hxx>
29 #include <osl/time.h>
30 #include <rtl/ustring.hxx>
31 #include <stdio.h>
32 #include <cppuhelper/factory.hxx>
33 #include <cppuhelper/servicefactory.hxx>
34 #include <cppuhelper/bootstrap.hxx>
35 #include <com/sun/star/lang/XMultiComponentFactory.hpp>
36 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
37 #include <com/sun/star/lang/XServiceInfo.hpp>
38 #include <com/sun/star/lang/XComponent.hpp>
39 #include <com/sun/star/uno/XComponentContext.hpp>
40 #include <com/sun/star/registry/XSimpleRegistry.hpp>
41 
42 #include <stdio.h>
43 using namespace ::rtl;
44 using namespace ::osl;
45 using namespace ::com::sun::star::uno;
46 using namespace ::com::sun::star::lang;
47 using namespace ::cppu;
48 using namespace ::com::sun::star::registry;
49 
50 
51 sal_Bool test1();
52 sal_Bool test2();
53 sal_Bool test3();
54 sal_Bool test4();
55 
main(int,char **)56 int main(int, char**)
57 {
58     sal_Bool bTest1= test1();
59     sal_Bool bTest2= test2();
60     sal_Bool bTest3= test3();
61     sal_Bool bTest4= test4();
62 
63     if( bTest1 && bTest2 && bTest3 && bTest4)
64         printf("\n#########################\n Test was successful\n#######################\n");
65 
66     return 0;
67 }
68 
test1()69 sal_Bool test1()
70 {
71     printf("\n Test1:  com.sun.star.bridge.oleautomation.BridgeSupplier\n");
72     Reference<XSimpleRegistry> xreg= createSimpleRegistry();
73     xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("services.rdb")),
74                                sal_False, sal_False );
75 
76     Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
77     Reference<XMultiComponentFactory> fac= context->getServiceManager();
78     OUString sService1( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.oleautomation.BridgeSupplier"));
79     Reference<XInterface> xint1= fac->createInstanceWithContext( sService1, context);
80 
81     OUString sModule(
82         RTL_CONSTASCII_USTRINGPARAM("oleautobridge.uno" SAL_DLLEXTENSION));
83     oslModule hMod= osl_loadModule( sModule.pData, 0);
84     osl_unloadModule( hMod);
85 
86     rtl_unloadUnusedModules( NULL);
87 
88     OUString sFactoryFunc( RTL_CONSTASCII_USTRINGPARAM("component_getFactory"));
89     void* pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
90     // true, instance alive
91     sal_Bool bTest1= pSymbol ? sal_True : sal_False;
92 
93     xint1=0;
94     rtl_unloadUnusedModules( NULL);
95     pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
96     sal_Bool bTest2= pSymbol ? sal_False : sal_True;
97 
98     Reference<XComponent> xcomp( context, UNO_QUERY);
99     xcomp->dispose();
100 
101     return bTest2 && bTest1;
102 }
103 
test2()104 sal_Bool test2()
105 {
106     printf("Test2:  com.sun.star.bridge.OleBridgeSupplierVar1\n");
107     Reference<XSimpleRegistry> xreg= createSimpleRegistry();
108     xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("services.rdb")),
109                                sal_False, sal_False );
110 
111     Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
112     Reference<XMultiComponentFactory> fac= context->getServiceManager();
113     OUString sService2( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.OleBridgeSupplierVar1"));
114     Reference<XInterface> xint= fac->createInstanceWithContext( sService2, context);
115 
116     OUString sModule(
117         RTL_CONSTASCII_USTRINGPARAM("oleautobridge.uno" SAL_DLLEXTENSION));
118     oslModule hMod= osl_loadModule( sModule.pData, 0);
119     osl_unloadModule( hMod);
120 
121     rtl_unloadUnusedModules( NULL);
122     OUString sFactoryFunc( RTL_CONSTASCII_USTRINGPARAM("component_getFactory"));
123     void* pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
124     // true, instance alive
125     sal_Bool bTest1= pSymbol ? sal_True : sal_False;
126 
127     xint=0;
128     rtl_unloadUnusedModules( NULL);
129     pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
130     sal_Bool bTest2= pSymbol ? sal_False : sal_True;
131 
132     Reference<XComponent> xcomp( context, UNO_QUERY);
133     xcomp->dispose();
134     return bTest1 && bTest2;
135 }
136 
test3()137 sal_Bool test3()
138 {
139     printf("Test3:  com.sun.star.bridge.oleautomation.Factory\n");
140     Reference<XSimpleRegistry> xreg= createSimpleRegistry();
141     xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("services.rdb")),
142                 sal_False, sal_False );
143 
144     Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
145 
146     Reference<XMultiComponentFactory> fac= context->getServiceManager();
147     OUString sService( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.oleautomation.Factory"));
148     Reference<XInterface> xint= fac->createInstanceWithContext( sService, context);
149 
150 
151     OUString sModule(
152         RTL_CONSTASCII_USTRINGPARAM("oleautobridge.uno" SAL_DLLEXTENSION));
153     oslModule hMod= osl_loadModule( sModule.pData, 0);
154     osl_unloadModule( hMod);
155 
156     rtl_unloadUnusedModules( NULL);
157     OUString sFactoryFunc( RTL_CONSTASCII_USTRINGPARAM("component_getFactory"));
158     void* pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
159     // true, instance alive
160     sal_Bool bTest1= pSymbol ? sal_True : sal_False;
161 
162     xint=0;
163     rtl_unloadUnusedModules( NULL);
164     pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
165     sal_Bool bTest2= pSymbol ? sal_False : sal_True;
166 
167     Reference<XComponent> xcomp( context, UNO_QUERY);
168     xcomp->dispose();
169 
170 //  for (int i=0; i < 10; i++)
171 //  {
172 //      Reference<XSimpleRegistry> xreg= createSimpleRegistry();
173 //      xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("applicat.rdb")),
174 //                             sal_False, sal_False );
175 //      Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
176 //      Reference<XComponent> xcomp( context, UNO_QUERY);
177 //      xcomp->dispose();
178 //
179 //  }
180 
181 //  return sal_True;
182     return bTest1 && bTest2;
183 }
184 
test4()185 sal_Bool test4()
186 {
187     void* pSymbol= NULL;
188     sal_Bool bTest1= sal_False;
189     sal_Bool bTest2= sal_False;
190     oslModule hMod= NULL;
191     OUString sModule(
192         RTL_CONSTASCII_USTRINGPARAM("oleautobridge.uno" SAL_DLLEXTENSION));
193     OUString sFactoryFunc( RTL_CONSTASCII_USTRINGPARAM("component_getFactory"));
194     {
195     printf("Test4:  com.sun.star.bridge.oleautomation.ApplicationRegistration\n");
196     Reference<XSimpleRegistry> xreg= createSimpleRegistry();
197     xreg->open( OUString( RTL_CONSTASCII_USTRINGPARAM("services.rdb")),
198                                sal_False, sal_False );
199 
200     Reference< XComponentContext > context= bootstrap_InitialComponentContext(xreg);
201     Reference<XMultiComponentFactory> fac= context->getServiceManager();
202     OUString sService4( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.oleautomation.ApplicationRegistration"));
203     Reference<XInterface> xint= fac->createInstanceWithContext( sService4, context);
204 
205     hMod= osl_loadModule( sModule.pData, 0);
206     osl_unloadModule( hMod);
207 
208     rtl_unloadUnusedModules( NULL);
209     void* pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
210     // true, instance alive
211     bTest1= pSymbol ? sal_True : sal_False;
212     // ApplicationRegistration is a one-instance-service, therefore kill service manager first
213     Reference<XComponent> xcomp( context, UNO_QUERY);
214     xcomp->dispose();
215 
216     }
217     rtl_unloadUnusedModules( NULL);
218     pSymbol= osl_getSymbol( hMod,sFactoryFunc.pData);
219     bTest2= pSymbol ? sal_False : sal_True;
220 
221     return bTest1 && bTest2;
222 }
223