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_stoc.hxx" 26 27 #include <stdio.h> 28 29 #include <sal/main.h> 30 #ifndef _OSL_MODULE_H_ 31 #include <osl/module.hxx> 32 #endif 33 #include <osl/diagnose.h> 34 35 #include <com/sun/star/loader/XImplementationLoader.hpp> 36 #include <com/sun/star/lang/XServiceInfo.hpp> 37 #include <com/sun/star/lang/XSingleServiceFactory.hpp> 38 #include <com/sun/star/lang/XSingleComponentFactory.hpp> 39 40 #include <cppuhelper/implbase1.hxx> 41 #include <cppuhelper/factory.hxx> 42 43 #if defined ( UNX ) 44 #include <limits.h> 45 #define _MAX_PATH PATH_MAX 46 #endif 47 48 using namespace com::sun::star::uno; 49 using namespace com::sun::star::loader; 50 using namespace com::sun::star::lang; 51 using namespace osl; 52 using namespace rtl; 53 using namespace cppu; 54 55 #if OSL_DEBUG_LEVEL > 0 56 #define TEST_ENSHURE(c, m) OSL_ENSURE(c, m) 57 #else 58 #define TEST_ENSHURE(c, m) OSL_VERIFY(c) 59 #endif 60 61 class EmptyComponentContext : public WeakImplHelper1< XComponentContext > 62 { 63 public: 64 virtual Any SAL_CALL getValueByName( const OUString& /*Name*/ ) 65 throw (RuntimeException) 66 { 67 return Any(); 68 } 69 virtual Reference< XMultiComponentFactory > SAL_CALL getServiceManager( ) 70 throw (RuntimeException) 71 { 72 return Reference< XMultiComponentFactory > (); 73 } 74 75 }; 76 77 78 SAL_IMPLEMENT_MAIN() 79 { 80 Reference<XInterface> xIFace; 81 82 Module module; 83 84 OUString dllName( 85 RTL_CONSTASCII_USTRINGPARAM("bootstrap.uno" SAL_DLLEXTENSION) ); 86 87 if (module.load(dllName)) 88 { 89 // try to get provider from module 90 component_getFactoryFunc pCompFactoryFunc = (component_getFactoryFunc) 91 module.getFunctionSymbol( OUString::createFromAscii(COMPONENT_GETFACTORY) ); 92 93 if (pCompFactoryFunc) 94 { 95 XSingleServiceFactory * pRet = (XSingleServiceFactory *)(*pCompFactoryFunc)( 96 "com.sun.star.comp.stoc.DLLComponentLoader", 0, 0 ); 97 if (pRet) 98 { 99 xIFace = pRet; 100 pRet->release(); 101 } 102 } 103 } 104 105 TEST_ENSHURE( xIFace.is(), "testloader error1"); 106 107 Reference<XSingleComponentFactory> xFactory( Reference<XSingleComponentFactory>::query(xIFace) ); 108 109 TEST_ENSHURE( xFactory.is(), "testloader error2"); 110 111 Reference<XInterface> xLoader = xFactory->createInstanceWithContext( new EmptyComponentContext ); 112 113 TEST_ENSHURE( xLoader.is(), "testloader error3"); 114 115 Reference<XServiceInfo> xServInfo( Reference<XServiceInfo>::query(xLoader) ); 116 117 TEST_ENSHURE( xServInfo.is(), "testloader error4"); 118 119 TEST_ENSHURE( xServInfo->getImplementationName().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.comp.stoc.DLLComponentLoader") ), "testloader error5"); 120 TEST_ENSHURE( xServInfo->supportsService(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.loader.SharedLibrary")) ), "testloader error6"); 121 TEST_ENSHURE( xServInfo->getSupportedServiceNames().getLength() == 1, "testloader error7"); 122 123 xIFace.clear(); 124 xFactory.clear(); 125 xLoader.clear(); 126 xServInfo.clear(); 127 128 printf("Test Dll ComponentLoader, OK!\n"); 129 130 return(0); 131 } 132 133 134