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