1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sal.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir // Documentation about bootstraping can be found at: 32*cdf0e10cSrcweir // http://udk.openoffice.org/common/man/concept/micro_deployment.html 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include <math.h> 35*cdf0e10cSrcweir #include <stdio.h> 36*cdf0e10cSrcweir #include <stdlib.h> 37*cdf0e10cSrcweir #include <algorithm> // STL 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir #include "testshl/stringhelper.hxx" 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir #include <testshl/simpleheader.hxx> 42*cdf0e10cSrcweir //#include "stringhelper.hxx" 43*cdf0e10cSrcweir //#include "valueequal.hxx" 44*cdf0e10cSrcweir #include <rtl/bootstrap.hxx> 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir #include <rtl/ustrbuf.hxx> 47*cdf0e10cSrcweir #include <rtl/ustring.h> 48*cdf0e10cSrcweir #include <rtl/ustring.hxx> 49*cdf0e10cSrcweir #include <osl/file.hxx> 50*cdf0e10cSrcweir #include <osl/module.hxx> 51*cdf0e10cSrcweir #include <osl/process.h> /* osl_getExecutableFile() */ 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir #include <osl/thread.hxx> 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir // using namespace osl; 56*cdf0e10cSrcweir using namespace rtl; 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir #define TESTSHL2_INI "testshl2" 59*cdf0e10cSrcweir #define PSEUDO_INI "pseudo" 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir /** print a UNI_CODE String. And also print some comments of the string. 62*cdf0e10cSrcweir */ 63*cdf0e10cSrcweir inline void printUString( const ::rtl::OUString & str, const sal_Char * msg = "" ) 64*cdf0e10cSrcweir { 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir if (strlen(msg) > 0) 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir t_print("%s: ", msg ); 69*cdf0e10cSrcweir } 70*cdf0e10cSrcweir rtl::OString aString; 71*cdf0e10cSrcweir aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ); 72*cdf0e10cSrcweir t_print("%s\n", (char *)aString.getStr( ) ); 73*cdf0e10cSrcweir } 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir /** if the file exist 76*cdf0e10cSrcweir */ 77*cdf0e10cSrcweir bool t_fileExist(rtl::OUString const& _sFilename) 78*cdf0e10cSrcweir { 79*cdf0e10cSrcweir ::osl::FileBase::RC nError1; 80*cdf0e10cSrcweir ::osl::File aTestFile( _sFilename ); 81*cdf0e10cSrcweir nError1 = aTestFile.open ( OpenFlag_Read ); 82*cdf0e10cSrcweir if ( ( ::osl::FileBase::E_NOENT != nError1 ) && ( ::osl::FileBase::E_ACCES != nError1 ) ) 83*cdf0e10cSrcweir { 84*cdf0e10cSrcweir aTestFile.close( ); 85*cdf0e10cSrcweir return true; 86*cdf0e10cSrcweir } 87*cdf0e10cSrcweir return false; 88*cdf0e10cSrcweir } 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir /** get the exectutable path ( here is bootstrap_process), on Linux, such as "sal/unxlngi4.pro/bin/" 91*cdf0e10cSrcweir */ 92*cdf0e10cSrcweir inline ::rtl::OUString getModulePath( void ) 93*cdf0e10cSrcweir { 94*cdf0e10cSrcweir ::rtl::OUString suDirPath; 95*cdf0e10cSrcweir ::osl::Module::getUrlFromAddress( ( oslGenericFunction ) &getModulePath, suDirPath ); 96*cdf0e10cSrcweir 97*cdf0e10cSrcweir suDirPath = suDirPath.copy( 0, suDirPath.lastIndexOf('/') ); 98*cdf0e10cSrcweir suDirPath = suDirPath.copy( 0, suDirPath.lastIndexOf('/') + 1); 99*cdf0e10cSrcweir suDirPath += rtl::OUString::createFromAscii("bin"); 100*cdf0e10cSrcweir return suDirPath; 101*cdf0e10cSrcweir } 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir #define TESTSHL2_INI "testshl2" 104*cdf0e10cSrcweir #define PSEUDO_INI "pseudo" 105*cdf0e10cSrcweir 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir static rtl::OUString getExecutableDirectory() 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir rtl::OUString fileName; 110*cdf0e10cSrcweir osl_getExecutableFile(&fileName.pData); 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir sal_Int32 nDirEnd = fileName.lastIndexOf('/'); 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir OSL_ENSURE(nDirEnd >= 0, "Cannot locate executable directory"); 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir rtl::OUString aDirURL = fileName.copy(0, nDirEnd); 117*cdf0e10cSrcweir return aDirURL; 118*cdf0e10cSrcweir } 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir // get the URL of testshl2rc/rtlrc/pseudorc 122*cdf0e10cSrcweir inline rtl::OUString t_getSourcePath(rtl::OString const& _sFilename) 123*cdf0e10cSrcweir { 124*cdf0e10cSrcweir 125*cdf0e10cSrcweir rtl::OUString aDirURL(getExecutableDirectory()); 126*cdf0e10cSrcweir aDirURL += OUString::createFromAscii( "/"); 127*cdf0e10cSrcweir aDirURL += OUString::createFromAscii( _sFilename.getStr() ); 128*cdf0e10cSrcweir #if defined(WNT) || defined(OS2) 129*cdf0e10cSrcweir aDirURL += rtl::OUString::createFromAscii(".ini"); 130*cdf0e10cSrcweir #else 131*cdf0e10cSrcweir aDirURL += rtl::OUString::createFromAscii("rc"); 132*cdf0e10cSrcweir #endif 133*cdf0e10cSrcweir return aDirURL; 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir // LLA: does not right work on my personal laptop, SRC_ROOT does not show where the source is :-(. 136*cdf0e10cSrcweir /* 137*cdf0e10cSrcweir sal_Char * pStr = getenv("SRC_ROOT"); 138*cdf0e10cSrcweir rtl::OUString suPath; 139*cdf0e10cSrcweir if (filename != "") 140*cdf0e10cSrcweir { 141*cdf0e10cSrcweir suPath = rtl::OUString::createFromAscii(pStr) + rtl::OUString::createFromAscii( "/sal/qa/rtl/bootstrap/" ) 142*cdf0e10cSrcweir + rtl::OUString::createFromAscii( filename ); 143*cdf0e10cSrcweir } 144*cdf0e10cSrcweir else 145*cdf0e10cSrcweir { 146*cdf0e10cSrcweir suPath = rtl::OUString::createFromAscii(pStr) + rtl::OUString::createFromAscii( "/sal/qa/rtl/bootstrap" ); 147*cdf0e10cSrcweir } 148*cdf0e10cSrcweir rtl::OUString suURL; 149*cdf0e10cSrcweir ::osl::FileBase::getFileURLFromSystemPath( suPath, suURL ); 150*cdf0e10cSrcweir return suURL; 151*cdf0e10cSrcweir */ 152*cdf0e10cSrcweir } 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir void thread_sleep_tenth_sec(sal_Int32 _nTenthSec) 155*cdf0e10cSrcweir { 156*cdf0e10cSrcweir #ifdef WNT //Windows 157*cdf0e10cSrcweir Sleep(_nTenthSec * 100 ); 158*cdf0e10cSrcweir #endif 159*cdf0e10cSrcweir #if ( defined UNX ) || ( defined OS2 ) //Unix 160*cdf0e10cSrcweir TimeValue nTV; 161*cdf0e10cSrcweir nTV.Seconds = static_cast<sal_uInt32>( _nTenthSec/10 ); 162*cdf0e10cSrcweir nTV.Nanosec = ( (_nTenthSec%10 ) * 100000000 ); 163*cdf0e10cSrcweir osl_waitThread(&nTV); 164*cdf0e10cSrcweir #endif 165*cdf0e10cSrcweir } 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir namespace rtl_Bootstrap 170*cdf0e10cSrcweir { 171*cdf0e10cSrcweir class ctor : public CppUnit::TestFixture 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir public: 174*cdf0e10cSrcweir // initialise your test code values here. 175*cdf0e10cSrcweir void setUp() 176*cdf0e10cSrcweir { 177*cdf0e10cSrcweir } 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir void tearDown() 180*cdf0e10cSrcweir { 181*cdf0e10cSrcweir } 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir // ctor with ini name 184*cdf0e10cSrcweir void ctor_001() 185*cdf0e10cSrcweir { 186*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 187*cdf0e10cSrcweir printUString( suIniname ); 188*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname ); 189*cdf0e10cSrcweir rtl::OUString suGetname; // = rtl::OUString::createFromAscii(""); 190*cdf0e10cSrcweir aBootstrap.getIniName( suGetname ); 191*cdf0e10cSrcweir printUString( suGetname ); 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir // LLA: first: this seems to be a wrong test. 194*cdf0e10cSrcweir // second: there seems to be a design hole, if I give a absolute path ini file, 195*cdf0e10cSrcweir // but try to use ${file::KEYVALUE} than 'file' will only used out of the 'executable path'/file 196*cdf0e10cSrcweir // not from the path given from the absolute path. 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir // Due to the fact, we create at this position a file (createTestshl2rc() ), we check for existance 199*cdf0e10cSrcweir bool bFileExist = t_fileExist( suGetname ); 200*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("ctor error with initial file.", bFileExist == true ); 201*cdf0e10cSrcweir } 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir void ctor_002() 204*cdf0e10cSrcweir { 205*cdf0e10cSrcweir rtl::Bootstrap aBootstrap; 206*cdf0e10cSrcweir rtl::OUString suGetname; 207*cdf0e10cSrcweir aBootstrap.getIniName( suGetname ); 208*cdf0e10cSrcweir printUString( suGetname ); 209*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("ctor error without initial file.", suGetname.getLength() != 0 ); 210*cdf0e10cSrcweir } 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir CPPUNIT_TEST_SUITE(ctor); 213*cdf0e10cSrcweir CPPUNIT_TEST(ctor_001); 214*cdf0e10cSrcweir CPPUNIT_TEST(ctor_002); 215*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END(); 216*cdf0e10cSrcweir }; // class ctor 217*cdf0e10cSrcweir 218*cdf0e10cSrcweir class getFrom : public CppUnit::TestFixture 219*cdf0e10cSrcweir { 220*cdf0e10cSrcweir public: 221*cdf0e10cSrcweir // initialise your test code values here. 222*cdf0e10cSrcweir void setUp() 223*cdf0e10cSrcweir { 224*cdf0e10cSrcweir } 225*cdf0e10cSrcweir 226*cdf0e10cSrcweir void tearDown() 227*cdf0e10cSrcweir { 228*cdf0e10cSrcweir } 229*cdf0e10cSrcweir // get the value of env variable 230*cdf0e10cSrcweir void getFrom_001() 231*cdf0e10cSrcweir { 232*cdf0e10cSrcweir Bootstrap aBootstrap; 233*cdf0e10cSrcweir rtl::OUString suValue; 234*cdf0e10cSrcweir rtl::OUString suValuename = rtl::OUString::createFromAscii( "SOLAR_JAVA" ); 235*cdf0e10cSrcweir //aBootstrap.getFrom( suValuename, suValue ); 236*cdf0e10cSrcweir aBootstrap.getFrom( suValuename, suValue ); 237*cdf0e10cSrcweir sal_Char * pStr = getenv("SOLAR_JAVA"); 238*cdf0e10cSrcweir // printUString( suGetname ); 239*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("get the value of environment variable.", suValue.compareToAscii( pStr ) == 0 ); 240*cdf0e10cSrcweir } 241*cdf0e10cSrcweir /* Notes on Windows: 242*cdf0e10cSrcweir void getFrom_001_1() 243*cdf0e10cSrcweir { 244*cdf0e10cSrcweir Bootstrap aBootstrap; 245*cdf0e10cSrcweir rtl::OUString suValue; 246*cdf0e10cSrcweir rtl::OUString suValuename = rtl::OUString::createFromAscii( "SRC_ROOT" ); 247*cdf0e10cSrcweir //aBootstrap.getFrom( suValuename, suValue ); 248*cdf0e10cSrcweir aBootstrap.getFrom( suValuename, suValue ); 249*cdf0e10cSrcweir sal_Char * pStr = getenv("SRC_ROOT"); 250*cdf0e10cSrcweir // printUString( suGetname ); 251*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("get the value of environment variable.", suValue.compareToAscii( pStr ) == 0 ); 252*cdf0e10cSrcweir } 253*cdf0e10cSrcweir The result on Windows: 254*cdf0e10cSrcweir # # the SRC_ROOT is e:\Qadev\cvs\m19 255*cdf0e10cSrcweir # # suValue is e:Qadevcvsm19 256*cdf0e10cSrcweir reason: 257*cdf0e10cSrcweir The problem is that the internally getenv()ed variable SRC_ROOT is macro expanded, 258*cdf0e10cSrcweir thus every \ will introduce an escape. 259*cdf0e10cSrcweir */ 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir // get the value of a variable in ini file 262*cdf0e10cSrcweir void getFrom_002() 263*cdf0e10cSrcweir { 264*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 265*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname ); 266*cdf0e10cSrcweir rtl::OUString suGetname; 267*cdf0e10cSrcweir rtl::OUString suValuename = rtl::OUString::createFromAscii( "INHERITED_VALUE" ); 268*cdf0e10cSrcweir aBootstrap.getFrom( suValuename, suGetname ); 269*cdf0e10cSrcweir printUString( suGetname ); 270*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("get the value of a variable in ini file.", suGetname.getLength() != 0 ); 271*cdf0e10cSrcweir } 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir //use defaut value 274*cdf0e10cSrcweir void getFrom_003() 275*cdf0e10cSrcweir { 276*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 277*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname ); 278*cdf0e10cSrcweir rtl::OUString suGetname; 279*cdf0e10cSrcweir rtl::OUString suValuename = rtl::OUString::createFromAscii( "MY_VALUE" ); 280*cdf0e10cSrcweir rtl::OUString myDefault = rtl::OUString::createFromAscii( "2" ); 281*cdf0e10cSrcweir aBootstrap.getFrom( suValuename, suGetname, myDefault ); 282*cdf0e10cSrcweir //printUString( suGetname ); 283*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("getFrom use default.", suGetname.compareTo( myDefault ) == 0 ); 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir void getFrom_004() 287*cdf0e10cSrcweir { 288*cdf0e10cSrcweir t_print("1\n"); 289*cdf0e10cSrcweir // initialise Bootstrap with an own ini file 290*cdf0e10cSrcweir // PSEUDO_INI is pseudo(rc|.ini) created be create_pseudorc() 291*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(PSEUDO_INI); 292*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname ); 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir rtl::OUString suGetIniName; 295*cdf0e10cSrcweir aBootstrap.getIniName( suGetIniName ); 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir printUString(suGetIniName, "Current bootstrap file"); 298*cdf0e10cSrcweir sal_Int32 nIndex = suGetIniName.indexOf(rtl::OUString::createFromAscii( "pseudo" )); 299*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("ini name must have 'pseudo' in name.", nIndex > 0); 300*cdf0e10cSrcweir 301*cdf0e10cSrcweir // rtlBootstrapHandle bsHandle = aBootstrap.getHandle(); 302*cdf0e10cSrcweir // CPPUNIT_ASSERT_MESSAGE("getHandle return NULL!", bsHandle != 0); 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir rtl::OUString suValue; 305*cdf0e10cSrcweir rtl::OUString suKeyName = rtl::OUString::createFromAscii( "FILE" ); 306*cdf0e10cSrcweir aBootstrap.getFrom( suKeyName, suValue ); 307*cdf0e10cSrcweir printUString( suValue ); 308*cdf0e10cSrcweir sal_Int32 nCompare = suValue.compareTo( rtl::OUString::createFromAscii("pseudo file") ); 309*cdf0e10cSrcweir 310*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("<Bootstrap('pseudo')>.getFrom('FILE', ...) result is unexpected.", nCompare == 0); 311*cdf0e10cSrcweir } 312*cdf0e10cSrcweir void getFrom_004_1() 313*cdf0e10cSrcweir { 314*cdf0e10cSrcweir // get the same key out of the default context 315*cdf0e10cSrcweir rtl::OUString suKeyName = rtl::OUString::createFromAscii( "FILE" ); 316*cdf0e10cSrcweir rtl::OUString suGetValue; 317*cdf0e10cSrcweir Bootstrap::get( suKeyName, suGetValue ); 318*cdf0e10cSrcweir printUString( suGetValue ); 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("Bootstrap::get('FILE', ...)", suGetValue.compareTo( rtl::OUString::createFromAscii("testshl2 file") ) == 0 ); 321*cdf0e10cSrcweir } 322*cdf0e10cSrcweir 323*cdf0e10cSrcweir /** helper function: return the child process's ret value( typedef sal_uInt32 oslProcessExitCode;) 324*cdf0e10cSrcweir * param1 is the process's name(only file name, not include path) 325*cdf0e10cSrcweir */ 326*cdf0e10cSrcweir oslProcessExitCode ini_execProcess( const sal_Char* process_name, const sal_Char * flag ) 327*cdf0e10cSrcweir { 328*cdf0e10cSrcweir rtl::OUString suCWD = getModulePath(); 329*cdf0e10cSrcweir oslProcess hProcess = NULL; 330*cdf0e10cSrcweir rtl::OUString suFileURL = suCWD; 331*cdf0e10cSrcweir suFileURL += rtl::OUString::createFromAscii("/") + rtl::OUString::createFromAscii(process_name) ; 332*cdf0e10cSrcweir #if defined(WNT) || defined(OS2) 333*cdf0e10cSrcweir suFileURL += rtl::OUString::createFromAscii(".exe"); 334*cdf0e10cSrcweir #endif 335*cdf0e10cSrcweir const int nParameterCount = 3; 336*cdf0e10cSrcweir rtl_uString* pParameters[ nParameterCount ]; 337*cdf0e10cSrcweir OUString suFlag( OUString::createFromAscii(flag) ); 338*cdf0e10cSrcweir OUString suEnv1( OUString::createFromAscii("-env:UNO_SERVICES=service.rdb")); 339*cdf0e10cSrcweir OUString suIniname = t_getSourcePath("rtl"); 340*cdf0e10cSrcweir printUString( suIniname, "rtl path:"); 341*cdf0e10cSrcweir //OUString suEnv2( OUString::createFromAscii("-env:MYENV=bootstrap_process")); 342*cdf0e10cSrcweir 343*cdf0e10cSrcweir pParameters[0] = suFlag.pData; 344*cdf0e10cSrcweir pParameters[1] = suEnv1.pData; 345*cdf0e10cSrcweir // the custom ini/rc file's URL 346*cdf0e10cSrcweir pParameters[2] = suIniname.pData; 347*cdf0e10cSrcweir 348*cdf0e10cSrcweir oslProcessError osl_error = osl_executeProcess( 349*cdf0e10cSrcweir suFileURL.pData, 350*cdf0e10cSrcweir pParameters, 351*cdf0e10cSrcweir nParameterCount, 352*cdf0e10cSrcweir osl_Process_WAIT, 353*cdf0e10cSrcweir 0, 354*cdf0e10cSrcweir suCWD.pData, 355*cdf0e10cSrcweir NULL, 356*cdf0e10cSrcweir 0, 357*cdf0e10cSrcweir &hProcess ); 358*cdf0e10cSrcweir 359*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE 360*cdf0e10cSrcweir ( 361*cdf0e10cSrcweir "osl_createProcess failed", 362*cdf0e10cSrcweir osl_error == osl_Process_E_None 363*cdf0e10cSrcweir ); 364*cdf0e10cSrcweir osl_joinProcess(hProcess); 365*cdf0e10cSrcweir oslProcessInfo* pInfo = new oslProcessInfo; 366*cdf0e10cSrcweir pInfo->Size = sizeof( oslProcessInfo ); 367*cdf0e10cSrcweir osl_error = osl_getProcessInfo( hProcess, osl_Process_EXITCODE, pInfo ); 368*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE 369*cdf0e10cSrcweir ( 370*cdf0e10cSrcweir "osl_getProcessInfo returned with failure", 371*cdf0e10cSrcweir osl_Process_E_None == osl_error 372*cdf0e10cSrcweir ); 373*cdf0e10cSrcweir 374*cdf0e10cSrcweir t_print("the exit code is %d.\n", pInfo->Code ); 375*cdf0e10cSrcweir oslProcessExitCode nCode = pInfo->Code; 376*cdf0e10cSrcweir delete pInfo; 377*cdf0e10cSrcweir return nCode; 378*cdf0e10cSrcweir } 379*cdf0e10cSrcweir 380*cdf0e10cSrcweir void getFrom_005_1() 381*cdf0e10cSrcweir { 382*cdf0e10cSrcweir oslProcessExitCode nExitCode = ini_execProcess( "bootstrap_process", "1" ); 383*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("Parameters passed by command line can not be gotten!", 384*cdf0e10cSrcweir nExitCode == 10 ); 385*cdf0e10cSrcweir } 386*cdf0e10cSrcweir void getFrom_005_2() 387*cdf0e10cSrcweir { 388*cdf0e10cSrcweir oslProcessExitCode nExitCode = ini_execProcess( "bootstrap_process", "2" ); 389*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("Parameters passed by .ini/rc file can not be gotten!", 390*cdf0e10cSrcweir nExitCode == 20 ); 391*cdf0e10cSrcweir } 392*cdf0e10cSrcweir void getFrom_005_3() 393*cdf0e10cSrcweir { 394*cdf0e10cSrcweir #if (defined WNT) || (defined SOLARIS) 395*cdf0e10cSrcweir putenv(const_cast< char * >("QADEV_BOOTSTRAP=sun&ms")); 396*cdf0e10cSrcweir #else 397*cdf0e10cSrcweir setenv("QADEV_BOOTSTRAP", "sun&ms", 0); 398*cdf0e10cSrcweir #endif 399*cdf0e10cSrcweir oslProcessExitCode nExitCode = ini_execProcess( "bootstrap_process", "3" ); 400*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("Parameters passed by environment variables can not be gotten!", 401*cdf0e10cSrcweir nExitCode == 30 ); 402*cdf0e10cSrcweir } 403*cdf0e10cSrcweir void getFrom_005_4() 404*cdf0e10cSrcweir { 405*cdf0e10cSrcweir oslProcessExitCode nExitCode = ini_execProcess( "bootstrap_process", "4" ); 406*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("Parameters passed by customed .ini/rc file can not be gotten!", 407*cdf0e10cSrcweir nExitCode == 40 ); 408*cdf0e10cSrcweir } 409*cdf0e10cSrcweir void getFrom_005_5() 410*cdf0e10cSrcweir { 411*cdf0e10cSrcweir oslProcessExitCode nExitCode = ini_execProcess( "bootstrap_process", "5" ); 412*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("Parameters passed by inheritance can not be gotten!", 413*cdf0e10cSrcweir nExitCode == 50 ); 414*cdf0e10cSrcweir } 415*cdf0e10cSrcweir void getFrom_005_6() 416*cdf0e10cSrcweir { 417*cdf0e10cSrcweir oslProcessExitCode nExitCode = ini_execProcess( "bootstrap_process", "6" ); 418*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("Parameters passed by default can not be gotten!", 419*cdf0e10cSrcweir nExitCode == 60 ); 420*cdf0e10cSrcweir } 421*cdf0e10cSrcweir 422*cdf0e10cSrcweir CPPUNIT_TEST_SUITE(getFrom); 423*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_001); 424*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_002); 425*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_003); 426*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_004); 427*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_004_1); 428*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_005_1); 429*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_005_2); 430*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_005_3); 431*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_005_4); 432*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_005_5); 433*cdf0e10cSrcweir CPPUNIT_TEST(getFrom_005_6); 434*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END(); 435*cdf0e10cSrcweir }; // class getFrom 436*cdf0e10cSrcweir 437*cdf0e10cSrcweir class setIniFilename : public CppUnit::TestFixture 438*cdf0e10cSrcweir { 439*cdf0e10cSrcweir public: 440*cdf0e10cSrcweir // initialise your test code values here. 441*cdf0e10cSrcweir void setUp() 442*cdf0e10cSrcweir { 443*cdf0e10cSrcweir } 444*cdf0e10cSrcweir 445*cdf0e10cSrcweir void tearDown() 446*cdf0e10cSrcweir { 447*cdf0e10cSrcweir } 448*cdf0e10cSrcweir 449*cdf0e10cSrcweir void setIniFilename_001() 450*cdf0e10cSrcweir { 451*cdf0e10cSrcweir Bootstrap aBootstrap; 452*cdf0e10cSrcweir 453*cdf0e10cSrcweir rtl::OUString suGetIniname; 454*cdf0e10cSrcweir aBootstrap.getIniName( suGetIniname ); 455*cdf0e10cSrcweir //which should be .....testshl2rc 456*cdf0e10cSrcweir //printUString( suGetIniname ); 457*cdf0e10cSrcweir 458*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(PSEUDO_INI); 459*cdf0e10cSrcweir Bootstrap::setIniFilename( suIniname ); 460*cdf0e10cSrcweir 461*cdf0e10cSrcweir rtl::OUString suGetname; 462*cdf0e10cSrcweir aBootstrap.getIniName( suGetname ); 463*cdf0e10cSrcweir 464*cdf0e10cSrcweir printUString( suGetname ); 465*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("setIniFilename then get it.", suGetname.compareTo( suIniname ) == 0 466*cdf0e10cSrcweir && suGetname.compareTo( suGetIniname ) != 0 ); 467*cdf0e10cSrcweir } 468*cdf0e10cSrcweir 469*cdf0e10cSrcweir void setIniFilename_002() 470*cdf0e10cSrcweir { 471*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 472*cdf0e10cSrcweir // CPPUNIT_ASSERT_MESSAGE("test failed, Bootstrap ini does not exist.", t_fileExist(suIniname ) == true); 473*cdf0e10cSrcweir 474*cdf0e10cSrcweir Bootstrap::setIniFilename( suIniname ); 475*cdf0e10cSrcweir //rtl_bootstrap_args_open( suIniname.pData ); 476*cdf0e10cSrcweir rtl::OUString suGetname; 477*cdf0e10cSrcweir rtl::OUString suValuename = rtl::OUString::createFromAscii( "INHERITED_VALUE" ); 478*cdf0e10cSrcweir //aBootstrap.getFrom( suValuename, suGetname ); 479*cdf0e10cSrcweir Bootstrap::get( suValuename, suGetname ); 480*cdf0e10cSrcweir printUString( suGetname ); 481*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("setIniFilename and get value of the argument.", suGetname.getLength() != 0 ); 482*cdf0e10cSrcweir } 483*cdf0e10cSrcweir 484*cdf0e10cSrcweir CPPUNIT_TEST_SUITE(setIniFilename); 485*cdf0e10cSrcweir CPPUNIT_TEST(setIniFilename_001); 486*cdf0e10cSrcweir CPPUNIT_TEST(setIniFilename_002); 487*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END(); 488*cdf0e10cSrcweir }; // class setIniFilename 489*cdf0e10cSrcweir 490*cdf0e10cSrcweir class getHandle : public CppUnit::TestFixture 491*cdf0e10cSrcweir { 492*cdf0e10cSrcweir public: 493*cdf0e10cSrcweir // initialise your test code values here. 494*cdf0e10cSrcweir void setUp() 495*cdf0e10cSrcweir { 496*cdf0e10cSrcweir } 497*cdf0e10cSrcweir 498*cdf0e10cSrcweir void tearDown() 499*cdf0e10cSrcweir { 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir void getHandle_001() 503*cdf0e10cSrcweir { 504*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 505*cdf0e10cSrcweir Bootstrap aBootstrap; 506*cdf0e10cSrcweir rtlBootstrapHandle bsHandle = aBootstrap.getHandle(); 507*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("getHandle should return 0 if the bootstrap has no ini file!", bsHandle == 0 ); 508*cdf0e10cSrcweir } 509*cdf0e10cSrcweir void getHandle_002() 510*cdf0e10cSrcweir { 511*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(PSEUDO_INI); 512*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname ); 513*cdf0e10cSrcweir 514*cdf0e10cSrcweir rtlBootstrapHandle bsHandle = aBootstrap.getHandle(); 515*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("getHandle return NULL!", bsHandle != 0); 516*cdf0e10cSrcweir 517*cdf0e10cSrcweir //rtl::OUString iniName; 518*cdf0e10cSrcweir //rtl_bootstrap_get_iniName_from_handle( bsHandle, &iniName.pData ); 519*cdf0e10cSrcweir 520*cdf0e10cSrcweir rtl::OUString suValue; 521*cdf0e10cSrcweir rtl::OUString suKeyName = rtl::OUString::createFromAscii( "PSEUDOFILE" ); 522*cdf0e10cSrcweir rtl_bootstrap_get_from_handle(bsHandle, suKeyName.pData, &suValue.pData, NULL); 523*cdf0e10cSrcweir printUString( suValue); 524*cdf0e10cSrcweir 525*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("Can not use the handle which is returned by getHandle!", suValue.equals( rtl::OUString::createFromAscii("be pseudo") ) == sal_True ); 526*cdf0e10cSrcweir 527*cdf0e10cSrcweir // CPPUNIT_ASSERT_MESSAGE("Can not use the handle which is returned by getHandle!", 528*cdf0e10cSrcweir // suGetname.equalsIgnoreAsciiCase( iniName ) == sal_True ); 529*cdf0e10cSrcweir } 530*cdf0e10cSrcweir 531*cdf0e10cSrcweir CPPUNIT_TEST_SUITE(getHandle); 532*cdf0e10cSrcweir CPPUNIT_TEST(getHandle_001); 533*cdf0e10cSrcweir CPPUNIT_TEST(getHandle_002); 534*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END(); 535*cdf0e10cSrcweir }; // class getHandle 536*cdf0e10cSrcweir 537*cdf0e10cSrcweir class set : public CppUnit::TestFixture 538*cdf0e10cSrcweir { 539*cdf0e10cSrcweir public: 540*cdf0e10cSrcweir // initialise your test code values here. 541*cdf0e10cSrcweir void setUp() 542*cdf0e10cSrcweir { 543*cdf0e10cSrcweir } 544*cdf0e10cSrcweir 545*cdf0e10cSrcweir void tearDown() 546*cdf0e10cSrcweir { 547*cdf0e10cSrcweir } 548*cdf0e10cSrcweir 549*cdf0e10cSrcweir void set_001() 550*cdf0e10cSrcweir { 551*cdf0e10cSrcweir //in ini fle, INHERITED_VALUE=inherited_value 552*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 553*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname); 554*cdf0e10cSrcweir rtl::OUString suName = rtl::OUString::createFromAscii( "INHERITED_VALUE" ); 555*cdf0e10cSrcweir rtl::OUString suValue = rtl::OUString::createFromAscii( "ok" ); 556*cdf0e10cSrcweir // set to another value 557*cdf0e10cSrcweir Bootstrap::set( suName, suValue ); 558*cdf0e10cSrcweir rtl::OUString suGetValue; 559*cdf0e10cSrcweir Bootstrap::get( suName, suGetValue); 560*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("set and get argument failed.", suGetValue.compareTo(suValue) == 0 ); 561*cdf0e10cSrcweir } 562*cdf0e10cSrcweir void set_002() 563*cdf0e10cSrcweir { 564*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 565*cdf0e10cSrcweir Bootstrap myBootstrap( suIniname); 566*cdf0e10cSrcweir rtl::OUString suName = rtl::OUString::createFromAscii( "INHERITED_VALUE" ); 567*cdf0e10cSrcweir rtl::OUString suGetOrientValue; 568*cdf0e10cSrcweir Bootstrap::get( suName, suGetOrientValue); 569*cdf0e10cSrcweir // ?? INHERITED_VALUE = ok now, which is set in set_001 570*cdf0e10cSrcweir printUString( suGetOrientValue ); 571*cdf0e10cSrcweir 572*cdf0e10cSrcweir rtl::OUString suValue = rtl::OUString::createFromAscii( TESTSHL2_INI ); 573*cdf0e10cSrcweir // set to another value 574*cdf0e10cSrcweir Bootstrap::set( suName, suValue ); 575*cdf0e10cSrcweir rtl::OUString suGetValue; 576*cdf0e10cSrcweir Bootstrap::get( suName, suGetValue); 577*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("set and get argument failed.", suGetValue.compareTo(suValue) == 0 ); 578*cdf0e10cSrcweir } 579*cdf0e10cSrcweir 580*cdf0e10cSrcweir CPPUNIT_TEST_SUITE(set); 581*cdf0e10cSrcweir CPPUNIT_TEST(set_001); 582*cdf0e10cSrcweir CPPUNIT_TEST(set_002); 583*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END(); 584*cdf0e10cSrcweir }; // class set 585*cdf0e10cSrcweir 586*cdf0e10cSrcweir class expandMacrosFrom : public CppUnit::TestFixture 587*cdf0e10cSrcweir { 588*cdf0e10cSrcweir public: 589*cdf0e10cSrcweir void setUp() 590*cdf0e10cSrcweir { 591*cdf0e10cSrcweir } 592*cdf0e10cSrcweir 593*cdf0e10cSrcweir void tearDown() 594*cdf0e10cSrcweir { 595*cdf0e10cSrcweir } 596*cdf0e10cSrcweir void expandMacrosFrom_001() 597*cdf0e10cSrcweir { 598*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 599*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname); 600*cdf0e10cSrcweir rtl::OUString suMacro = rtl::OUString::createFromAscii( "$MYVAR/expand1" ); 601*cdf0e10cSrcweir //printUString( suMacro ); 602*cdf0e10cSrcweir //expandMacro now 603*cdf0e10cSrcweir aBootstrap.expandMacrosFrom( suMacro ); 604*cdf0e10cSrcweir rtl::OUString suExpectedMacro = rtl::OUString::createFromAscii( "src680_test/expand1" ); 605*cdf0e10cSrcweir //printUString( suMacro ); 606*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("expandMacrosFrom failed.", suMacro.compareTo(suExpectedMacro) == 0 ); 607*cdf0e10cSrcweir } 608*cdf0e10cSrcweir 609*cdf0e10cSrcweir /** here a special macro should expand 610*cdf0e10cSrcweir * if rtlrc is under sal/qa/rtl/bootstrap/, "${rtlrc:Bootstrap:RTLVALUE}" could be expanded 611*cdf0e10cSrcweir * else rtlrc is under solver/680/unxlngi4.pro/bin/, "${file:/// ....solver/680/unxlngi4.pro/bin/rtlrc:Bootstrap:RTLVALUE}" 612*cdf0e10cSrcweir * could not be expanded 613*cdf0e10cSrcweir */ 614*cdf0e10cSrcweir void expandMacrosFrom_002() 615*cdf0e10cSrcweir { 616*cdf0e10cSrcweir // Build a string with '${rtl.ini:RTLVALUE}' and try to expand it. 617*cdf0e10cSrcweir // In function 'create_rtlrc() is the content of the rtl.ini file. 618*cdf0e10cSrcweir 619*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 620*cdf0e10cSrcweir t_print("inifile is:"); 621*cdf0e10cSrcweir printUString( suIniname ); 622*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname) ; 623*cdf0e10cSrcweir rtl::OUString suMacro = rtl::OUString::createFromAscii( "${" ); //rtlrc:Bootstrap:RTLVALUE}"); 624*cdf0e10cSrcweir 625*cdf0e10cSrcweir rtl::OUString aDirURL = OUString::createFromAscii( "$ORIGIN"); 626*cdf0e10cSrcweir aDirURL += OUString::createFromAscii( "/"); 627*cdf0e10cSrcweir aDirURL += OUString::createFromAscii( "rtl" ); 628*cdf0e10cSrcweir #if defined(WNT) || defined(OS2) 629*cdf0e10cSrcweir aDirURL += rtl::OUString::createFromAscii(".ini"); 630*cdf0e10cSrcweir #else 631*cdf0e10cSrcweir aDirURL += rtl::OUString::createFromAscii("rc"); 632*cdf0e10cSrcweir #endif 633*cdf0e10cSrcweir 634*cdf0e10cSrcweir suMacro += aDirURL;//t_getSourcePath("rtl"); 635*cdf0e10cSrcweir suMacro += rtl::OUString::createFromAscii( "::RTLVALUE}"); 636*cdf0e10cSrcweir 637*cdf0e10cSrcweir t_print("created macro is: "); 638*cdf0e10cSrcweir printUString( suMacro ); 639*cdf0e10cSrcweir //expandMacro now 640*cdf0e10cSrcweir aBootstrap.expandMacrosFrom( suMacro ); 641*cdf0e10cSrcweir t_print("expanded macro is:"); 642*cdf0e10cSrcweir printUString( suMacro ); 643*cdf0e10cSrcweir rtl::OUString suExpectedMacro = rtl::OUString::createFromAscii( "qadev17" ); 644*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("failed, can't expand '${file:///.../" SAL_CONFIGFILE("rtl") "::RTLVALUE}' to 'qadev17'", suMacro.compareTo(suExpectedMacro) == 0 ); 645*cdf0e10cSrcweir } 646*cdf0e10cSrcweir void expandMacrosFrom_002_1() 647*cdf0e10cSrcweir { 648*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 649*cdf0e10cSrcweir t_print("inifile is:"); 650*cdf0e10cSrcweir printUString( suIniname ); 651*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname); 652*cdf0e10cSrcweir 653*cdf0e10cSrcweir rtl::OUString suMacro; 654*cdf0e10cSrcweir // just a simple test, if this really work. 655*cdf0e10cSrcweir aBootstrap.getFrom(rtl::OUString::createFromAscii( "SOFROMVALUE2" ), suMacro ); 656*cdf0e10cSrcweir t_print("SOFROMVALUE2:"); 657*cdf0e10cSrcweir printUString( suMacro ); 658*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("'SOFROMVALUE2' seems to do not exist.", suMacro.getLength() > 0 ); 659*cdf0e10cSrcweir 660*cdf0e10cSrcweir aBootstrap.getFrom(rtl::OUString::createFromAscii( "SOFROMVALUE" ), suMacro ); 661*cdf0e10cSrcweir 662*cdf0e10cSrcweir t_print("SOFROMVALUE:"); 663*cdf0e10cSrcweir printUString( suMacro ); 664*cdf0e10cSrcweir 665*cdf0e10cSrcweir //expandMacro now 666*cdf0e10cSrcweir // seems to be, that getFrom() already expand the string 667*cdf0e10cSrcweir // t_print("expanded macro is:"); 668*cdf0e10cSrcweir // aBootstrap.expandMacrosFrom( suMacro ); 669*cdf0e10cSrcweir // printUString( suMacro ); 670*cdf0e10cSrcweir rtl::OUString suExpectedMacro = rtl::OUString::createFromAscii( "src680_qadev" ); 671*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("failed, can't expand '${" SAL_CONFIGFILE("rtl") "::SOVALUE}' to 'src680_qadev'", suMacro.compareTo(suExpectedMacro) == 0 ); 672*cdf0e10cSrcweir } 673*cdf0e10cSrcweir void expandMacrosFrom_002_2() 674*cdf0e10cSrcweir { 675*cdf0e10cSrcweir // test, to read and expand SOFROMVALUE3 676*cdf0e10cSrcweir // SOFROMVALUE3 is 'rtl(.ini|rc)::TESTSHL_SOVALUE' which should expand to 'rtlfile' if all is ok. 677*cdf0e10cSrcweir 678*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 679*cdf0e10cSrcweir t_print("inifile is:"); 680*cdf0e10cSrcweir printUString( suIniname ); 681*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname); 682*cdf0e10cSrcweir 683*cdf0e10cSrcweir rtl::OUString suMacro; 684*cdf0e10cSrcweir aBootstrap.getFrom(rtl::OUString::createFromAscii( "SOFROMVALUE3" ), suMacro ); 685*cdf0e10cSrcweir 686*cdf0e10cSrcweir t_print("SOFROMVALUE3:"); 687*cdf0e10cSrcweir printUString( suMacro ); 688*cdf0e10cSrcweir 689*cdf0e10cSrcweir if (suMacro.equals(rtl::OUString::createFromAscii("testshl2_file") ) == sal_True) 690*cdf0e10cSrcweir { 691*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("Value 'SOFROMVALUE3' is read from the wrong ini file.", 0 ); 692*cdf0e10cSrcweir } 693*cdf0e10cSrcweir else 694*cdf0e10cSrcweir { 695*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("SOFROMVALUE3 should contain 'rtlfile'.", suMacro.equals(rtl::OUString::createFromAscii("rtlfile") ) == sal_True ); 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir } 698*cdf0e10cSrcweir //? I don't know if this is a right test. 699*cdf0e10cSrcweir // void expandMacrosFrom_002_3() 700*cdf0e10cSrcweir // { 701*cdf0e10cSrcweir // // test, to read and expand SOFROMVALUE4 702*cdf0e10cSrcweir // // SOFROMVALUE4 is 'rtl(.ini|rc):Other_Section:TESTSHL_SOVALUE' which should expand to '' if all is ok. 703*cdf0e10cSrcweir // 704*cdf0e10cSrcweir // rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 705*cdf0e10cSrcweir // t_print("inifile is:"); 706*cdf0e10cSrcweir // printUString( suIniname ); 707*cdf0e10cSrcweir // Bootstrap aBootstrap( suIniname); 708*cdf0e10cSrcweir // 709*cdf0e10cSrcweir // rtl::OUString suMacro; 710*cdf0e10cSrcweir // aBootstrap.getFrom(rtl::OUString::createFromAscii( "SOFROMVALUE4" ), suMacro ); 711*cdf0e10cSrcweir // 712*cdf0e10cSrcweir // t_print("SOFROMVALUE4:"); 713*cdf0e10cSrcweir // printUString( suMacro ); 714*cdf0e10cSrcweir // 715*cdf0e10cSrcweir // if (suMacro.equals(rtl::OUString::createFromAscii("testshl2_file") ) == sal_True) 716*cdf0e10cSrcweir // { 717*cdf0e10cSrcweir // CPPUNIT_ASSERT_MESSAGE("Value 'SOFROMVALUE4' is read from the wrong section out of the wrong ini file.", 0 ); 718*cdf0e10cSrcweir // } 719*cdf0e10cSrcweir // else if (suMacro.equals(rtl::OUString::createFromAscii("testshl2_file_other") ) == sal_True) 720*cdf0e10cSrcweir // { 721*cdf0e10cSrcweir // CPPUNIT_ASSERT_MESSAGE("Value 'SOFROMVALUE4' is read from the wrong ini file.", 0 ); 722*cdf0e10cSrcweir // } 723*cdf0e10cSrcweir // else 724*cdf0e10cSrcweir // { 725*cdf0e10cSrcweir // CPPUNIT_ASSERT_MESSAGE("Value 'SOFROMVALUE4' should contain 'rtlfile_other'.", suMacro.equals(rtl::OUString::createFromAscii("rtlfile_other") ) == sal_True ); 726*cdf0e10cSrcweir // } 727*cdf0e10cSrcweir // } 728*cdf0e10cSrcweir void expandMacrosFrom_003() 729*cdf0e10cSrcweir { 730*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 731*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname); 732*cdf0e10cSrcweir rtl::OUString suMacro[4]; 733*cdf0e10cSrcweir suMacro[0] = rtl::OUString::createFromAscii( "$SYSUSERCONFIG" ); 734*cdf0e10cSrcweir suMacro[1] = rtl::OUString::createFromAscii( "$SYSUSERHOME" ); 735*cdf0e10cSrcweir suMacro[2] = rtl::OUString::createFromAscii( "$SYSBINDIR" ); 736*cdf0e10cSrcweir suMacro[3] = rtl::OUString::createFromAscii( "$ORIGIN" ); 737*cdf0e10cSrcweir 738*cdf0e10cSrcweir for ( int i = 0; i < 4; i++ ) 739*cdf0e10cSrcweir { 740*cdf0e10cSrcweir aBootstrap.expandMacrosFrom( suMacro[i] ); 741*cdf0e10cSrcweir printUString(suMacro[i]); 742*cdf0e10cSrcweir } 743*cdf0e10cSrcweir // printUString( t_getSourcePath("") ); 744*cdf0e10cSrcweir // CPPUNIT_ASSERT_MESSAGE("some integral variables.", suMacro[3].equalsIgnoreAsciiCase(t_getSourcePath("")) == sal_True ); 745*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("some integral variables.", suMacro[0].getLength() > 0 && 746*cdf0e10cSrcweir suMacro[1].getLength() > 0 && 747*cdf0e10cSrcweir suMacro[2].getLength() > 0 && 748*cdf0e10cSrcweir suMacro[3].getLength() > 0); 749*cdf0e10cSrcweir } 750*cdf0e10cSrcweir 751*cdf0e10cSrcweir void testRecursion() { 752*cdf0e10cSrcweir rtl::OUString t(RTL_CONSTASCII_USTRINGPARAM("$RECURSIVE")); 753*cdf0e10cSrcweir Bootstrap(t_getSourcePath(TESTSHL2_INI)).expandMacrosFrom(t); 754*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( 755*cdf0e10cSrcweir "recursion detection", 756*cdf0e10cSrcweir t.equalsAsciiL( 757*cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("***RECURSION DETECTED***"))); 758*cdf0e10cSrcweir } 759*cdf0e10cSrcweir 760*cdf0e10cSrcweir void testLink() { 761*cdf0e10cSrcweir rtl::OUString t(RTL_CONSTASCII_USTRINGPARAM("$LINKED")); 762*cdf0e10cSrcweir Bootstrap(t_getSourcePath(TESTSHL2_INI)).expandMacrosFrom(t); 763*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( 764*cdf0e10cSrcweir "link file", 765*cdf0e10cSrcweir t.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("qadev17"))); 766*cdf0e10cSrcweir } 767*cdf0e10cSrcweir 768*cdf0e10cSrcweir void testOverride() { 769*cdf0e10cSrcweir rtl::OUString t1( 770*cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM( 771*cdf0e10cSrcweir "${.override:$ORIGIN/" SAL_CONFIGFILE("rtl") ":ORIGIN}")); 772*cdf0e10cSrcweir Bootstrap(t_getSourcePath("rtl")).expandMacrosFrom(t1); 773*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( 774*cdf0e10cSrcweir "override ORIGIN", 775*cdf0e10cSrcweir t1.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("direct"))); 776*cdf0e10cSrcweir rtl::OUString t2( 777*cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM( 778*cdf0e10cSrcweir "${.override:$ORIGIN/" SAL_CONFIGFILE("none") ":MYVAR}")); 779*cdf0e10cSrcweir Bootstrap::expandMacros(t2); 780*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( 781*cdf0e10cSrcweir "override MYVAR", 782*cdf0e10cSrcweir t2.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("src680_test"))); 783*cdf0e10cSrcweir } 784*cdf0e10cSrcweir 785*cdf0e10cSrcweir void testNonexisting() { 786*cdf0e10cSrcweir rtl::OUString t( 787*cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM( 788*cdf0e10cSrcweir "${$ORIGIN/" SAL_CONFIGFILE("none") ":MYVAR}")); 789*cdf0e10cSrcweir Bootstrap::expandMacros(t); 790*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( 791*cdf0e10cSrcweir "nonexisting", 792*cdf0e10cSrcweir t.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("src680_test"))); 793*cdf0e10cSrcweir } 794*cdf0e10cSrcweir 795*cdf0e10cSrcweir void testSection() { 796*cdf0e10cSrcweir rtl::OUStringBuffer b; 797*cdf0e10cSrcweir b.appendAscii(RTL_CONSTASCII_STRINGPARAM("${")); 798*cdf0e10cSrcweir rtl::OUString p(t_getSourcePath(TESTSHL2_INI)); 799*cdf0e10cSrcweir for (sal_Int32 i = 0; i < p.getLength(); ++i) { 800*cdf0e10cSrcweir if (p[i] != 'u') { 801*cdf0e10cSrcweir b.append(static_cast< sal_Unicode >('\\')); 802*cdf0e10cSrcweir } 803*cdf0e10cSrcweir b.append(p[i]); 804*cdf0e10cSrcweir } 805*cdf0e10cSrcweir b.appendAscii(RTL_CONSTASCII_STRINGPARAM(":Other_Section:EXPAND}")); 806*cdf0e10cSrcweir rtl::OUString t(b.makeStringAndClear()); 807*cdf0e10cSrcweir Bootstrap(t_getSourcePath(TESTSHL2_INI)).expandMacrosFrom(t); 808*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( 809*cdf0e10cSrcweir "section expansion", 810*cdf0e10cSrcweir t.equalsAsciiL( 811*cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("$FILE"))); 812*cdf0e10cSrcweir // the correct answer would be "testshl2 file" instead, but 813*cdf0e10cSrcweir // expansion including a section currently erroneously does not 814*cdf0e10cSrcweir // recursively expand macros in the resulting replacement text 815*cdf0e10cSrcweir } 816*cdf0e10cSrcweir 817*cdf0e10cSrcweir CPPUNIT_TEST_SUITE(expandMacrosFrom); 818*cdf0e10cSrcweir CPPUNIT_TEST(expandMacrosFrom_001); 819*cdf0e10cSrcweir CPPUNIT_TEST(expandMacrosFrom_002); 820*cdf0e10cSrcweir CPPUNIT_TEST(expandMacrosFrom_002_1); 821*cdf0e10cSrcweir CPPUNIT_TEST(expandMacrosFrom_002_2); 822*cdf0e10cSrcweir //? CPPUNIT_TEST(expandMacrosFrom_002_3); 823*cdf0e10cSrcweir CPPUNIT_TEST(expandMacrosFrom_003); 824*cdf0e10cSrcweir CPPUNIT_TEST(testRecursion); 825*cdf0e10cSrcweir CPPUNIT_TEST(testLink); 826*cdf0e10cSrcweir CPPUNIT_TEST(testOverride); 827*cdf0e10cSrcweir CPPUNIT_TEST(testNonexisting); 828*cdf0e10cSrcweir CPPUNIT_TEST(testSection); 829*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END(); 830*cdf0e10cSrcweir }; // class expandMacrosFrom 831*cdf0e10cSrcweir 832*cdf0e10cSrcweir class expandMacros : public CppUnit::TestFixture 833*cdf0e10cSrcweir { 834*cdf0e10cSrcweir public: 835*cdf0e10cSrcweir // initialise your test code values here. 836*cdf0e10cSrcweir void setUp() 837*cdf0e10cSrcweir { 838*cdf0e10cSrcweir } 839*cdf0e10cSrcweir 840*cdf0e10cSrcweir void tearDown() 841*cdf0e10cSrcweir { 842*cdf0e10cSrcweir } 843*cdf0e10cSrcweir 844*cdf0e10cSrcweir void expandMacros_001() 845*cdf0e10cSrcweir { 846*cdf0e10cSrcweir rtl::OUString suIniname = t_getSourcePath(TESTSHL2_INI); 847*cdf0e10cSrcweir Bootstrap aBootstrap( suIniname) ; 848*cdf0e10cSrcweir rtl::OUString suMacro = rtl::OUString::createFromAscii( "$INHERITED_VALUE/well" ); 849*cdf0e10cSrcweir Bootstrap::expandMacros( suMacro ); 850*cdf0e10cSrcweir 851*cdf0e10cSrcweir rtl::OUString suName = rtl::OUString::createFromAscii( "INHERITED_VALUE" ); 852*cdf0e10cSrcweir OUString suGetValue; 853*cdf0e10cSrcweir Bootstrap::get( suName, suGetValue ); 854*cdf0e10cSrcweir suGetValue += OUString::createFromAscii( "/well" ); 855*cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("expandMacros failed.", suGetValue.compareTo(suMacro) == 0 ); 856*cdf0e10cSrcweir } 857*cdf0e10cSrcweir 858*cdf0e10cSrcweir CPPUNIT_TEST_SUITE(expandMacros); 859*cdf0e10cSrcweir CPPUNIT_TEST(expandMacros_001); 860*cdf0e10cSrcweir // CPPUNIT_TEST(expandMacros_002); 861*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END(); 862*cdf0e10cSrcweir }; // class expandMacros 863*cdf0e10cSrcweir 864*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Bootstrap::ctor, "rtl_Bootstrap"); 865*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Bootstrap::getFrom, "rtl_Bootstrap"); 866*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Bootstrap::setIniFilename, "rtl_Bootstrap"); 867*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Bootstrap::getHandle, "rtl_Bootstrap"); 868*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Bootstrap::set, "rtl_Bootstrap"); 869*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Bootstrap::expandMacrosFrom, "rtl_Bootstrap"); 870*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Bootstrap::expandMacros, "rtl_Bootstrap"); 871*cdf0e10cSrcweir 872*cdf0e10cSrcweir } // namespace rtl_Bootstrap 873*cdf0e10cSrcweir 874*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 875*cdf0e10cSrcweir 876*cdf0e10cSrcweir // this macro creates an empty function, which will called by the RegisterAllFunctions() 877*cdf0e10cSrcweir // to let the user the possibility to also register some functions by hand. 878*cdf0e10cSrcweir // NOADDITIONAL; 879*cdf0e10cSrcweir 880*cdf0e10cSrcweir 881*cdf0e10cSrcweir // Here are some helpers, which create a new file 'rtlrc' at the executable path position 882*cdf0e10cSrcweir // and fill the file with some information. 883*cdf0e10cSrcweir // static rtl::OUString getExecutableDirectory() 884*cdf0e10cSrcweir // { 885*cdf0e10cSrcweir // rtl::OUString fileName; 886*cdf0e10cSrcweir // osl_getExecutableFile(&fileName.pData); 887*cdf0e10cSrcweir // 888*cdf0e10cSrcweir // sal_Int32 nDirEnd = fileName.lastIndexOf('/'); 889*cdf0e10cSrcweir // 890*cdf0e10cSrcweir // OSL_ENSURE(nDirEnd >= 0, "Cannot locate executable directory"); 891*cdf0e10cSrcweir // 892*cdf0e10cSrcweir // rtl::OUString aDirURL = fileName.copy(0, nDirEnd); 893*cdf0e10cSrcweir // return aDirURL; 894*cdf0e10cSrcweir // } 895*cdf0e10cSrcweir 896*cdf0e10cSrcweir static void removeAndCreateFile(rtl::OUString const& _suFileURL, rtl::OString const& _sContent) 897*cdf0e10cSrcweir { 898*cdf0e10cSrcweir osl::File::remove(_suFileURL); 899*cdf0e10cSrcweir 900*cdf0e10cSrcweir ::std::auto_ptr<osl::File> pFile( new osl::File( _suFileURL ) ); 901*cdf0e10cSrcweir ::osl::FileBase::RC nError = pFile->open( OpenFlag_Write | OpenFlag_Create ); 902*cdf0e10cSrcweir if ( ::osl::FileBase::E_None == nError || ::osl::FileBase::E_EXIST == nError ) 903*cdf0e10cSrcweir { 904*cdf0e10cSrcweir t_print(T_VERBOSE, "%s\n" , OString(_suFileURL, _suFileURL.getLength(), RTL_TEXTENCODING_ASCII_US).getStr()); 905*cdf0e10cSrcweir sal_uInt64 nWritenBytes; 906*cdf0e10cSrcweir pFile->write(_sContent.getStr(), _sContent.getLength(), nWritenBytes); 907*cdf0e10cSrcweir // t_print("nBytes: %ld\n", nBytes); 908*cdf0e10cSrcweir 909*cdf0e10cSrcweir rtl::OString sError = "can't write enough bytes to file"; 910*cdf0e10cSrcweir sError += OString(_suFileURL, _suFileURL.getLength(), RTL_TEXTENCODING_ASCII_US); 911*cdf0e10cSrcweir OSL_ENSURE(nWritenBytes == _sContent.getLength(), sError.getStr()); 912*cdf0e10cSrcweir 913*cdf0e10cSrcweir pFile->close(); 914*cdf0e10cSrcweir } 915*cdf0e10cSrcweir else 916*cdf0e10cSrcweir { 917*cdf0e10cSrcweir rtl::OString sError = "can't create file URL: '"; 918*cdf0e10cSrcweir rtl::OString sFile; 919*cdf0e10cSrcweir sFile <<= _suFileURL; 920*cdf0e10cSrcweir sError += sFile; 921*cdf0e10cSrcweir sError += "' maybe no write access. If it is true with no write access, please create a local environment and start these tests again. rtl::Bootstrap test must quit."; 922*cdf0e10cSrcweir t_print("%s\n", sError.getStr() ); 923*cdf0e10cSrcweir exit(1); 924*cdf0e10cSrcweir } 925*cdf0e10cSrcweir OSL_ASSERT(t_fileExist(_suFileURL) == true); 926*cdf0e10cSrcweir } 927*cdf0e10cSrcweir 928*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 929*cdf0e10cSrcweir static void create_rtlrc() 930*cdf0e10cSrcweir { 931*cdf0e10cSrcweir rtl::OUString aFileURL(getExecutableDirectory()); 932*cdf0e10cSrcweir #if defined(WNT) || defined(OS2) 933*cdf0e10cSrcweir aFileURL += rtl::OUString::createFromAscii("/rtl.ini"); 934*cdf0e10cSrcweir #else 935*cdf0e10cSrcweir aFileURL += rtl::OUString::createFromAscii("/rtlrc"); 936*cdf0e10cSrcweir #endif 937*cdf0e10cSrcweir 938*cdf0e10cSrcweir rtl::OString sLines; 939*cdf0e10cSrcweir sLines += "[Bootstrap]\n"; 940*cdf0e10cSrcweir sLines += "SOVALUE=src680_qadev\n"; 941*cdf0e10cSrcweir sLines += "RTLVALUE=qadev17\n"; 942*cdf0e10cSrcweir sLines += "TESTSHL_SOVALUE=rtlfile\n"; 943*cdf0e10cSrcweir sLines += "RECURSIVE=${$ORIGIN/" SAL_CONFIGFILE("testshl2") ":RECURSIVE}\n"; 944*cdf0e10cSrcweir sLines += "ORIGIN=direct\n"; 945*cdf0e10cSrcweir sLines += "[Other_Section]\n"; 946*cdf0e10cSrcweir sLines += "TESTSHL_SOVALUE=rtlfile_other\n"; 947*cdf0e10cSrcweir 948*cdf0e10cSrcweir removeAndCreateFile(aFileURL, sLines); 949*cdf0e10cSrcweir } 950*cdf0e10cSrcweir 951*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 952*cdf0e10cSrcweir static void create_testshl2rc() 953*cdf0e10cSrcweir { 954*cdf0e10cSrcweir rtl::OUString aFileURL(getExecutableDirectory()); 955*cdf0e10cSrcweir #if defined(WNT) || defined(OS2) 956*cdf0e10cSrcweir aFileURL += rtl::OUString::createFromAscii("/testshl2.ini"); 957*cdf0e10cSrcweir #else 958*cdf0e10cSrcweir aFileURL += rtl::OUString::createFromAscii("/testshl2rc"); 959*cdf0e10cSrcweir #endif 960*cdf0e10cSrcweir rtl::OString sLines; 961*cdf0e10cSrcweir sLines += "[Bootstrap]\n"; 962*cdf0e10cSrcweir sLines += "FILE=testshl2 file\n"; 963*cdf0e10cSrcweir sLines += "MYBOOTSTRAPTESTVALUE=file\n"; 964*cdf0e10cSrcweir sLines += "INHERITED_VALUE=inherited_value\n"; 965*cdf0e10cSrcweir sLines += "INHERITED_OVERWRITTEN_VALUE=not_overwritten\n"; 966*cdf0e10cSrcweir sLines += "MYVAR=src680_test\n"; 967*cdf0e10cSrcweir sLines += "SOFROMVALUE=${$ORIGIN/" SAL_CONFIGFILE("rtl") "::SOVALUE}\n"; 968*cdf0e10cSrcweir sLines += "SOFROMVALUE2=test\n"; 969*cdf0e10cSrcweir sLines += "SOFROMVALUE3=${$ORIGIN/" SAL_CONFIGFILE("rtl") "::TESTSHL_SOVALUE}\n"; 970*cdf0e10cSrcweir sLines += "TESTSHL_SOVALUE=testshl2_file\n"; 971*cdf0e10cSrcweir //? sLines += "SOFROMVALUE4=${" SAL_CONFIGFILE("rtl") ":Other_Section:TESTSHL_SOVALUE}\n"; 972*cdf0e10cSrcweir sLines += "ILLEGAL VALUE=test\n"; 973*cdf0e10cSrcweir sLines += "ILLEGAL.DOT=test\n"; 974*cdf0e10cSrcweir sLines += "ILLEGAL;SEMICOLON=test\n"; 975*cdf0e10cSrcweir sLines += "ILLEGAL:COLON=test\n"; 976*cdf0e10cSrcweir sLines += " KEY_FOR_TRIM_TEST = value for trim test \n"; 977*cdf0e10cSrcweir sLines += "RECURSIVE=${$ORIGIN/" SAL_CONFIGFILE("rtl") ":RECURSIVE}\n"; 978*cdf0e10cSrcweir sLines += "LINKED=${${.link:$ORIGIN/testshl2-link}:RTLVALUE}\n"; 979*cdf0e10cSrcweir sLines += "[Other_Section]\n"; 980*cdf0e10cSrcweir sLines += "FILE=testshl2 file other\n"; 981*cdf0e10cSrcweir sLines += "EXPAND=$FILE\n"; 982*cdf0e10cSrcweir //? sLines += "TESTSHL_SOVALUE=testshl2_file_other\n"; 983*cdf0e10cSrcweir 984*cdf0e10cSrcweir removeAndCreateFile(aFileURL, sLines); 985*cdf0e10cSrcweir 986*cdf0e10cSrcweir removeAndCreateFile( 987*cdf0e10cSrcweir (getExecutableDirectory() + 988*cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/testshl2-link"))), 989*cdf0e10cSrcweir SAL_CONFIGFILE("rtl")); 990*cdf0e10cSrcweir } 991*cdf0e10cSrcweir 992*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 993*cdf0e10cSrcweir 994*cdf0e10cSrcweir static void create_pseudorc() 995*cdf0e10cSrcweir { 996*cdf0e10cSrcweir rtl::OUString aFileURL(getExecutableDirectory()); 997*cdf0e10cSrcweir #if defined(WNT) || defined(OS2) 998*cdf0e10cSrcweir aFileURL += rtl::OUString::createFromAscii("/pseudo.ini"); 999*cdf0e10cSrcweir #else 1000*cdf0e10cSrcweir aFileURL += rtl::OUString::createFromAscii("/pseudorc"); 1001*cdf0e10cSrcweir #endif 1002*cdf0e10cSrcweir rtl::OString sLines; 1003*cdf0e10cSrcweir sLines += "[Bootstrap]\n"; 1004*cdf0e10cSrcweir sLines += "FILE=pseudo file\n"; 1005*cdf0e10cSrcweir sLines += "PSEUDOFILE=be pseudo\n"; 1006*cdf0e10cSrcweir 1007*cdf0e10cSrcweir removeAndCreateFile(aFileURL, sLines); 1008*cdf0e10cSrcweir } 1009*cdf0e10cSrcweir 1010*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1011*cdf0e10cSrcweir void create_bootstrap_processrc() 1012*cdf0e10cSrcweir { 1013*cdf0e10cSrcweir rtl::OUString aDirURL(getModulePath()); 1014*cdf0e10cSrcweir #if defined(WNT) || defined(OS2) 1015*cdf0e10cSrcweir aDirURL += rtl::OUString::createFromAscii("/bootstrap_process.ini"); 1016*cdf0e10cSrcweir #else 1017*cdf0e10cSrcweir aDirURL += rtl::OUString::createFromAscii("/bootstrap_processrc"); 1018*cdf0e10cSrcweir #endif 1019*cdf0e10cSrcweir rtl::OString sLines; 1020*cdf0e10cSrcweir sLines += "[Bootstrap]\n"; 1021*cdf0e10cSrcweir sLines += "EXECUTABLE_RC=true\n"; 1022*cdf0e10cSrcweir sLines += "IF_CUSTOM_RC=false\n"; 1023*cdf0e10cSrcweir 1024*cdf0e10cSrcweir removeAndCreateFile(aDirURL, sLines); 1025*cdf0e10cSrcweir } 1026*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1027*cdf0e10cSrcweir 1028*cdf0e10cSrcweir void RegisterAdditionalFunctions(FktRegFuncPtr _pFunc) 1029*cdf0e10cSrcweir { 1030*cdf0e10cSrcweir (void) _pFunc; 1031*cdf0e10cSrcweir // start message 1032*cdf0e10cSrcweir t_print(T_VERBOSE, "Initializing ...\n" ); 1033*cdf0e10cSrcweir create_rtlrc(); 1034*cdf0e10cSrcweir create_testshl2rc(); 1035*cdf0e10cSrcweir create_pseudorc(); 1036*cdf0e10cSrcweir create_bootstrap_processrc(); 1037*cdf0e10cSrcweir 1038*cdf0e10cSrcweir t_print(T_VERBOSE, "Initialization Done.\n" ); 1039*cdf0e10cSrcweir } 1040*cdf0e10cSrcweir 1041