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 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