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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_extensions.hxx"
26
27 //------------------------------------------------------
28 // testcomponent - Loads a service and its testcomponent from dlls performs a test.
29 // Expands the dll-names depending on the actual environment.
30 // Example : testcomponent stardiv.uno.io.Pipe stm
31 //
32 // Therefor the testcode must exist in teststm and the testservice must be named test.stardiv.uno.io.Pipe
33 //
34
35 #include <stdio.h>
36 #include <smart/com/sun/star/registry/XImplementationRegistration.hxx>
37 #include <smart/com/sun/star/lang/XComponent.hxx>
38 //#include <com/sun/star/registry/ stardiv/uno/repos/simplreg.hxx>
39
40 #include <vos/dynload.hxx>
41 #include <vos/diagnose.hxx>
42 #include <usr/services.hxx>
43 #include <vcl/svapp.hxx>
44 #include <usr/ustring.hxx>
45 #include <tools/string.hxx>
46 #include <vos/conditn.hxx>
47
48 #include <smart/com/sun/star/test/XSimpleTest.hxx>
49
50 using namespace rtl;
51 using namespace vos;
52 using namespace usr;
53
54
55 // Needed to switch on solaris threads
56 #ifdef SOLARIS
57 extern "C" void ChangeGlobalInit();
58 #endif
59
main(int argc,char ** argv)60 int __LOADONCALLAPI main (int argc, char **argv)
61 {
62
63 if( argc < 3) {
64 printf( "usage : testcomponent service dll [additional dlls]\n" );
65 exit( 0 );
66 }
67 #ifdef SOLARIS
68 // switch on threads in solaris
69 ChangeGlobalInit();
70 #endif
71
72 // create service manager
73 // XMultiServiceFactoryRef xSMgr = getProcessServiceManager();
74 XMultiServiceFactoryRef xSMgr = createRegistryServiceManager();
75 OSL_ASSERT( xSMgr.is() );
76 registerUsrServices( xSMgr );
77 setProcessServiceManager( xSMgr );
78
79 XImplementationRegistrationRef xReg;
80 XSimpleRegistryRef xSimpleReg;
81
82 try {
83 // Create registration service
84 XInterfaceRef x = xSMgr->createInstance(
85 UString::createFromAscii( "com.sun.star.registry.ImplementationRegistration" ) );
86 x->queryInterface( XImplementationRegistration::getSmartUik() , xReg );
87
88 /* x = xSMgr->createInstance( L"stardiv.uno.repos.SimpleRegistry" );
89 OSL_ASSERT( x.is() );
90 x->queryInterface( XSimpleRegistry::getSmartUik() , xSimpleReg );
91 OSL_ASSERT( xSimpleReg.is() );
92 xSimpleReg->open( L"testcomp.rdb" , FALSE , TRUE );
93 */ }
94 catch( Exception& e ) {
95 printf( "%s\n" , OWStringToOString( e.getName() , CHARSET_SYSTEM ).getStr() );
96 exit(1);
97 }
98
99 sal_Char szBuf[1024];
100 OString sTestName;
101
102 try {
103 // Load dll for the tested component
104 for( int n = 2 ; n <argc ; n ++ ) {
105 ORealDynamicLoader::computeModuleName( argv[n] , szBuf, 1024 );
106 UString aDllName( OStringToOWString( szBuf, CHARSET_SYSTEM ) );
107
108 xReg->registerImplementation(
109 UString::createFromAscii( "com.sun.star.loader.SharedLibrary" ),
110 aDllName,
111 xSimpleReg );
112 }
113 }
114 catch( Exception& e ) {
115 printf( "Couldn't reach dll %s\n" , szBuf );
116 printf( "%s\n" , OWStringToOString( e.getName() , CHARSET_SYSTEM ).getStr() );
117
118 exit(1);
119 }
120
121
122 try {
123 // Load dll for the test component
124 sTestName = "test";
125 sTestName += argv[2];
126
127 ORealDynamicLoader::computeModuleName( sTestName.getStr() , szBuf, 1024 );
128 UString aDllName = OStringToOWString( szBuf, CHARSET_SYSTEM );
129 xReg->registerImplementation(
130 UString::createFromAscii( "com.sun.star.loader.SharedLibrary" ) ,
131 aDllName,
132 xSimpleReg );
133 }
134 catch( Exception& e ) {
135 printf( "Couldn't reach dll %s\n" , szBuf );
136 printf( "%s\n" , OWStringToOString( e.getName() , CHARSET_SYSTEM ).getStr() );
137 exit(1);
138 }
139
140
141 // Instantiate test service
142 sTestName = "test.";
143 sTestName += argv[1];
144
145 XInterfaceRef xIntTest = xSMgr->createInstance( OStringToOWString( sTestName , CHARSET_SYSTEM ) );
146 XSimpleTestRef xTest( xIntTest , USR_QUERY );
147
148 if( ! xTest.is() ) {
149 printf( "Couldn't instantiate test service \n" );
150 exit( 1 );
151 }
152
153
154 INT32 nHandle = 0;
155 INT32 nNewHandle;
156 INT32 nErrorCount = 0;
157 INT32 nWarningCount = 0;
158
159 // loop until all test are performed
160 while( nHandle != -1 ) {
161
162 // Instantiate serivce
163 XInterfaceRef x = xSMgr->createInstance( OStringToOWString( argv[1] , CHARSET_SYSTEM ) );
164 if( ! x.is() ) {
165 printf( "Couldn't instantiate service !\n" );
166 exit( 1 );
167 }
168
169 // do the test
170 try {
171 nNewHandle = xTest->test( OStringToOWString( argv[1] , CHARSET_SYSTEM ) , x , nHandle );
172 }
173 catch ( Exception& e ) {
174 printf( "testcomponent : uncaught exception %s\n" ,
175 OWStringToOString( e.getName(), CHARSET_SYSTEM ).getStr() );
176 exit(1);
177 }
178 catch(...) {
179 printf( "testcomponent : uncaught unknown exception\n" );
180 exit(1);
181 }
182
183
184 // print errors and warning
185 Sequence<UString> seqErrors = xTest->getErrors();
186 Sequence<UString> seqWarnings = xTest->getWarnings();
187 if( seqWarnings.getLen() > nWarningCount ) {
188 printf( "Warnings during test %d!\n" , nHandle );
189 for( ; nWarningCount < seqWarnings.getLen() ; nWarningCount ++ ) {
190 printf( "Warning\n%s\n---------\n" ,
191 OWStringToOString( seqWarnings.getArray()[nWarningCount], CHARSET_SYSTEM ).getStr() );
192 }
193 }
194
195
196 if( seqErrors.getLen() > nErrorCount ) {
197 printf( "Errors during test %d!\n" , nHandle );
198 for( ; nErrorCount < seqErrors.getLen() ; nErrorCount ++ ) {
199 printf( "%s\n" ,
200 OWStringToOString(
201 seqErrors.getArray()[nErrorCount], CHARSET_SYSTEM ).getStr() );
202 }
203 }
204
205 nHandle = nNewHandle;
206 }
207
208 if( xTest->testPassed() ) {
209 printf( "Test passed !\n" );
210 }
211 else {
212 printf( "Test failed !\n" );
213 }
214
215 XComponentRef rComp( xSMgr , USR_QUERY );
216 rComp->dispose();
217 return 0;
218 }
219