xref: /aoo42x/main/sal/qa/osl/file/osl_File.cxx (revision bfbc7fbc)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sal.hxx"
26 
27 //------------------------------------------------------------------------
28 // include files
29 //------------------------------------------------------------------------
30 #include <sal/types.h>
31 #include <rtl/ustring.hxx>
32 #include <rtl/ustrbuf.hxx>
33 
34 #include "osl/thread.h"
35 
36 #include "rtl/ustrbuf.hxx"
37 #include <osl/file.hxx>
38 #include <osl_File_Const.h>
39 
40 #include "gtest/gtest.h"
41 
42 // #ifdef WNT
43 // #   define UNICODE
44 // #	define WIN32_LEAN_AND_MEAN
45 // #	include <windows.h>
46 // #   include <tchar.h>
47 // #endif
48 
49 
50 using namespace osl;
51 using namespace rtl;
52 
53 //------------------------------------------------------------------------
54 // helper functions
55 //------------------------------------------------------------------------
56 
57 /** detailed wrong message.
58 */
59 inline ::rtl::OString errorToString( const ::osl::FileBase::RC _nError )
60 {
61 	::rtl::OString sResult;
62 	switch ( _nError ) {
63 		case ::osl::FileBase::E_None:
64 			sResult = "Success";
65 			break;
66 		case ::osl::FileBase::E_PERM:
67 			sResult = "Operation not permitted";
68 			break;
69 		case ::osl::FileBase::E_NOENT:
70 			sResult = "No such file or directory";
71 			break;
72 		case ::osl::FileBase::E_EXIST:
73 			sResult = "Already Exist";
74 			break;
75 		case ::osl::FileBase::E_ACCES:
76 			sResult = "Permission denied";
77 			break;
78 		case ::osl::FileBase::E_INVAL:
79 			sResult = "The format of the parameters was not valid";
80 			break;
81 		case ::osl::FileBase::E_NOTDIR:
82 			sResult = "Not a directory";
83 			break;
84 		case ::osl::FileBase::E_ISDIR:
85 			sResult = "Is a directory";
86 			break;
87 		case ::osl::FileBase::E_BADF:
88 			sResult = "Bad file";
89 			break;
90 		case ::osl::FileBase::E_NOTEMPTY:
91 			sResult = "The directory is not empty";
92 			break;
93 		default:
94 			sResult = "Unknown Error";
95 			break;
96 	}
97 	return sResult;
98 }
99 
100 rtl::OUString errorToStr( ::osl::FileBase::RC const& nError)
101 {
102     rtl::OUStringBuffer suBuf;
103     suBuf.append( rtl::OUString::createFromAscii("The returned error is: ") );
104     suBuf.append( rtl::OStringToOUString(errorToString(nError), RTL_TEXTENCODING_ASCII_US) );
105     suBuf.append( rtl::OUString::createFromAscii("!\n") );
106     return suBuf.makeStringAndClear();
107 }
108 
109 /** print a file type name.
110 */
111 inline void printFileType( const ::osl::FileStatus::Type nType )
112 {
113 	printf( "#printFileType# " );
114 	switch ( nType ) {
115 		case ::osl::FileStatus::Directory:
116 			printf( "This file is a: Directory.\n" );
117 			break;
118 		case ::osl::FileStatus::Volume:
119 			printf( "This file is a: volume device.\n" );
120 			break;
121 		case ::osl::FileStatus::Regular:
122 			printf( "This file is a: regular file.\n" );
123 			break;
124 		case ::osl::FileStatus::Fifo:
125 			printf( "This file is a: fifo.\n" );
126 			break;
127 		case ::osl::FileStatus::Socket:
128 			printf( "This file is a: socket.\n" );
129 			break;
130 		case ::osl::FileStatus::Link:
131 			printf( "This file is a: link file.\n" );
132 			break;
133 		case ::osl::FileStatus::Special:
134 			printf( "This file is a: special.\n" );
135 			break;
136 		case ::osl::FileStatus::Unknown:
137 			printf( "The file type is unknown %d \n", nType );
138 			break;
139 	}
140 }
141 
142 /** print a file attributes.
143 */
144 inline void printFileAttributes( const sal_Int64 nAttributes )
145 {
146 	printf( "#printFileAttributes# This file is a: (" );
147 	if ( ( nAttributes | Attribute_ReadOnly ) == nAttributes )
148 			printf( " ReadOnly " );
149 	if ( ( nAttributes | Attribute_Hidden ) == nAttributes )
150 			printf( " Hidden " );
151 	if ( ( nAttributes | Attribute_Executable ) == nAttributes )
152 			printf( " Executable " );
153 	if ( ( nAttributes | Attribute_GrpWrite ) == nAttributes )
154 			printf( " GrpWrite " );
155 	if ( ( nAttributes | Attribute_GrpRead ) == nAttributes )
156 			printf( " GrpRead " );
157 	if ( ( nAttributes | Attribute_GrpExe ) == nAttributes )
158 			printf( " GrpExe " );
159 	if ( ( nAttributes | Attribute_OwnWrite ) == nAttributes )
160 			printf( " OwnWrite " );
161 	if ( ( nAttributes | Attribute_OwnRead ) == nAttributes )
162 			printf( " OwnRead " );
163 	if ( ( nAttributes | Attribute_OwnExe ) == nAttributes )
164 			printf( " OwnExe " );
165 	if ( ( nAttributes | Attribute_OthWrite ) == nAttributes )
166 			printf( " OthWrite " );
167 	if ( ( nAttributes | Attribute_OthRead ) == nAttributes )
168 			printf( " OthRead " );
169 	if ( ( nAttributes | Attribute_OthExe ) == nAttributes )
170 			printf( " OthExe " );
171 	printf( ") file!\n" );
172 }
173 
174 /** print a UNI_CODE file name.
175 */
176 inline void printFileName( const ::rtl::OUString & str )
177 {
178 	rtl::OString aString;
179 
180 	printf( "#printFileName_u# " );
181 	aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
182 	printf( "%s\n", aString.getStr( ) );
183 }
184 
185 /** print a ASCII_CODE file name.
186 */
187 inline void printFileName( const sal_Char * str )
188 {
189 	printf( "#printFileName_a# " );
190 	printf( "%s\n", str );
191 }
192 
193 /** print an output wrong message.
194 */
195 inline void printError( const ::osl::FileBase::RC nError )
196 {
197 	printf( "#printError# " );
198 	printFileName( errorToStr(nError) );
199 }
200 
201 /** print an signed Integer Number.
202 */
203 inline void printInt( sal_Int64 i )
204 {
205 	printf( "#printInt_i64# " );
206 	printf( "The Integer64 is %lld\n", i);
207 }
208 
209 /** print an unsigned Integer Number.
210 */
211 inline void printInt( sal_uInt64 i )
212 {
213 	printf( "#printInt_u64# " );
214 	printf( "The unsigned Integer64 is %llu\n", i);
215 }
216 
217 /** print Boolean value.
218 */
219 inline void printBool( sal_Bool bOk )
220 {
221 	printf( "#printBool# " );
222 	( sal_True == bOk ) ? printf( "YES!\n" ): printf( "NO!\n" );
223 }
224 
225 /** print struct TimeValue in local time format.
226 */
227 inline void printTime( TimeValue *tv )
228 {
229 	oslDateTime *pDateTime = ( oslDateTime* )malloc( sizeof( oslDateTime ) ) ;
230  	ASSERT_TRUE(pDateTime != NULL) << "Error in printTime() function,malloc ";
231 	TimeValue *pLocalTV = ( TimeValue* )malloc( sizeof( TimeValue ) );
232  	ASSERT_TRUE(pLocalTV != NULL) << "Error in printTime() function,malloc ";
233 
234 	ASSERT_TRUE(sal_True == osl_getLocalTimeFromSystemTime( tv, pLocalTV )) << "Error in printTime() function,osl_getLocalTimeFromSystemTime ";
235 	ASSERT_TRUE(sal_True == osl_getDateTimeFromTimeValue( pLocalTV, pDateTime )) << "Error in printTime() function,osl_gepDateTimeFromTimeValue ";
236 
237 	printf( "#printTime# " );
238  	printf( " Time is: %d/%d/%d ", pDateTime->Month, pDateTime->Day, pDateTime->Year);
239 	switch ( pDateTime->DayOfWeek )
240 	{
241 		case 0: printf("Sun. "); break;
242 		case 1: printf("Mon. "); break;
243 		case 2: printf("Tue. "); break;
244 		case 3: printf("Thr. "); break;
245 		case 4: printf("Wen. "); break;
246 		case 5: printf("Fri. "); break;
247 		case 6: printf("Sat. "); break;
248 	}
249 	printf( " %d:%d:%d %d nsecs\n", pDateTime->Hours, pDateTime->Minutes, pDateTime->Seconds, pDateTime->NanoSeconds);
250 
251 	free( pDateTime );
252 	free( pLocalTV );
253 }
254 
255 /** compare two TimeValue, unit is "ms", since Windows time precision is better than UNX.
256 */
257 
258 #if ( defined UNX ) || ( defined OS2 )                 //precision of time in Windows is better than UNX
259 #	define delta 2000                    //time precision, 2000ms
260 #else
261 #	define delta 1800                    //time precision, 1.8s
262 #endif
263 
264 inline sal_Int64 t_abs64(sal_Int64 _nValue)
265 {
266     // std::abs() seems to have some ambiguity problems (so-texas)
267     // return abs(_nValue);
268     printf("t_abs64(%ld)\n", _nValue);
269     // ASSERT_TRUE(_nValue < 2147483647);
270 
271     if (_nValue < 0)
272     {
273         _nValue = -_nValue;
274     }
275     return _nValue;
276 }
277 
278 inline sal_Bool t_compareTime( TimeValue *m_aEndTime,  TimeValue *m_aStartTime, sal_Int32 nDelta)
279 {
280     // sal_uInt64 uTimeValue;
281     // sal_Int64 iTimeValue;
282     //
283     // iTimeValue = t_abs64(( tv1->Seconds - tv2->Seconds) * 1000000000 + tv1->Nanosec - tv2->Nanosec);
284     // uTimeValue = ( iTimeValue / 1000000 );
285 
286     sal_Int32 nDeltaSeconds = m_aEndTime->Seconds - m_aStartTime->Seconds;
287     sal_Int32 nDeltaNanoSec = sal_Int32(m_aEndTime->Nanosec) - sal_Int32(m_aStartTime->Nanosec);
288     if (nDeltaNanoSec < 0)
289     {
290         nDeltaNanoSec = 1000000000 + nDeltaNanoSec;
291         nDeltaSeconds--;
292     }
293 
294     sal_Int32 nDeltaMilliSec = (nDeltaSeconds * 1000) + (nDeltaNanoSec / 1000000);
295     return ( nDeltaMilliSec < nDelta );
296 }
297 
298 /** compare two OUString file name.
299 */
300 inline sal_Bool compareFileName( const ::rtl::OUString & ustr1, const ::rtl::OUString & ustr2 )
301 {
302 	sal_Bool bOk;
303 //on Windows, the seperatar is '\', so here change to '/', then compare
304 #if defined (WNT )
305 	::rtl::OUString ustr1new,ustr2new;
306 	sal_Unicode reverseSlash = (sal_Unicode)'\\';
307 
308 	if (ustr1.lastIndexOf(reverseSlash) != -1)
309 		ustr1new = ustr1.replace(reverseSlash,(sal_Unicode)'/');
310 	else
311 		ustr1new = ustr1;
312 	if (ustr2.lastIndexOf(reverseSlash) != -1)
313 		ustr2new = ustr2.replace(reverseSlash,(sal_Unicode)'/');
314 	else
315 		ustr2new = ustr2;
316 	bOk = ustr1new.equalsIgnoreAsciiCase( ustr2new )  ;
317 #else
318 	bOk = ustr1.equalsIgnoreAsciiCase( ustr2 );
319 #endif
320 	return bOk;
321 }
322 
323 /** compare a OUString and an ASCII file name.
324 */
325 inline sal_Bool compareFileName( const ::rtl::OUString & ustr, const sal_Char *astr )
326 {
327     (void)ustr;
328 	::rtl::OUString ustr1 = rtl::OUString::createFromAscii( astr );
329 	sal_Bool bOk = ustr1.equalsIgnoreAsciiCase( ustr1 );
330 
331 	return bOk;
332 }
333 
334 /** simple version to judge if a file name or directory name is a URL or a system path, just to see if it
335     is start with "file:///";.
336 */
337 inline sal_Bool isURL( const sal_Char *pathname )
338 {
339 	return ( 0 == strncmp( pathname, FILE_PREFIX, sizeof( FILE_PREFIX ) - 1 ) );
340 }
341 
342 /** simple version to judge if a file name or directory name is a URL or a system path, just to see if it
343     is start with "file:///";.
344 */
345 inline sal_Bool isURL( const ::rtl::OUString pathname )
346 {
347 	return ( ( pathname.indexOf( aPreURL ) == 0 ) ? sal_True : sal_False );
348 }
349 
350 /** concat two part to form a URL or system path, add PATH_SEPERATOR between them if necessary, add "file:///" to beginning if necessary.
351 */
352 inline void concatURL( ::rtl::OUString & pathname1, const ::rtl::OUString & pathname2 )
353 {
354 	//check if pathname1 is full qualified URL;
355 	if ( !isURL( pathname1 ) )
356 	{
357 		::rtl::OUString     aPathName   = pathname1.copy( 0 );
358 		::osl::FileBase::getFileURLFromSystemPath( pathname1, aPathName ); //convert if not full qualified URL
359 		pathname1   = aPathName.copy( 0 );
360 	}
361 
362 	sal_Int32 index = 0;
363 	//check if '/' is in the end of pathname1 or at the begin of pathname2;
364 	if ( ( ( index = pathname1.lastIndexOf( aSlashURL ) ) != ( pathname1.getLength( ) - 1 ) ) &&
365 		 ( ( index = pathname2.indexOf( aSlashURL ) ) != 0 ) )
366 		pathname1 += aSlashURL;
367 	pathname1 += pathname2;
368 }
369 
370 /** create a temp test file using OUString name of full qualified URL or system path.
371 */
372 inline void createTestFile( const ::rtl::OUString filename )
373 {
374 	::rtl::OUString     aPathURL   = filename.copy( 0 );
375 	::osl::FileBase::RC	nError;
376 
377 	if ( !isURL( filename ) )
378 		::osl::FileBase::getFileURLFromSystemPath( filename, aPathURL ); //convert if not full qualified URL
379 
380 	//::std::auto_ptr<File> pFile( new File( aPathURL ) );
381 	File aFile(aPathURL);
382 	//nError = pFile->open( OpenFlag_Read | OpenFlag_Write | OpenFlag_Create );
383 	nError = aFile.open( OpenFlag_Read | OpenFlag_Write | OpenFlag_Create );
384 	//ASSERT_TRUE(( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_EXIST )) << "In createTestFile Function: creation ";
385 	if ( ( ::osl::FileBase::E_None != nError ) && ( nError != ::osl::FileBase::E_EXIST ))
386 	{
387 		printf("createTestFile failed!\n");
388 	}
389 	aFile.close();
390 
391 }
392 
393 /** create a temp test file using OUString name of full qualified URL or system path in a base directory.
394 */
395 inline void createTestFile( const ::rtl::OUString basename, const ::rtl::OUString filename )
396 {
397 	::rtl::OUString aBaseURL = basename.copy( 0 );
398 
399 	concatURL( aBaseURL, filename );
400 	createTestFile( aBaseURL );
401 }
402 
403 /** detete a temp test file using OUString name.
404 */
405 inline void deleteTestFile( const ::rtl::OUString filename )
406 {
407     // LLA: printf("deleteTestFile\n");
408 	::rtl::OUString     aPathURL   = filename.copy( 0 );
409 	::osl::FileBase::RC	nError;
410 
411 	if ( !isURL( filename ) )
412 		::osl::FileBase::getFileURLFromSystemPath( filename, aPathURL ); //convert if not full qualified URL
413 
414 	nError = ::osl::File::setAttributes( aPathURL, Attribute_GrpWrite| Attribute_OwnWrite| Attribute_OthWrite ); // if readonly, make writtenable.
415 	ASSERT_TRUE(( ::osl::FileBase::E_None == nError ) || ( ::osl::FileBase::E_NOENT == nError )) << "In deleteTestFile Function: set writtenable ";
416 
417 	nError = ::osl::File::remove( aPathURL );
418 	ASSERT_TRUE(( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_NOENT )) << "In deleteTestFile Function: remove ";
419 }
420 
421 /** delete a temp test file using OUString name of full qualified URL or system path in a base directory.
422 */
423 inline void deleteTestFile( const ::rtl::OUString basename, const ::rtl::OUString filename )
424 {
425 	::rtl::OUString     aBaseURL   = basename.copy( 0 );
426 
427 	concatURL( aBaseURL, filename );
428 	deleteTestFile( aBaseURL );
429 }
430 
431 /** create a temp test directory using OUString name of full qualified URL or system path.
432 */
433 inline void createTestDirectory( const ::rtl::OUString dirname )
434 {
435 	::rtl::OUString     aPathURL   = dirname.copy( 0 );
436 	::osl::FileBase::RC	nError;
437 
438 	if ( !isURL( dirname ) )
439 		::osl::FileBase::getFileURLFromSystemPath( dirname, aPathURL ); //convert if not full qualified URL
440 	nError = ::osl::Directory::create( aPathURL );
441 	//ASSERT_TRUE(( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_EXIST )) << "In createTestDirectory Function: creation: ";
442 	if ( ( ::osl::FileBase::E_None != nError ) && ( nError != ::osl::FileBase::E_EXIST ))
443 	  printf("createTestDirectory failed!\n");
444 }
445 
446 /** create a temp test directory using OUString name of full qualified URL or system path in a base directory.
447 */
448 inline void createTestDirectory( const ::rtl::OUString basename, const ::rtl::OUString dirname )
449 {
450 	::rtl::OUString     aBaseURL   = basename.copy( 0 );
451 	::rtl::OString      aString;
452 
453 	concatURL( aBaseURL, dirname );
454 	createTestDirectory( aBaseURL );
455 }
456 
457 /** delete a temp test directory using OUString name of full qualified URL or system path.
458 */
459 inline void deleteTestDirectory( const ::rtl::OUString dirname )
460 {
461     // LLA: printf("deleteTestDirectory\n");
462 	::rtl::OUString     aPathURL   = dirname.copy( 0 );
463 	::osl::FileBase::RC	nError;
464 	// LLA: printFileName(aPathURL);
465 	if ( !isURL( dirname ) )
466 		::osl::FileBase::getFileURLFromSystemPath( dirname, aPathURL ); //convert if not full qualified URL
467 
468 	::osl::Directory testDir( aPathURL );
469 	if ( testDir.isOpen( ) == sal_True )
470 	{
471         // LLA: printf("#close Dir\n");
472         testDir.close( );  //close if still open.
473     	}
474 
475 	nError = ::osl::Directory::remove( aPathURL );
476     // LLA: printError(nError);
477     // LLA: if (( ::osl::FileBase::E_None == nError ))
478     // LLA: {
479     // LLA:     printf("nError == E_None\n");
480     // LLA: }
481     // LLA: else if ( ( nError == ::osl::FileBase::E_NOENT ))
482     // LLA: {
483     // LLA:     printf("nError == E_NOENT\n");
484     // LLA: }
485     // LLA: else
486     // LLA: {
487     // LLA:     // printf("nError == %d\n", nError);
488     // LLA: }
489         rtl::OUString strError = rtl::OUString::createFromAscii( "In deleteTestDirectory function: remove Directory ");
490         strError += aPathURL;
491 	EXPECT_TRUE(( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_NOENT )) << strError.pData;
492     // LLA: if (! ( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_NOENT ))
493     // LLA: {
494     // LLA:     printf("In deleteTestDirectory function: remove\n");
495     // LLA: }
496 }
497 
498 /** delete a temp test directory using OUString name of full qualified URL or system path in a base directory.
499 */
500 inline void deleteTestDirectory( const ::rtl::OUString basename, const ::rtl::OUString dirname )
501 {
502 	::rtl::OUString     aBaseURL   = basename.copy( 0 );
503 
504 	concatURL( aBaseURL, dirname );
505 	deleteTestDirectory( aBaseURL );
506 }
507 
508 
509 /** Check for the file and directory access right.
510 */
511 typedef enum {
512 	osl_Check_Mode_Exist,
513 	osl_Check_Mode_OpenAccess,
514 	osl_Check_Mode_ReadAccess,
515 	osl_Check_Mode_WriteAccess
516 } oslCheckMode;
517 
518 // not used here
519 inline sal_Bool checkFile( const ::rtl::OUString & str, oslCheckMode nCheckMode )
520 {
521 	::osl::FileBase::RC   nError1, nError2;
522 	::osl::File       testFile( str );
523 	sal_Bool		bCheckResult;
524 
525 	bCheckResult = sal_False;
526 	nError1 = testFile.open ( OpenFlag_Read );
527 	if ( ( ::osl::FileBase::E_NOENT != nError1 ) && ( ::osl::FileBase::E_ACCES != nError1 ) ){
528 
529 		switch ( nCheckMode ) {
530 			case osl_Check_Mode_Exist:
531 				/// check if the file is exist.
532 				if ( ::osl::FileBase::E_None == nError1 )
533 					bCheckResult = sal_True;
534 				break;
535 			case osl_Check_Mode_OpenAccess:
536 				/// check if the file is openable.
537 				if ( ::osl::FileBase::E_None == nError1 )
538 					bCheckResult = sal_True;
539 				break;
540 			case osl_Check_Mode_WriteAccess:
541 				/// check the file name and whether it can be write.
542 				/// write chars into the file.
543 				//testFile.close( );
544 				//testFile.open( OpenFlag_Write );
545 				sal_uInt64 nCount_write;
546 				nError2 = testFile.write( pBuffer_Char, 10, nCount_write );
547 				if ( ::osl::FileBase::E_None == nError2 )
548 					bCheckResult = sal_True;
549 				break;
550 
551 			default:
552 				bCheckResult = sal_False;
553 		}/// swith
554 
555 		nError2 = testFile.close( );
556 		EXPECT_TRUE(nError2 == FileBase::E_None) << " in CheckFile() function, close file ";
557 
558 	}
559 
560 	return bCheckResult;
561 }
562 
563 //check if the file exist
564 inline sal_Bool ifFileExist( const ::rtl::OUString & str )
565 {
566 	sal_Bool		bCheckResult = sal_False;
567 
568 /*#ifdef WNT
569 	::rtl::OUString 	aUStr  = str.copy( 0 );
570 	if ( isURL( str ) )
571 		::osl::FileBase::getSystemPathFromFileURL( str, aUStr );
572 
573 	::rtl::OString aString = ::rtl::OUStringToOString( aUStr, RTL_TEXTENCODING_ASCII_US );
574 	const char *path = aString.getStr( );
575 	if (( _access( path, 0 ) ) != -1 )
576  		bCheckResult = sal_True;
577 #else*/
578 	::rtl::OString aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
579 	// const char *path = aString.getStr( );
580 	::osl::File	testFile( str );
581 	bCheckResult = ( osl::FileBase::E_None == testFile.open( OpenFlag_Read ) );
582 	//if (bCheckResult)
583 	//printf("%s exist!\n", path);
584 	//else
585 	//printf("%s not exist!\n", path);
586 //#endif
587 	return bCheckResult;
588 
589 }
590 
591 //check if the file can be written
592 inline sal_Bool ifFileCanWrite( const ::rtl::OUString & str )
593 {
594 	sal_Bool		bCheckResult = sal_False;
595 	//on Windows, the file has no write right, but can be written
596 #ifdef WNT
597 	::rtl::OUString 	aUStr  = str.copy( 0 );
598 	if ( isURL( str ) )
599 		::osl::FileBase::getSystemPathFromFileURL( str, aUStr );
600 
601 	::rtl::OString aString = ::rtl::OUStringToOString( aUStr, RTL_TEXTENCODING_ASCII_US );
602 	const char *path = aString.getStr( );
603 	if (( _access( path, 2 ) ) != -1 )
604  		bCheckResult = sal_True;
605  	//on UNX, just test if open success with OpenFlag_Write
606 #else
607 	::osl::File	testFile( str );
608 	bCheckResult = (osl::FileBase::E_None == testFile.open( OpenFlag_Write ));
609 #endif
610 	return bCheckResult;
611 }
612 
613 inline sal_Bool checkDirectory( const ::rtl::OUString & str, oslCheckMode nCheckMode )
614 {
615 	rtl::OUString 	aUString;
616 	DirectoryItem	rItem;
617 	FileBase::RC	rc;
618 	sal_Bool		bCheckResult= sal_False;
619 
620 	//::std::auto_ptr<Directory> pDir( new Directory( str ) );
621 	Directory aDir( str );
622 	rc = aDir.open( );
623 
624 	if ( ( ::osl::FileBase::E_NOENT != rc ) && ( ::osl::FileBase::E_ACCES != rc ) ){
625 
626 		switch ( nCheckMode ) {
627 			case osl_Check_Mode_Exist:
628 				if ( rc == ::osl::FileBase::E_None )
629 					bCheckResult = sal_True;
630 				break;
631 			case osl_Check_Mode_OpenAccess:
632 				if ( rc == ::osl::FileBase::E_None )
633 					bCheckResult = sal_True;
634 				break;
635 			case osl_Check_Mode_ReadAccess:
636 				//rc = pDir->getNextItem( rItem, 0 );
637 				rc = aDir.getNextItem( rItem, 0 );
638 				if ( ( rc == ::osl::FileBase::E_None ) || ( rc == ::osl::FileBase::E_NOENT ) )
639 					bCheckResult = sal_True;
640 				else
641 					bCheckResult = sal_False;
642 				break;
643 			case osl_Check_Mode_WriteAccess:
644 				( ( aUString += str ) += aSlashURL ) += aTmpName2;
645 				//if ( ( rc = pDir->create( aUString ) ) == ::osl::FileBase::E_None )
646 				if ( ( rc = Directory::create( aUString ) ) == ::osl::FileBase::E_None )
647 				{
648 					bCheckResult = sal_True;
649 					//rc = pDir->remove( aUString );
650 					rc = Directory::remove( aUString );
651 					EXPECT_TRUE( rc == ::osl::FileBase::E_None );
652 				}
653 				else
654 					bCheckResult = sal_False;
655 				break;
656 
657 			default:
658 				bCheckResult = sal_False;
659 		}// switch
660 
661 		rc = aDir.close( );
662 		EXPECT_TRUE( rc == FileBase::E_None );
663 
664 	}//if
665 
666 	return bCheckResult;
667 }
668 
669 /** construct error message
670 */
671 inline ::rtl::OUString outputError( const ::rtl::OUString & returnVal, const ::rtl::OUString & rightVal, const sal_Char * msg = "")
672 {
673 	::rtl::OUString aUString;
674 	if ( returnVal.equals( rightVal ) )
675 		return aUString;
676 	aUString += ::rtl::OUString::createFromAscii(msg);
677 	aUString += ::rtl::OUString::createFromAscii(": the returned value is '");
678 	aUString += returnVal;
679 	aUString += ::rtl::OUString::createFromAscii("', but the value should be '");
680 	aUString += rightVal;
681 	aUString += ::rtl::OUString::createFromAscii("'.");
682 	return aUString;
683 }
684 
685 /** Change file mode, two version in UNIX and Windows;.
686 */
687 #if ( defined UNX ) || ( defined OS2 )	       //chmod() method is differ in Windows
688 inline void changeFileMode( ::rtl::OUString & filepath, sal_Int32 mode )
689 {
690 	rtl::OString 	aString;
691 	rtl::OUString 	aUStr  = filepath.copy( 0 );
692 
693 	if ( isURL( filepath ) )
694 		::osl::FileBase::getSystemPathFromFileURL( filepath, aUStr );
695 	aString = ::rtl::OUStringToOString( aUStr, RTL_TEXTENCODING_ASCII_US );
696 	chmod( aString.getStr( ), mode );
697 }
698 #else                                          //Windows version
699 inline void changeFileMode( ::rtl::OUString & filepath, sal_Int32 mode )
700 {
701     (void)filepath;
702     (void)mode;
703 	printf("this method is not implemented yet");
704 }
705 #endif
706 
707 inline ::rtl::OUString getCurrentPID( void );
708 
709 
710 
711 //------------------------------------------------------------------------
712 // Beginning of the test cases for FileBase class
713 //------------------------------------------------------------------------
714 namespace osl_FileBase
715 {
716 
717 #if 0  //~ this function has been deprecated
718 	//---------------------------------------------------------------------
719 	// testing the method
720 	// static inline RC getCanonicalName( const ::rtl::OUString& ustrRequestedURL, ::rtl::OUString& ustrValidURL )
721 	//
722 	// The illegal characters are ;+=[]',\"*\\<>/?:|.
723 	// because getCanonicalName method is not implemented yet and will be deprecated in the future, this test is not necessary.
724 	//---------------------------------------------------------------------
725 
726 	class getCanonicalName:public ::testing::Test
727 	{
728 
729 	    public:
730 		::osl::FileBase::RC	nError;
731 	};// class getCanonicalName
732 
733     TEST_F(getCanonicalName, getCanonicalName_001 )
734     {
735         ::rtl::OUString aUStr_ValidURL;
736         nError = ::osl::FileBase::getCanonicalName( aCanURL1, aUStr_ValidURL );
737 
738         ASSERT_TRUE(( osl::FileBase::E_None == nError ) && aUStr_ValidURL.equalsIgnoreAsciiCase( aCanURL1 )) << "test for getCanonicalName function: check valid and unused file name";
739     }
740 
741     TEST_F(getCanonicalName, getCanonicalName_002 )
742     {
743         ::rtl::OUString     aUStr_ValidURL;
744 
745         createTestFile( aCanURL1 );
746         nError = ::osl::FileBase::getCanonicalName( aCanURL1, aUStr_ValidURL );
747         deleteTestFile( aCanURL1 );
748 
749         ASSERT_TRUE(( osl::FileBase::E_None == nError ) && aUStr_ValidURL.equalsIgnoreAsciiCase( aCanURL1 )) << " test for getCanonicalName function: an existed file name, should different from the request, it did not passed(W32)(UNX)";
750     }
751 
752     TEST_F(getCanonicalName, getCanonicalName_003 )
753     {
754         ::rtl::OUString aUStr_ValidURL;
755         nError = ::osl::FileBase::getCanonicalName ( aCanURL2,  aUStr_ValidURL );
756 
757         ASSERT_TRUE(( osl::FileBase::E_None == nError ) && aUStr_ValidURL.equalsIgnoreAsciiCase( aCanURL2 )) << " test for getCanonicalName function: invalid file name, should different from the request,  it did not passed(W32)(UNX)";
758     }
759 #endif
760 
761 	//---------------------------------------------------------------------
762 	// testing the method
763 	// static inline RC getAbsoluteFileURL( const ::rtl::OUString& ustrBaseDirectoryURL,
764 	//										const ::rtl::OUString& ustrRelativeFileURL,
765 	//											  ::rtl::OUString& ustrAbsoluteFileURL )
766 	//---------------------------------------------------------------------
767 
768 	class getAbsoluteFileURL:public ::testing::Test
769 	{
770 		//::osl::FileBase		aFileBase;
771             ::rtl::OUString		aResultURL1, aResultURL2, aResultURL3, aResultURL4, aResultURL5, aResultURL6;
772             // ::osl::FileBase::RC	nError;
773 		sal_Bool		bOk;
774 
775 	    public:
776 
777 	    	void check_getAbsoluteFileURL( rtl::OUString const& _suBaseURL,  rtl::OString const& _sRelativeURL, ::osl::FileBase::RC _nAssumeError, rtl::OUString const& _suAssumeResultStr );
778 
779 	  void getAbsoluteFileURL_001_1();
780 	  void getAbsoluteFileURL_001_2();
781 	  void getAbsoluteFileURL_001_3();
782 	  void getAbsoluteFileURL_001_4();
783 	  void getAbsoluteFileURL_001_5();
784 	  void getAbsoluteFileURL_001_6();
785 	  void getAbsoluteFileURL_001_7();
786 	  void getAbsoluteFileURL_001_8();
787 	  void getAbsoluteFileURL_002();
788 	  void getAbsoluteFileURL_003();
789 	  void getAbsoluteFileURL_004();
790 	}; //class getAbsoluteFileURL
791 
792 /* use coding format as same as getSystemPathFromFileURL
793 		// initialization
794 		void setUp( )
795 		{
796 			sal_Char pResultURL1[]  = "/relative/file1";
797 			sal_Char pResultURL2[]  = "/relative/file2";
798 			sal_Char pResultURL3[]  = "/file3";
799 			sal_Char pResultURL4[]  = "/file4";
800 			sal_Char pResultURL5[]  = "/canonical.name";
801 			sal_Char pResultURL6[]  = "/relative/";
802 			aResultURL1 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL1 ) );
803 			aResultURL2 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL2 ) );
804 			aResultURL3 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL3 ) );
805 			aResultURL4 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL4 ) );
806 			aResultURL5 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL5 ) );
807 			aResultURL6 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL6 ) );
808 		}
809 
810 		void tearDown( )
811 		{
812 		}
813 
814 		// test code
815 		void getAbsoluteFileURL_001( )
816 		{
817 			::rtl::OUString aUStr_AbsURL;
818 
819 			::osl::FileBase::RC nError11 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL,  aRelURL1, aUStr_AbsURL );
820 			::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getAbsoluteFileURL(' ");
821 			suError += aUserDirectoryURL;
822 			suError += ::rtl::OUString::createFromAscii("', '");
823 			suError += aRelURL1;
824 			suError += ::rtl::OUString::createFromAscii("', '");
825 			suError += aUStr_AbsURL;
826 			suError += outputError( aUStr_AbsURL, aResultURL1, "' ),");
827 
828 			sal_Bool nError12 = aUStr_AbsURL.equals( aResultURL1 );
829 			::osl::FileBase::RC nError21 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL,  aRelURL2, aUStr_AbsURL );
830 			sal_Bool nError22 = aUStr_AbsURL.equals( aResultURL2 );
831 			::osl::FileBase::RC nError31 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL,  aRelURL3, aUStr_AbsURL );
832 			sal_Bool nError32 = aUStr_AbsURL.equals( aResultURL3 );
833 			::osl::FileBase::RC nError41 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL,  aRelURL4, aUStr_AbsURL );
834 			sal_Bool nError42 = aUStr_AbsURL.equals( aResultURL4 );
835 			::osl::FileBase::RC nError61 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL,  aRelURL6, aUStr_AbsURL );
836 			sal_Bool nError62 = aUStr_AbsURL.equals( aResultURL6 );
837 			printFileName( aUStr_AbsURL );
838 			printFileName( aResultURL6 );
839 
840 			ASSERT_TRUE(( ::osl::FileBase::E_None == nError11 ) && ( sal_True == nError12 ) &&
841 				 					( ::osl::FileBase::E_None == nError21 ) && ( sal_True == nError22 ) &&
842 				 					( ::osl::FileBase::E_None == nError31 ) && ( sal_True == nError32 ) &&
843 				 					( ::osl::FileBase::E_None == nError41 ) && ( sal_True == nError42 ) &&
844 				 					( ::osl::FileBase::E_None == nError61 ) && ( sal_True == nError62 )) << "test for getAbsoluteFileURL function: valid file name with valid directory";
845 		}
846 
847 
848 #if ( defined UNX ) || ( defined OS2 )	//Link is not defined in Windows
849 		void getAbsoluteFileURL_002( )
850 		{
851 			::rtl::OUString aUStr_AbsURL, aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys );
852 			( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/link.file");
853 			( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/canonical.name");
854 
855                 rtl::OString strLinkFileName, strSrcFileName;
856                 strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US );
857                 strSrcFileName =  OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US );
858 
859 			createTestFile( aCanURL1 );
860                 sal_Int32 fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() );
861 			ASSERT_TRUE( fd == 0 );
862 
863 			nError = aFileBase.getAbsoluteFileURL( aUserDirectoryURL, aLnkURL1, aUStr_AbsURL );
864 			bOk = aUStr_AbsURL.equals( aResultURL5 );
865 
866 			::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getAbsoluteFileURL(' ");
867 			suError += aUserDirectoryURL;
868 			suError += ::rtl::OUString::createFromAscii("', '");
869 			suError += aLnkURL1;
870 			suError += ::rtl::OUString::createFromAscii("', '");
871 			suError += aUStr_AbsURL;
872 			suError += outputError( aUStr_AbsURL, aResultURL5, "' ),");
873 			//printFileName(suError);
874 
875 			deleteTestFile( aCanURL1 );
876                 fd = remove( strLinkFileName.getStr() );
877 			ASSERT_TRUE( fd == 0 );
878 
879 			ASSERT_TRUE(( ::osl::FileBase::E_None == nError ) && ( sal_True == bOk )) << "test for getAbsoluteFileURL function: URL contain link( Solaris version )";
880 		}
881 #else		//Windows version
882 		void getAbsoluteFileURL_002( )
883 		{
884 			ASSERT_TRUE(1) << "test for getAbsoluteFileURL function: URL contain link( Windows version )";
885 		}
886 #endif
887 
888 		void getAbsoluteFileURL_003( )
889 		{
890 // LLA: may be a wrong test, aTmpName1 not a real URL
891 #if 0
892             ::rtl::OUString aUStr_AbsURL;
893 
894 			nError = aFileBase.getAbsoluteFileURL( aTmpName1,  aRelURL1, aUStr_AbsURL );    //base dir invalid error
895 			::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getAbsoluteFileURL('");
896 			suError += aTmpName1;
897 			suError += ::rtl::OUString::createFromAscii("', '");
898 			suError += aRelURL1;
899 			suError += ::rtl::OUString::createFromAscii("', '");
900 			suError += aUStr_AbsURL;
901 			suError += ::rtl::OUString::createFromAscii("' ),Parameter is invalid. it ignore the invalid base in Windows, did not pass in (W32), the reason maybe caused by the similar bug with getSystemPathFromFileURL() ");
902 
903 			ASSERT_TRUE(( ::osl::FileBase::E_INVAL == nError )) << suError;
904 #endif
905         }
906 
907 		//use ".." in relartive path, the BasePath must exist on the file system
908 		void getAbsoluteFileURL_004( )
909 		{
910 			//create two level directories under $Temp/PID/
911 			::rtl::OUString	aUStrUpBase = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/test1");
912 			createTestDirectory( aUStrUpBase );
913 			::rtl::OUString	aUStrBase = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/test1/dir1");
914 			createTestDirectory( aUStrBase );
915 
916 			::rtl::OUString	aUStrRelar = ::rtl::OUString::createFromAscii("../../mytestfile");
917 			::rtl::OUString	aUStr_AbsURL;
918 			::rtl::OUString aResultURL6 = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/mytestfile");
919 
920 			nError = aFileBase.getAbsoluteFileURL( aUStrBase,  aUStrRelar, aUStr_AbsURL );
921 			bOk = aUStr_AbsURL.equals( aResultURL6 );
922 			::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getAbsoluteFileURL('");
923 			suError += aUStrBase;
924 			suError += ::rtl::OUString::createFromAscii("', '");
925 			suError += aUStrRelar;
926 			suError += ::rtl::OUString::createFromAscii("', '");
927 			suError += aUStr_AbsURL;
928 			suError += outputError( aUStr_AbsURL, aResultURL6, "' ), did not pass on Win32 ");
929 
930 			deleteTestDirectory( aUStrBase );
931 			deleteTestDirectory( aUStrUpBase );
932 
933 			ASSERT_TRUE(( ::osl::FileBase::E_None == nError ) && ( sal_True == bOk )) << suError;
934 		}
935 
936 		CPPUNIT_TEST_SUITE( getAbsoluteFileURL );
937 		CPPUNIT_TEST( getAbsoluteFileURL_001 );
938 		CPPUNIT_TEST( getAbsoluteFileURL_002 );
939 		CPPUNIT_TEST( getAbsoluteFileURL_003 );
940 		CPPUNIT_TEST( getAbsoluteFileURL_004 );
941 		CPPUNIT_TEST_SUITE_END( );
942 	};// class getAbsoluteFileURL*/
943 
944 	void getAbsoluteFileURL::check_getAbsoluteFileURL( rtl::OUString const& _suBaseURL,  rtl::OString const& _sRelativeURL, ::osl::FileBase::RC _nAssumeError, rtl::OUString const& _suAssumeResultStr )
945 	{
946 		rtl::OUString suRelativeURL = rtl::OStringToOUString(_sRelativeURL, RTL_TEXTENCODING_UTF8);
947 		rtl::OString sBaseURL = rtl::OUStringToOString(_suBaseURL, RTL_TEXTENCODING_UTF8);
948 		rtl::OUString suResultURL;
949 		osl::FileBase::RC nError = FileBase::getAbsoluteFileURL( _suBaseURL,  suRelativeURL, suResultURL );
950 		rtl::OString sResultURL = rtl::OUStringToOString( suResultURL, RTL_TEXTENCODING_UTF8);
951 		rtl::OString sError = errorToString(nError);
952 		printf("getAbsoluteFileURL('%s','%s') deliver absolute URL: '%s', error '%s'\n", sBaseURL.getStr(), _sRelativeURL.getStr(),sResultURL.getStr(), sError.getStr() );
953 		ASSERT_TRUE(nError == _nAssumeError) << "Assumption is wrong: error number is wrong";
954 		if ( nError == ::osl::FileBase::E_None )
955 		{
956 			sal_Bool bStrAreEqual = _suAssumeResultStr.equals( suResultURL );
957             		ASSERT_TRUE(bStrAreEqual == sal_True) << "Assumption is wrong: ResultURL is not equal to expected URL ";
958             	}
959 	}
960 
961   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_001_1)
962   {
963     rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/relative/file1") );
964     check_getAbsoluteFileURL( aUserDirectoryURL, "relative/file1",::osl::FileBase::E_None, suAssume );
965   }
966   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_001_2)
967   {
968     rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/relative/file2") );
969     check_getAbsoluteFileURL( aUserDirectoryURL, "relative/./file2",::osl::FileBase::E_None, suAssume );
970   }
971   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_001_3)
972   {
973     rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/file3") );
974     check_getAbsoluteFileURL( aUserDirectoryURL, "relative/../file3",::osl::FileBase::E_None, suAssume );
975   }
976   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_001_4)
977   {
978     rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/file4") );
979     check_getAbsoluteFileURL( aUserDirectoryURL, "././relative/../file4",::osl::FileBase::E_None, suAssume );
980   }
981   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_001_5)
982   {
983     rtl::OUString suAssume;
984 #if ( defined UNX )
985     suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/relative/") );
986 #else
987     suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/relative") );
988 #endif
989     check_getAbsoluteFileURL( aUserDirectoryURL, "././relative/.",::osl::FileBase::E_None, suAssume );
990   }
991   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_001_6)
992   {
993     rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/.relative") );
994     check_getAbsoluteFileURL( aUserDirectoryURL, "./.relative",::osl::FileBase::E_None, suAssume );
995   }
996   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_001_7)
997   {
998     rtl::OUString suAssume;
999 #if (defined UNX )
1000     suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/.a/") );
1001 #else //windows
1002     suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/.a") );
1003 #endif
1004     check_getAbsoluteFileURL( aUserDirectoryURL, "./.a/mydir/..",::osl::FileBase::E_None, suAssume );
1005   }
1006   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_001_8)
1007   {
1008     rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/tmp/ok") );
1009 #if ( defined UNX ) || ( defined OS2 )
1010     check_getAbsoluteFileURL( aUserDirectoryURL, "tmp//ok",::osl::FileBase::E_None, suAssume );
1011 #else
1012     check_getAbsoluteFileURL( aUserDirectoryURL, "tmp//ok",::osl::FileBase::E_INVAL, suAssume );
1013 #endif
1014   }
1015   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_002)
1016   {
1017 #if ( defined UNX ) || ( defined OS2 )		//Link is not defined in Windows
1018 		::rtl::OUString aUStr_AbsURL, aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys );
1019 		( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/link.file");
1020 		( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/canonical.name");
1021 
1022                 rtl::OString strLinkFileName, strSrcFileName;
1023                 strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US );
1024                 strSrcFileName =  OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US );
1025 
1026 		createTestFile( aCanURL1 );
1027                 sal_Int32 fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() );
1028 		ASSERT_TRUE( fd == 0 );
1029 		rtl::OString sLnkURL = OUStringToOString( aLnkURL1, RTL_TEXTENCODING_ASCII_US );
1030     		rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/canonical.name") );
1031 		check_getAbsoluteFileURL( aUserDirectoryURL, sLnkURL, ::osl::FileBase::E_None, suAssume );
1032 		deleteTestFile( aCanURL1 );
1033                 fd = remove( strLinkFileName.getStr() );
1034 		ASSERT_TRUE( fd == 0 );
1035 #endif
1036   }
1037   //please see line# 930
1038   TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_003)
1039   {
1040   }
1041     TEST_F(getAbsoluteFileURL, getAbsoluteFileURL_004)
1042 	{
1043 		//create two level directories under $Temp/PID/
1044 		::rtl::OUString	aUStrUpBase = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/test1");
1045 		createTestDirectory( aUStrUpBase );
1046 		::rtl::OUString	aUStrBase = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/test1/dir1");
1047 		createTestDirectory( aUStrBase );
1048 
1049 		::rtl::OUString suAssume = aUserDirectoryURL.concat( ::rtl::OUString::createFromAscii("/mytestfile") );
1050 		check_getAbsoluteFileURL( aUStrBase, "../../mytestfile" , ::osl::FileBase::E_None, suAssume );
1051 		deleteTestDirectory( aUStrBase );
1052 		deleteTestDirectory( aUStrUpBase );
1053 	}
1054 	//---------------------------------------------------------------------
1055 	// testing two methods:
1056 	// static inline RC getSystemPathFromFileURL( const ::rtl::OUString& ustrFileURL,
1057 	//				  ::rtl::OUString& ustrSystemPath )
1058         // static RC getFileURLFromSystemPath( const ::rtl::OUString & ustrSystemPath,
1059         //                                ::rtl::OUString & ustrFileURL );
1060 	//---------------------------------------------------------------------
1061 	class SystemPath_FileURL:public ::testing::Test
1062 	{
1063 	protected:
1064 		//::osl::FileBase aFileBase;
1065 		// ::rtl::OUString aUStr;
1066 		// ::osl::FileBase::RC nError;
1067 
1068 	  //void check_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sAssumeResultStr);
1069 	  void check_SystemPath_FileURL(rtl::OString const& _sSource, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sAssumeResultStr, sal_Bool bDirection = sal_True );
1070 	  void checkWNTBehaviour_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sWNTAssumeResultString );
1071 	  void checkUNXBehaviour_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sUnixAssumeResultString );
1072 	  void checkWNTBehaviour_getFileURLFromSystemPath(rtl::OString const& _sSysPath, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sWNTAssumeResultString);
1073 	  void checkUNXBehaviour_getFileURLFromSystemPath(rtl::OString const& _sSysPath, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sUnixAssumeResultString);
1074 
1075 	};// class SystemPath_FileURL
1076 
1077 
1078     // test code.
1079 
1080   /*    void getSystemPathFromFileURL::check_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sAssumeResultStr)
1081     {
1082         // PRE: URL as String
1083         rtl::OUString suURL;
1084         rtl::OUString suStr;
1085         suURL = rtl::OStringToOUString(_sURL, RTL_TEXTENCODING_UTF8);
1086         ::osl::FileBase::RC nError =  osl::FileBase::getSystemPathFromFileURL( suURL, suStr ); // start with /
1087 
1088         // if the given string is gt length 0,
1089         // we check also this string
1090         rtl::OString sStr = rtl::OUStringToOString(suStr, RTL_TEXTENCODING_UTF8);
1091         rtl::OString sError = errorToString(nError);
1092         printf("getSystemPathFromFileURL('%s') deliver system path: '%s', error '%s'\n", _sURL.getStr(), sStr.getStr(), sError.getStr() );
1093 
1094         // rtl::OUString suStrEncode = rtl::Uri::encode(suStr, rtl_UriCharClassUnoParamValue, rtl_UriEncodeKeepEscapes, RTL_TEXTENCODING_UTF8);
1095         // sStr = rtl::OUStringToOString(suStr, RTL_TEXTENCODING_UTF8);
1096         // printf("UTF8: %s\n", sStr.getStr() );
1097 
1098         if (_sAssumeResultStr.getLength() > 0)
1099         {
1100             sal_Bool bStrAreEqual = _sAssumeResultStr.equals(sStr);
1101             ASSERT_TRUE(nError == _nAssumeError && bStrAreEqual == sal_True) << "Assumption is wrong";
1102         }
1103         else
1104         {
1105             ASSERT_TRUE(nError == _nAssumeError) << "Assumption is wrong";
1106         }
1107 	}*/
1108 
1109     // if bDirection==sal_True, check getSystemPathFromFileURL
1110     // if bDirection==sal_False, check getFileURLFromSystemPath
1111     void SystemPath_FileURL::check_SystemPath_FileURL(rtl::OString const& _sSource, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sAssumeResultStr, sal_Bool bDirection)
1112     {
1113         // PRE: URL as String
1114         rtl::OUString suSource;
1115         rtl::OUString suStr;
1116         suSource = rtl::OStringToOUString(_sSource, RTL_TEXTENCODING_UTF8);
1117 	::osl::FileBase::RC nError;
1118 	if ( bDirection == sal_True )
1119 	  nError = osl::FileBase::getSystemPathFromFileURL( suSource, suStr );
1120 	else
1121 	  nError = osl::FileBase::getFileURLFromSystemPath( suSource, suStr );
1122 
1123         // if the given string is gt length 0,
1124         // we check also this string
1125         rtl::OString sStr = rtl::OUStringToOString(suStr, RTL_TEXTENCODING_UTF8);
1126         rtl::OString sError = errorToString(nError);
1127 	if ( bDirection == sal_True )
1128 	  printf("getSystemPathFromFileURL('%s') deliver system path: '%s', error '%s'\n", _sSource.getStr(), sStr.getStr(), sError.getStr() );
1129 	else
1130 	  printf("getFileURLFromSystemPath('%s') deliver File URL: '%s', error '%s'\n", _sSource.getStr(), sStr.getStr(), sError.getStr() );
1131 
1132         // rtl::OUString suStrEncode = rtl::Uri::encode(suStr, rtl_UriCharClassUnoParamValue, rtl_UriEncodeKeepEscapes, RTL_TEXTENCODING_UTF8);
1133         // sStr = rtl::OUStringToOString(suStr, RTL_TEXTENCODING_UTF8);
1134         // printf("UTF8: %s\n", sStr.getStr() );
1135 
1136         if (_sAssumeResultStr.getLength() > 0)
1137         {
1138             sal_Bool bStrAreEqual = _sAssumeResultStr.equals(sStr);
1139             ASSERT_TRUE(nError == _nAssumeError && bStrAreEqual == sal_True) << "Assumption is wrong";
1140         }
1141         else
1142         {
1143             ASSERT_TRUE(nError == _nAssumeError) << "Assumption is wrong";
1144         }
1145     }
1146     void SystemPath_FileURL::checkWNTBehaviour_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sWNTAssumeResultString)
1147     {
1148 #if ( defined WNT )
1149         check_SystemPath_FileURL(_sURL, _nAssumeError, _sWNTAssumeResultString);
1150 #else
1151         (void)_sURL;
1152         (void)_nAssumeError;
1153         (void)_sWNTAssumeResultString;
1154 #endif
1155     }
1156 
1157     void SystemPath_FileURL::checkUNXBehaviour_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sUnixAssumeResultString)
1158     {
1159 #if ( defined UNX )
1160         check_SystemPath_FileURL(_sURL, _nAssumeError, _sUnixAssumeResultString);
1161 #else
1162         (void)_sURL;
1163         (void)_nAssumeError;
1164         (void)_sUnixAssumeResultString;
1165 #endif
1166     }
1167 
1168     void SystemPath_FileURL::checkWNTBehaviour_getFileURLFromSystemPath(rtl::OString const& _sSysPath, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sWNTAssumeResultString)
1169     {
1170 #if ( defined WNT )
1171         check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sWNTAssumeResultString, sal_False );
1172 #else
1173         (void)_sSysPath;
1174         (void)_nAssumeError;
1175         (void)_sWNTAssumeResultString;
1176 #endif
1177     }
1178 
1179     void SystemPath_FileURL::checkUNXBehaviour_getFileURLFromSystemPath(rtl::OString const& _sSysPath, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sUnixAssumeResultString)
1180     {
1181 #if ( defined UNX )
1182         check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sUnixAssumeResultString, sal_False );
1183 #else
1184         (void)_sSysPath;
1185         (void)_nAssumeError;
1186         (void)_sUnixAssumeResultString;
1187 #endif
1188     }
1189 
1190     /** LLA: Test for getSystemPathFromFileURL()
1191         this test is splitted into 2 different OS tests,
1192         the first function checkUNXBehaviour... runs only on Unix based Systems,
1193         the second only on windows based systems
1194         the first parameter are a file URL where we want to get the system path of,
1195         the second parameter is the assumed error of the osl_getSystemPathFromFileURL() function,
1196         the third parameter is the assumed result string, the string will only test, if it's length is greater 0
1197     */
1198 
1199     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_1)
1200     {
1201         rtl::OString sURL("");
1202 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1203 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1204     }
1205 
1206     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_2)
1207     {
1208         rtl::OString sURL("/");
1209 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1210 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "\\");
1211     }
1212     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_21)
1213     {
1214       //        rtl::OString sURL("%2f");
1215       rtl::OString sURL("%2F");
1216 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/"); // LLA: this is may be a BUG
1217 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1218     }
1219     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_22)
1220     {
1221       rtl::OString sURL("file:///tmp%2Fmydir");
1222 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1223 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1224     }
1225     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_3)
1226     {
1227         rtl::OString sURL("a");
1228 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a");
1229 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a");
1230     }
1231     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_31)
1232     {
1233         rtl::OString sURL("tmpname");
1234 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname");
1235 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname");
1236     }
1237     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_4)
1238     {
1239         rtl::OString sURL("file://");
1240 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "");
1241 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1242     }
1243     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_41)
1244     {
1245         rtl::OString sURL("file://localhost/tmp");
1246 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "");
1247 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1248     }
1249     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_5)
1250     {
1251         rtl::OString sURL("file:///tmp");
1252 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp");
1253 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1254     }
1255     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_51)
1256     {
1257         rtl::OString sURL("file://c:/tmp");
1258 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:/tmp"); // LLA: this is may be a BUG
1259 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1260     }
1261     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_52)
1262     {
1263         rtl::OString sURL("file:///c:/tmp");
1264 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp");
1265 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp");
1266     }
1267     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_53)
1268     {
1269 // LLA: is this a legal file path?
1270         rtl::OString sURL("file:///c|/tmp");
1271 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c|/tmp");
1272 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp");
1273     }
1274     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_6)
1275     {
1276         rtl::OString sURL("file:///tmp/first");
1277 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first");
1278 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1279     }
1280     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_61)
1281     {
1282         rtl::OString sURL("file:///c:/tmp/first");
1283 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first");
1284 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first");
1285     }
1286     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_7)
1287     {
1288         rtl::OString sURL("file:///tmp/../second");
1289 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/../second"); // LLA: may be a BUG
1290 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1291     }
1292     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_71)
1293     {
1294         rtl::OString sURL("file:///c:/tmp/../second");
1295 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/../second");
1296 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\..\\second");
1297     }
1298     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_8)
1299     {
1300         rtl::OString sURL("../tmp");
1301 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "../tmp");
1302 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "..\\tmp");
1303     }
1304     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_81)
1305     {
1306         rtl::OString sURL("file://~/tmp");
1307 	char* home_path;
1308 	home_path = getenv("HOME");
1309 	rtl::OString expResult(home_path);
1310 	expResult += "/tmp";
1311 	checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, expResult );
1312 	//	checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "\\tmp");
1313     }
1314     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_9)
1315     {
1316         rtl::OString sURL("file:///tmp/first%20second");
1317 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first second");
1318 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1319     }
1320     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_91)
1321     {
1322         rtl::OString sURL("file:///c:/tmp/first%20second");
1323 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first second");
1324 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first second");
1325     }
1326 
1327     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_001_92)
1328     {
1329         rtl::OString sURL("ca@#;+.,$///78no%01ni..name");
1330 		checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "");
1331 		checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
1332     }
1333 
1334 #if 0
1335     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_003)
1336 		{
1337 // LLA: ???
1338 //!! seams to be, that the directories do not pass together
1339             ::rtl::OUString aUStr;
1340 			::rtl::OUString aRelativeURL = ::rtl::OUString::createFromAscii("../../relartive/file3");
1341 			::rtl::OUString aResultURL ( aSysPath4 );
1342             ::osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL( aRelativeURL, aUStr );
1343 
1344 			sal_Bool bOk = compareFileName( aUStr, aResultURL );
1345 
1346 			::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getSystemPathFromFileURL(");
1347 			suError += aRelativeURL;
1348 			suError += ::rtl::OUString::createFromAscii(") function:use a relative file URL, did not pass in(W32), it did not specified in method declaration of relative path issue, ");
1349 			suError += outputError(aUStr, aResultURL);
1350 			ASSERT_TRUE(( osl::FileBase::E_None == nError ) && ( sal_True == bOk )) << suError;
1351 		}
1352 #endif
1353 
1354 		//normal legal case
1355     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_004)
1356 		{
1357         ::rtl::OUString aUStr;
1358         ::rtl::OUString aNormalURL( aTmpName6 );
1359         ::rtl::OUString aResultURL ( aSysPath4 );
1360         ::osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL( aNormalURL, aUStr );
1361 
1362 			sal_Bool bOk = compareFileName( aUStr, aResultURL );
1363 
1364 			::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getSystemPathFromFileURL(' ");
1365 			suError += aNormalURL;
1366 			suError += ::rtl::OUString::createFromAscii(" ') function:use an absolute file URL, ");
1367 			suError += outputError(aUStr, aResultURL);
1368 
1369 			ASSERT_TRUE(( osl::FileBase::E_None == nError ) && ( sal_True == bOk )) << suError.pData;
1370 
1371 		}
1372 
1373 		//CJK characters case
1374     TEST_F(SystemPath_FileURL, getSystemPathFromFileURL_005)
1375 		{
1376             ::rtl::OUString aUStr;
1377             createTestDirectory( aTmpName10 );
1378             ::rtl::OUString aNormalURL( aTmpName10 );
1379             ::rtl::OUString aResultURL ( aSysPath5 );
1380 
1381             ::osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL( aNormalURL, aUStr );
1382 
1383 			sal_Bool bOk = compareFileName( aUStr, aResultURL );
1384 
1385 			::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getSystemPathFromFileURL(' ");
1386 			suError += aNormalURL;
1387 			suError += ::rtl::OUString::createFromAscii(" ') function:use a CJK coded absolute URL, ");
1388 			suError += outputError(aUStr, aResultURL);
1389 			deleteTestDirectory( aTmpName10 );
1390 
1391 			ASSERT_TRUE(( osl::FileBase::E_None == nError ) && ( sal_True == bOk )) << suError.pData;
1392 		}
1393      TEST_F(SystemPath_FileURL, getFileURLFromSystemPath_001)
1394      {
1395         rtl::OString sSysPath("~/tmp");
1396 	char* home_path;
1397 	home_path = getenv("HOME");
1398 	rtl::OString expResult(home_path);
1399 	expResult = "file://"+ expResult + "/tmp";
1400 		checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, expResult );
1401 		checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "~/tmp");
1402      }
1403      TEST_F(SystemPath_FileURL, getFileURLFromSystemPath_002)
1404      {
1405         rtl::OString sSysPath("c:/tmp");
1406 		checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "c:/tmp");
1407 		checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///c:/tmp");
1408      }
1409      TEST_F(SystemPath_FileURL, getFileURLFromSystemPath_003)
1410      {
1411         rtl::OString sSysPath("file:///temp");
1412 		checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
1413 		checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
1414      }
1415     TEST_F(SystemPath_FileURL, getFileURLFromSystemPath_004)
1416      {
1417         rtl::OString sSysPath("//tmp//first start");
1418 		checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///tmp/first%20start");
1419 		checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
1420      }
1421      TEST_F(SystemPath_FileURL, getFileURLFromSystemPath_005)
1422      {
1423         rtl::OString sSysPath("");
1424 		checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
1425 		checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
1426      }
1427      	// start with "~user", not impletment
1428 	//      void SystemPath_FileURL::getFileURLFromSystemPath_006()
1429 
1430 
1431 
1432 
1433 	//---------------------------------------------------------------------
1434 	// testing the method
1435 	// static inline RC searchFileURL(  const ::rtl::OUString& ustrFileName,
1436 	// 									const ::rtl::OUString& ustrSearchPath,
1437 	//									::rtl::OUString& ustrFileURL )
1438 	//---------------------------------------------------------------------
1439 	class searchFileURL:public ::testing::Test
1440 	{
1441 	protected:
1442 		//::osl::FileBase aFileBase;
1443 		::rtl::OUString aUStr;
1444 		::osl::FileBase::RC nError1, nError2, nError3,nError4;
1445 
1446 	    public:
1447 	};// class searchFileURL
1448 
1449     // test code.
1450     TEST_F(searchFileURL, searchFileURL_001 )
1451     {
1452         /* search file is passed by system filename */
1453         nError1 = ::osl::FileBase::searchFileURL( aTmpName1, aUserDirectorySys, aUStr );
1454         /* search file is passed by full qualified file URL */
1455         nError2 = ::osl::FileBase::searchFileURL( aCanURL1, aUserDirectorySys, aUStr );
1456         /* search file is passed by relative file path */
1457         nError3 = ::osl::FileBase::searchFileURL( aRelURL4, aUserDirectorySys, aUStr );
1458 
1459         ASSERT_TRUE(( osl::FileBase::E_NOENT == nError1 ) &&
1460                                 ( osl::FileBase::E_NOENT == nError2 ) &&
1461                                 ( osl::FileBase::E_NOENT == nError3 )) << "test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ";
1462     }
1463 
1464     TEST_F(searchFileURL, searchFileURL_002 )
1465     {
1466         /* search file is passed by system filename */
1467         nError1 = ::osl::FileBase::searchFileURL( aTempDirectorySys, aRootSys, aUStr );
1468         sal_Bool bOk1 = compareFileName( aUStr, aTempDirectoryURL );
1469         /* search file is passed by full qualified file URL */
1470         nError2 = ::osl::FileBase::searchFileURL( aTempDirectoryURL, aRootSys, aUStr );
1471         sal_Bool bOk2 = compareFileName( aUStr, aTempDirectoryURL );
1472         /* search file is passed by relative file path */
1473         nError3 = ::osl::FileBase::searchFileURL( aRelURL5, aRootSys, aUStr );
1474         sal_Bool bOk3 = compareFileName( aUStr, aTempDirectoryURL );
1475         /* search file is passed by an exist file */
1476         createTestFile( aCanURL1 );
1477         nError4 = ::osl::FileBase::searchFileURL( aCanURL4, aUserDirectorySys, aUStr );
1478         sal_Bool bOk4 = compareFileName( aUStr, aCanURL1 );
1479         deleteTestFile( aCanURL1 );
1480 
1481         ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) &&
1482                                 ( osl::FileBase::E_None == nError2 ) &&
1483                                 ( osl::FileBase::E_None == nError3 ) &&
1484                                 ( osl::FileBase::E_None == nError4 ) &&
1485                                 ( sal_True == bOk1 ) &&
1486                                 ( sal_True == bOk2 ) &&
1487                                 ( sal_True == bOk3 ) &&
1488                                 ( sal_True == bOk4 )) << "test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.";
1489     }
1490 
1491 
1492     TEST_F(searchFileURL, searchFileURL_003 )
1493     {
1494         OSLTEST_DECLARE( SystemPathList,  TEST_PLATFORM_ROOT":"TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP":"TEST_PLATFORM_ROOT"system/path" );
1495         nError1 = ::osl::FileBase::searchFileURL( aUserDirectoryURL, aSystemPathList, aUStr );
1496         sal_Bool bOk = compareFileName( aUStr, aUserDirectoryURL );
1497         ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) &&
1498                                 ( sal_True == bOk )) << "test for searchFileURL function: search directory is a list of system paths";
1499     }
1500 
1501     TEST_F(searchFileURL, searchFileURL_004 )
1502     {
1503         OSLTEST_DECLARE( SystemPathList,  TEST_PLATFORM_ROOT PATH_LIST_DELIMITER TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP PATH_LIST_DELIMITER TEST_PLATFORM_ROOT "system/path/../name" );
1504         nError1 = ::osl::FileBase::searchFileURL( aUserDirectoryURL, aSystemPathList, aUStr );
1505         sal_Bool bOk = compareFileName( aUStr, aUserDirectoryURL );
1506         ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) &&
1507                                 ( sal_True == bOk )) << "test for searchFileURL function: search directory is a list of system paths";
1508     }
1509 
1510     TEST_F(searchFileURL, searchFileURL_005 )
1511     {
1512         nError1 = ::osl::FileBase::searchFileURL( aUserDirectoryURL, aNullURL, aUStr );
1513         sal_Bool bOk = compareFileName( aUStr, aUserDirectoryURL );
1514         ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) &&
1515                                 ( sal_True == bOk )) << "test for searchFileURL function: search directory is NULL";
1516     }
1517 
1518 	//---------------------------------------------------------------------
1519 	// testing the method
1520 	// static inline RC getTempDirURL( ::rtl::OUString& ustrTempDirURL )
1521 	//---------------------------------------------------------------------
1522 	class getTempDirURL:public ::testing::Test
1523 	{
1524 	protected:
1525 		//::osl::FileBase aFileBase;
1526 		::rtl::OUString aUStr;
1527 		::osl::FileBase::RC nError;
1528 
1529 	    public:
1530 		// initialization
1531 		void SetUp( )
1532 		{
1533 			 nError = FileBase::getTempDirURL( aUStr );
1534 		}
1535 
1536 		void TearDown( )
1537 		{
1538 		}
1539 	};// class getTempDirURL
1540 
1541     TEST_F(getTempDirURL, getTempDirURL_001 )
1542     {
1543 
1544         ASSERT_TRUE(( osl::FileBase::E_None == nError )) << "test for getTempDirURL function: excution";
1545     }
1546 
1547     TEST_F(getTempDirURL, getTempDirURL_002 )
1548     {
1549         ASSERT_TRUE(checkDirectory( aUStr, osl_Check_Mode_OpenAccess ) &&
1550                                 checkDirectory( aUStr, osl_Check_Mode_ReadAccess ) &&
1551                                 checkDirectory( aUStr,osl_Check_Mode_WriteAccess )) << "test for getTempDirURL function: test for open and write access rights";
1552     }
1553 
1554 	//---------------------------------------------------------------------
1555 	// 	testing the method
1556 	// 	static inline RC createTempFile( ::rtl::OUString* pustrDirectoryURL,
1557 	//									 oslFileHandle* pHandle,
1558 	//									 ::rtl::OUString* pustrTempFileURL)
1559 	//---------------------------------------------------------------------
1560 	class createTempFile:public ::testing::Test
1561 	{
1562 	protected:
1563 		//::osl::FileBase aFileBase;
1564 		::osl::FileBase::RC nError1, nError2;
1565 		sal_Bool bOK;
1566 
1567 		oslFileHandle	*pHandle;
1568 		::rtl::OUString	*pUStr_DirURL;
1569 		::rtl::OUString	*pUStr_FileURL;
1570 
1571 	    public:
1572 
1573 		// initialization
1574 		void SetUp( )
1575 		{
1576 			pHandle = new oslFileHandle();
1577 			pUStr_DirURL = new ::rtl::OUString( aUserDirectoryURL );
1578 			pUStr_FileURL = new ::rtl::OUString();
1579 			//*pUStr_DirURL = aUserDirectoryURL;                /// create temp file in /tmp/PID or c:\temp\PID.*/
1580 		}
1581 
1582 		void TearDown( )
1583 		{
1584 			delete pUStr_DirURL;
1585 			delete pUStr_FileURL;
1586 			delete pHandle;
1587 		}
1588 	};// class createTempFile
1589 
1590     TEST_F(createTempFile, createTempFile_001 )
1591     {
1592         nError1 = FileBase::createTempFile( pUStr_DirURL, pHandle, pUStr_FileURL );
1593         ::osl::File testFile( *pUStr_FileURL );
1594         //printFileName(*pUStr_FileURL);
1595         nError2 = testFile.open( OpenFlag_Create );
1596         if ( osl::FileBase::E_EXIST == nError2 )  {
1597             osl_closeFile( *pHandle );
1598             deleteTestFile( *pUStr_FileURL );
1599         }
1600 
1601         ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) && ( pHandle != NULL ) &&   ( osl::FileBase::E_EXIST== nError2 )) << "test for createTempFile function: create temp file and test the existence";
1602     }
1603 
1604     TEST_F(createTempFile, createTempFile_002 )
1605     {
1606         bOK = sal_False;
1607         nError1 = FileBase::createTempFile( pUStr_DirURL, pHandle, pUStr_FileURL );
1608         ::osl::File testFile( *pUStr_FileURL );
1609         nError2 = testFile.open( OpenFlag_Create );
1610 
1611         ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) && ( pHandle != NULL ) &&
1612             ( osl::FileBase::E_EXIST == nError2 )) << "createTempFile function: create a temp file, but it does not exist";
1613 
1614         //check file if have the write permission
1615         if ( osl::FileBase::E_EXIST == nError2 )  {
1616             bOK = ifFileCanWrite( *pUStr_FileURL );
1617             osl_closeFile( *pHandle );
1618             deleteTestFile( *pUStr_FileURL );
1619         }
1620 
1621         ASSERT_TRUE(( sal_True == bOK )) << "test for open and write access rights, in (W32), it did not have write access right, but it should be writtenable.";
1622     }
1623 
1624     TEST_F(createTempFile, createTempFile_003 )
1625     {
1626         nError1 = FileBase::createTempFile( pUStr_DirURL, pHandle, 0 );
1627         //the temp file will be removed when return from createTempFile
1628         bOK = ( pHandle != NULL && pHandle != 0);
1629         if ( sal_True == bOK )
1630             osl_closeFile( *pHandle );
1631 
1632         ASSERT_TRUE(( ::osl::FileBase::E_None == nError1 ) &&( sal_True == bOK )) << "test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.";
1633     }
1634     TEST_F(createTempFile, createTempFile_004 )
1635     {
1636         nError1 = FileBase::createTempFile( pUStr_DirURL, 0, pUStr_FileURL );
1637         bOK = ( pUStr_FileURL != 0);
1638         ::osl::File testFile( *pUStr_FileURL );
1639         nError2 = testFile.open( OpenFlag_Create );
1640         deleteTestFile( *pUStr_FileURL );
1641         ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) && ( osl::FileBase::E_EXIST == nError2 ) &&( sal_True == bOK )) << "createTempFile function: create a temp file, but it does not exist";
1642 
1643     }
1644 
1645 }// namespace osl_FileBase
1646 
1647 
1648 //------------------------------------------------------------------------
1649 // Beginning of the test cases for VolumeDevice class
1650 //------------------------------------------------------------------------
1651 
1652 #if 0  //~ this Class has been deprecated
1653 namespace osl_VolumeDevice
1654 {
1655 
1656 	//---------------------------------------------------------------------
1657 	// 	testing the method
1658 	// 	VolumeDevice() : _aHandle( NULL )
1659 	//---------------------------------------------------------------------
1660     class  VolumeDeviceCtors : public ::testing::Test
1661 	{
1662 	protected:
1663 		::osl::VolumeDevice aVolumeDevice;
1664 		::rtl::OUString aUStr;
1665 		::osl::FileBase::RC nError1, nError2;
1666 
1667 	    public:
1668 		// initialization
1669 		void SetUp( )
1670 		{
1671 		}
1672 
1673 		void TearDown( )
1674 		{
1675 		}
1676 	};// class ctors
1677 
1678     TEST_F(VolumeDeviceCtors, ctors_001 )
1679     {
1680         ::osl::VolumeDevice aVolumeDevice1;
1681 
1682         ASSERT_TRUE(( osl::FileBase::E_None !=  aVolumeDevice1.automount( ) ) &&
1683                                 ( osl::FileBase::E_None !=  aVolumeDevice1.unmount( ) )   &&
1684                                 ( aNullURL.equals( aVolumeDevice1.getMountPath( ) ) )) << "test for ctors function: Constructor for VolumeDevice with no args.";
1685     }
1686 
1687         TEST_F(VolumeDeviceCtors, ctors_002 )
1688     {
1689         ::osl::VolumeInfo   aVolumeInfo( VolumeInfoMask_Attributes );
1690         nError1 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo );
1691         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1692 
1693         ::osl::VolumeDevice aVolumeDevice1( aVolumeInfo.getDeviceHandle( ) );
1694         sal_Bool bOk = compareFileName( aNullURL, aVolumeDevice1.getMountPath( ) );
1695         ASSERT_TRUE(sal_False == bOk) << "test for ctors function: Copy constructor for VolumeDevice, the copied VolumeDevice should have a mount path file:///, but it returned an empty OUString, it also may be the error from getDeviceHandle(), it did not pass in (UNX), (W32).";
1696     }
1697 
1698         TEST_F(VolumeDeviceCtors, ctors_003 )
1699     {
1700         ::osl::VolumeInfo   aVolumeInfo( VolumeInfoMask_Attributes );
1701         nError1 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo );
1702         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1703 
1704         ::osl::VolumeDevice aVolumeDevice1 = aVolumeInfo.getDeviceHandle( );
1705         sal_Bool bOk = compareFileName( aNullURL, aVolumeDevice1.getMountPath( ) );
1706         ASSERT_TRUE(sal_False == bOk) << "test for ctors function: Assigned operator for VolumeDevice, the assigned VolumeDevice should have a mount path file:///, but it returned an empty OUString, it also may be the error from getDeviceHandle(),it did not pass in (UNX), (W32).";
1707     }
1708 
1709 	//---------------------------------------------------------------------
1710 	// 	testing the method
1711 	// 	inline RC automount()
1712 	//---------------------------------------------------------------------
1713     class  automount : public ::testing::Test
1714 	{
1715 	protected:
1716 		::osl::VolumeDevice aVolumeDevice;
1717 		::rtl::OUString aUStr;
1718 		::osl::FileBase::RC nError1, nError2;
1719 
1720 	    public:
1721 		// initialization
1722 		void SetUp( )
1723 		{
1724 		}
1725 
1726 		void TearDown( )
1727 		{
1728 
1729 		}
1730 	};// class automount
1731 
1732     TEST_F(automount, automount_001 )
1733     {
1734         ::osl::VolumeDevice aVolumeDevice1;
1735         nError1 = aVolumeDevice1.automount( );
1736 
1737         ASSERT_TRUE(( osl::FileBase::E_INVAL == nError1 )) << "test for automount function: invalid parameter.";
1738     }
1739 
1740         TEST_F(automount, automount_002 )
1741     {
1742         ::osl::VolumeInfo   aVolumeInfo( VolumeInfoMask_Attributes );
1743         nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo );
1744         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1745 
1746         ::osl::VolumeDevice aVolumeDevice1( aVolumeInfo.getDeviceHandle( ) );
1747         nError1 = aVolumeDevice1.unmount( );
1748         nError1 = aVolumeDevice1.automount( );
1749         ASSERT_TRUE(( osl::FileBase::E_None == nError1 )) << "test for automount function: this test is not implemented yet, it did not pass in (UNX), (W32).";
1750     }
1751 
1752 }// namespace osl_VolumeDevice
1753 #endif
1754 
1755 
1756 //------------------------------------------------------------------------
1757 // Beginning of the test cases for VolumeInfo class
1758 //------------------------------------------------------------------------
1759 namespace osl_VolumeInfo
1760 {
1761 
1762 	//---------------------------------------------------------------------
1763 	// 	testing the method
1764 	// 	VolumeInfo( sal_uInt32 nMask ): _nMask( nMask )
1765 	//---------------------------------------------------------------------
1766     class  VolumeInfoCtors : public ::testing::Test
1767 	{
1768 	protected:
1769 		::rtl::OUString aUStr;
1770 		::osl::FileBase::RC nError1, nError2;
1771 
1772  		::osl::VolumeDevice aVolumeDevice1;
1773 
1774 	    public:
1775 		// initialization
1776 		void SetUp( )
1777 		{
1778 		}
1779 
1780 		void tearDown( )
1781 		{
1782 		}
1783 	};// class ctors
1784 
1785     TEST_F(VolumeInfoCtors, ctors_001 )
1786     {
1787         ::osl::VolumeInfo   aVolumeInfo( 0 );
1788         nError1 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo );
1789         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1790         sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( );
1791         sal_uInt32 uiMaxPathLength = aVolumeInfo.getMaxPathLength( );
1792         aUStr = aVolumeInfo.getFileSystemName( );
1793 
1794         ASSERT_TRUE(( 0 == uiTotalSpace ) &&
1795                                 ( 0 == uiMaxPathLength ) &&
1796                                 sal_True == compareFileName( aUStr, aNullURL )) << "test for ctors function: mask is empty";
1797     }
1798 
1799 #if ( defined UNX ) || ( defined OS2 )
1800     TEST_F(VolumeInfoCtors, ctors_002 )
1801     {
1802         ::osl::VolumeInfo   aVolumeInfo( VolumeInfoMask_TotalSpace |
1803                                          VolumeInfoMask_UsedSpace |
1804                                          VolumeInfoMask_FileSystemName );
1805         nError1 = ::osl::Directory::getVolumeInfo( aVolURL4, aVolumeInfo );
1806         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1807         //ASSERT_TRUE( aVolumeInfo.isValid( mask ) );
1808         sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( );
1809         sal_uInt64 uiUsedSpace = aVolumeInfo.getUsedSpace( );
1810         aUStr = aVolumeInfo.getFileSystemName( );
1811 
1812         ASSERT_TRUE(( 0 != uiTotalSpace ) &&
1813                                 ( 0 != uiUsedSpace ) &&
1814                                 sal_True == compareFileName( aUStr, "nfs" )) << "test for ctors function: mask is specified as certain valid fields, and get the masked fields";
1815     }
1816 #else           /// Windows version,here we can not determine whichvolume in Windows is serve as an nfs volume.
1817     TEST_F(VolumeInfoCtors, ctors_002 )
1818     {
1819         ASSERT_TRUE(1 == 1) << "test for ctors function: mask is specified as certain valid fields, and get the masked fields( Windows version )";
1820     }
1821 #endif
1822 
1823     TEST_F(VolumeInfoCtors, ctors_003 )
1824     {
1825 
1826             sal_Int32 mask1 = VolumeInfoMask_FreeSpace;
1827         ::osl::VolumeInfo aVolumeInfo1( mask1 );
1828         nError1 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo1 );
1829         ASSERT_TRUE( sal_True == aVolumeInfo1.isValid( mask1 ) );
1830         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1831 
1832         sal_uInt64 uiTotalSpace1 = aVolumeInfo1.getTotalSpace( );
1833         aUStr = aVolumeInfo1.getFileSystemName( );
1834 
1835             sal_Int32 mask2 = VolumeInfoMask_TotalSpace;
1836         ::osl::VolumeInfo aVolumeInfo2( mask2 );
1837         nError2 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo2 );
1838         ASSERT_TRUE( sal_True == aVolumeInfo2.isValid( mask2 ) );
1839         ASSERT_TRUE( osl::FileBase::E_None == nError2 );
1840 
1841         sal_uInt64 uiTotalSpace2 = aVolumeInfo2.getTotalSpace( );
1842 
1843         ASSERT_TRUE(( 0 == uiTotalSpace1 ) && ( 0 != uiTotalSpace2 ) &&
1844                                 sal_True == compareFileName( aUStr, aNullURL )) << "test for ctors function: mask is specified as certain valid fields, but get unmasked fields, use mask to FreeSpace, but I can get TotalSpace, did not pass in (UNX)(W32)";
1845     }
1846 
1847  	//---------------------------------------------------------------------
1848 	// 	testing the method
1849 	// 	inline sal_Bool isValid( sal_uInt32 nMask ) const
1850 	//---------------------------------------------------------------------
1851     class  VolumeInfoIsValid : public ::testing::Test
1852 	{
1853 	protected:
1854 		::osl::VolumeDevice aVolumeDevice;
1855 		::rtl::OUString aUStr;
1856 		::osl::FileBase::RC nError1, nError2;
1857 
1858 	    public:
1859 		// initialization
1860 		void SetUp( )
1861 		{
1862 		}
1863 
1864 		void TearDown( )
1865 		{
1866 
1867 		}
1868 	};// class isValid
1869 
1870     TEST_F(VolumeInfoIsValid, isValid_001 )
1871     {
1872         sal_Int32 mask = 0;
1873         ::osl::VolumeInfo aVolumeInfo( mask );
1874         nError1 = ::osl::Directory::getVolumeInfo( aVolURL4, aVolumeInfo );
1875         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1876 
1877         ASSERT_TRUE(sal_True == aVolumeInfo.isValid( mask )) << "test for isValid function: no fields specified.";
1878     }
1879 
1880 #if ( defined UNX ) || ( defined OS2 )
1881     TEST_F(VolumeInfoIsValid, isValid_002 )
1882     {
1883         sal_Int32 mask = VolumeInfoMask_Attributes | VolumeInfoMask_TotalSpace | osl_VolumeInfo_Mask_UsedSpace |
1884                          osl_VolumeInfo_Mask_FreeSpace | osl_VolumeInfo_Mask_MaxNameLength |
1885                          osl_VolumeInfo_Mask_MaxPathLength | osl_VolumeInfo_Mask_FileSystemName;
1886         ::osl::VolumeInfo aVolumeInfo( mask );
1887         nError1 = ::osl::Directory::getVolumeInfo( aVolURL4, aVolumeInfo );
1888         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1889 
1890         ASSERT_TRUE(sal_True == aVolumeInfo.isValid( mask )) << "test for isValid function: all valid fields specified for a nfs volume.";
1891     }
1892 #else           /// Windows version,here we can not determine whichvolume in Windows is serve as an nfs volume.
1893     TEST_F(VolumeInfoIsValid, isValid_002 )
1894     {
1895         ASSERT_TRUE(1 == 1) << "test for isValid function: all valid fields specified for a nfs volume.( Windows version )";
1896     }
1897 #endif
1898 
1899     TEST_F(VolumeInfoIsValid, isValid_003 )
1900     {
1901             ::osl::VolumeDevice aVolumeDevice1;
1902         sal_Int32 mask = VolumeInfoMask_Attributes;
1903         ::osl::VolumeInfo   aVolumeInfo( mask );
1904         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
1905         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1906         sal_Bool bOk1 = aVolumeInfo.isValid( mask );
1907 
1908         nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo );
1909         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1910         sal_Bool bOk2 = aVolumeInfo.isValid( mask );
1911 
1912         ASSERT_TRUE(( sal_True == bOk1 ) && ( sal_True == bOk2 )) << "test for isValid function: VolumeInfoMask_Attributes, it should be valid for some volume such as /, floppy, cdrom, etc. but it did not pass";
1913     }
1914 
1915  	//---------------------------------------------------------------------
1916 	// 	testing the method
1917 	// 	inline sal_Bool getRemoteFlag() const
1918 	//---------------------------------------------------------------------
1919     class  getRemoteFlag : public ::testing::Test
1920 	{
1921 	protected:
1922 		::osl::VolumeDevice aVolumeDevice;
1923 		::rtl::OUString aUStr;
1924 		::osl::FileBase::RC nError1, nError2;
1925 	};// class getRemoteFlag
1926 
1927     TEST_F(getRemoteFlag, getRemoteFlag_001 )
1928     {
1929         sal_Int32 mask = VolumeInfoMask_Attributes;
1930         ::osl::VolumeInfo aVolumeInfo( mask );
1931         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
1932         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1933         sal_Bool bOk = aVolumeInfo.getRemoteFlag( );
1934 
1935         ASSERT_TRUE(( sal_False == bOk )) << "test for getRemoteFlag function: get a volume device which is not remote.";
1936     }
1937 
1938  #if ( defined UNX ) || ( defined OS2 ) //remote Volume is different in Solaris and Windows
1939     TEST_F(getRemoteFlag, getRemoteFlag_002 )
1940     {
1941         sal_Int32 mask = VolumeInfoMask_Attributes;
1942         ::osl::VolumeInfo aVolumeInfo( mask );
1943         nError1 = ::osl::Directory::getVolumeInfo( aVolURL4, aVolumeInfo );
1944         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1945         sal_Bool bOk = aVolumeInfo.getRemoteFlag( );
1946 
1947         ASSERT_TRUE(( sal_True == bOk )) << "test for getRemoteFlag function: get a volume device which is remote( Solaris version ).";
1948     }
1949 #else                                    //Windows version
1950     TEST_F(getRemoteFlag, getRemoteFlag_002 )
1951     {
1952         ASSERT_TRUE(1 == 1) << "test for getRemoteFlag function: get a volume device which is remote( Windows version )";
1953     }
1954 #endif
1955 
1956 	//---------------------------------------------------------------------
1957 	// 	testing the method
1958 	// 	inline sal_Bool getRemoveableFlag() const
1959 	//---------------------------------------------------------------------
1960     class  getRemoveableFlag : public ::testing::Test
1961 	{
1962 	protected:
1963 		::osl::FileBase::RC nError1, nError2;
1964 	};// class getRemoveableFlag
1965 
1966     TEST_F(getRemoveableFlag, getRemoveableFlag_001 )
1967     {
1968         sal_Int32 mask = VolumeInfoMask_Attributes;
1969         ::osl::VolumeInfo aVolumeInfo( mask );
1970         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
1971         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1972         sal_Bool bOk = aVolumeInfo.getRemoveableFlag( );
1973 
1974         ASSERT_TRUE(sal_False == bOk) << "test for getRemoveableFlag function: get a volume device which is not removable.";
1975     }
1976 
1977     TEST_F(getRemoveableFlag, getRemoveableFlag_002 )
1978     {
1979         sal_Int32 mask = VolumeInfoMask_Attributes;
1980         ::osl::VolumeInfo aVolumeInfo( mask );
1981         nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo );
1982         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
1983         sal_Bool bOk = aVolumeInfo.getRemoveableFlag( );
1984 
1985         ASSERT_TRUE(sal_True == bOk) << "test for getRemoveableFlag function: get a volume device which is removable, not sure, here we use floppy disk, but it did not pass.";
1986     }
1987 
1988 	//---------------------------------------------------------------------
1989 	// 	testing the method
1990 	// 	inline sal_Bool getCompactDiscFlag() const
1991 	//---------------------------------------------------------------------
1992     class  getCompactDiscFlag : public ::testing::Test
1993 	{
1994 	protected:
1995 		::osl::FileBase::RC nError1;
1996 	};// class getCompactDiscFlag
1997 
1998     TEST_F(getCompactDiscFlag, getCompactDiscFlag_001 )
1999     {
2000         sal_Int32 mask = VolumeInfoMask_Attributes;
2001         ::osl::VolumeInfo aVolumeInfo( mask );
2002         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2003         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2004         sal_Bool bOk = aVolumeInfo.getCompactDiscFlag( );
2005 
2006         ASSERT_TRUE(( sal_False == bOk )) << "test for getCompactDiscFlag function: get a volume device which is not a cdrom.";
2007     }
2008 
2009     TEST_F(getCompactDiscFlag, getCompactDiscFlag_002 )
2010     {
2011             sal_Int32 mask = VolumeInfoMask_Attributes;
2012         ::osl::VolumeInfo aVolumeInfo( mask );
2013         nError1 = ::osl::Directory::getVolumeInfo( aVolURL6, aVolumeInfo );
2014         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2015         sal_Bool bOk = aVolumeInfo.getCompactDiscFlag( );
2016 
2017         ASSERT_TRUE(( sal_True == bOk )) << "test for getCompactDiscFlag function: get a cdrom volume device flag, it did not pass.";
2018     }
2019 
2020 	//---------------------------------------------------------------------
2021 	// 	testing the method
2022 	// 	inline sal_Bool getFloppyDiskFlag() const
2023 	//---------------------------------------------------------------------
2024     class  getFloppyDiskFlag : public ::testing::Test
2025 	{
2026 	protected:
2027 		::osl::FileBase::RC nError1;
2028 	};// class getFloppyDiskFlag
2029 
2030     TEST_F(getFloppyDiskFlag, getFloppyDiskFlag_001 )
2031     {
2032         sal_Int32 mask = VolumeInfoMask_Attributes;
2033         ::osl::VolumeInfo aVolumeInfo( mask );
2034         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2035         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2036         sal_Bool bOk = aVolumeInfo.getFloppyDiskFlag( );
2037 
2038         ASSERT_TRUE(( sal_False == bOk )) << "test for getFloppyDiskFlag function: get a volume device which is not a floppy disk.";
2039     }
2040 
2041     TEST_F(getFloppyDiskFlag, getFloppyDiskFlag_002 )
2042     {
2043             sal_Int32 mask = VolumeInfoMask_Attributes;
2044         ::osl::VolumeInfo aVolumeInfo( mask );
2045         nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo );
2046         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2047         sal_Bool bOk = aVolumeInfo.getFloppyDiskFlag( );
2048 
2049         ASSERT_TRUE(( sal_True == bOk )) << "test for getFloppyDiskFlag function: get a floppy volume device flag, it did not pass.";
2050     }
2051 
2052 	//---------------------------------------------------------------------
2053 	// 	testing the method
2054 	// 	inline sal_Bool getFixedDiskFlag() const
2055 	//---------------------------------------------------------------------
2056     class  getFixedDiskFlag : public ::testing::Test
2057 	{
2058 	protected:
2059 		::osl::FileBase::RC nError1;
2060 	};// class getFixedDiskFlag
2061 
2062     TEST_F(getFixedDiskFlag, getFixedDiskFlag_001 )
2063     {
2064         sal_Int32 mask = VolumeInfoMask_Attributes;
2065         ::osl::VolumeInfo aVolumeInfo( mask );
2066         nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo );
2067         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2068         sal_Bool bOk = aVolumeInfo.getFixedDiskFlag( );
2069 
2070         ASSERT_TRUE(( sal_False == bOk )) << "test for getFixedDiskFlag function: get a volume device which is not a fixed disk.";
2071     }
2072 
2073     TEST_F(getFixedDiskFlag, getFixedDiskFlag_002 )
2074     {
2075             sal_Int32 mask = VolumeInfoMask_Attributes;
2076         ::osl::VolumeInfo aVolumeInfo( mask );
2077         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2078         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2079         sal_Bool bOk = aVolumeInfo.getFixedDiskFlag( );
2080 
2081         ASSERT_TRUE(( sal_True == bOk )) << "test for getFixedDiskFlag function: get a fixed disk volume device flag, it did not pass.";
2082     }
2083 
2084 	//---------------------------------------------------------------------
2085 	// 	testing the method
2086 	// 	inline sal_Bool getRAMDiskFlag() const
2087 	//---------------------------------------------------------------------
2088     class  getRAMDiskFlag : public ::testing::Test
2089 	{
2090 	protected:
2091 		::osl::FileBase::RC nError1;
2092 	};// class getRAMDiskFlag
2093 
2094     TEST_F(getRAMDiskFlag, getRAMDiskFlag_001 )
2095     {
2096         sal_Int32 mask = VolumeInfoMask_Attributes;
2097         ::osl::VolumeInfo aVolumeInfo( mask );
2098         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2099         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2100         sal_Bool bOk = aVolumeInfo.getRAMDiskFlag( );
2101 
2102         ASSERT_TRUE(( sal_False == bOk )) << "test for getRAMDiskFlag function: get a volume device which is not a RAM disk.";
2103     }
2104 
2105     TEST_F(getRAMDiskFlag, getRAMDiskFlag_002 )
2106     {
2107             sal_Int32 mask = VolumeInfoMask_Attributes;
2108         ::osl::VolumeInfo aVolumeInfo( mask );
2109         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2110         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2111         sal_Bool bOk = aVolumeInfo.getRAMDiskFlag( );
2112 
2113         ASSERT_TRUE(( sal_True == bOk )) << "test for getRAMDiskFlag function: FIX ME, don't know how to get a RAM disk flag, perhaps Windows 98 boot disk can create a RAM disk, it did not pass in (UNX)(W32).";
2114     }
2115 
2116 	//---------------------------------------------------------------------
2117 	// 	testing the method
2118 	// 	inline sal_uInt64 getTotalSpace() const
2119 	//---------------------------------------------------------------------
2120     class  getTotalSpace : public ::testing::Test
2121 	{
2122     protected:
2123 		::osl::FileBase::RC nError1;
2124 	};// class getTotalSpace
2125 
2126     TEST_F(getTotalSpace, getTotalSpace_001 )
2127     {
2128         sal_Int32 mask = VolumeInfoMask_TotalSpace;
2129         ::osl::VolumeInfo aVolumeInfo( mask );
2130         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2131         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2132         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2133         sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( );
2134 
2135         ASSERT_TRUE(0 != uiTotalSpace) << "test for getTotalSpace function: get total space of Fixed disk volume mounted on /, it should not be 0";
2136     }
2137 
2138  #if defined( UNX )
2139     TEST_F(getTotalSpace, getTotalSpace_002 )
2140     {
2141             sal_Int32 mask = VolumeInfoMask_TotalSpace;
2142         ::osl::VolumeInfo aVolumeInfo( mask );
2143         nError1 = ::osl::Directory::getVolumeInfo( aVolURL3, aVolumeInfo );
2144         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2145         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2146         sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( );
2147 
2148         ASSERT_TRUE(0 == uiTotalSpace) << "test for getTotalSpace function: get total space of /proc, it should be 0";
2149     }
2150 #else           /// Windows version, in Windows, there is no /proc directory
2151     TEST_F(getTotalSpace, getTotalSpace_002 )
2152     {
2153         ASSERT_TRUE(1 == 1) << "test for getTotalSpace function:not applicable for /proc( Windows version )";
2154     }
2155 #endif
2156 
2157 
2158 
2159 #if defined(SOLARIS)
2160         TEST_F(getTotalSpace, getTotalSpace_003 )
2161     {
2162             struct statvfs aStatFS;
2163         static const sal_Char  name[] = "/";
2164 
2165         memset (&aStatFS, 0, sizeof(aStatFS));
2166         statvfs( name, &aStatFS);
2167         sal_uInt64 TotalSpace = aStatFS.f_frsize * aStatFS.f_blocks ;
2168 
2169             sal_Int32 mask = VolumeInfoMask_TotalSpace;
2170         ::osl::VolumeInfo aVolumeInfo( mask );
2171         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2172         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2173         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2174         sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( );
2175 
2176             ASSERT_TRUE(uiTotalSpace == TotalSpace) << "test for getTotalSpace function: get total space by hand, then compare with getTotalSpace, it did not pass";
2177     }
2178 #else           /// Windows version
2179     TEST_F(getTotalSpace, getTotalSpace_003 )
2180     {
2181         ASSERT_TRUE(1 == 1) << "test for getTotalSpace function:not implemented yet( Windows version )";
2182     }
2183 #endif
2184 
2185 	//---------------------------------------------------------------------
2186 	// 	testing the method
2187 	// 	inline sal_uInt64 getFreeSpace() const
2188 	//---------------------------------------------------------------------
2189     class  getFreeSpace : public ::testing::Test
2190 	{
2191 	protected:
2192 		::osl::FileBase::RC nError1;
2193 	};// class getFreeSpace
2194 
2195     TEST_F(getFreeSpace, getFreeSpace_001 )
2196     {
2197         sal_Int32 mask = VolumeInfoMask_FreeSpace;
2198         ::osl::VolumeInfo aVolumeInfo( mask );
2199         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2200         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2201         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2202         sal_uInt64 uiFreeSpace = aVolumeInfo.getFreeSpace( );
2203 
2204         ASSERT_TRUE(0 != uiFreeSpace) << "test for getFreeSpace function: get free space of Fixed disk volume mounted on /, it should not be 0, suggestion: returned value, -1 is better, since some times the free space may be 0";
2205     }
2206 
2207 #if defined( UNX )
2208         TEST_F(getFreeSpace, getFreeSpace_002 )
2209     {
2210             sal_Int32 mask = VolumeInfoMask_FreeSpace;
2211         ::osl::VolumeInfo aVolumeInfo( mask );
2212         nError1 = ::osl::Directory::getVolumeInfo( aVolURL3, aVolumeInfo );
2213         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2214         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2215         sal_uInt64 uiFreeSpace = aVolumeInfo.getFreeSpace( );
2216 
2217         ASSERT_TRUE(0 == uiFreeSpace) << "test for getFreeSpace function: get free space of /proc, it should be 0";
2218     }
2219 #else           /// Windows version, in Windows, there is no /proc directory
2220     TEST_F(getFreeSpace, getFreeSpace_002 )
2221     {
2222         ASSERT_TRUE(1 == 1) << "test for getFreeSpace function: not applicable for /proc( Windows version )";
2223     }
2224 #endif
2225 
2226 
2227 #if defined(SOLARIS)
2228         TEST_F(getFreeSpace, getFreeSpace_003 )
2229     {
2230             struct statvfs aStatFS;
2231         static const sal_Char  name[] = "/";
2232 
2233         memset (&aStatFS, 0, sizeof(aStatFS));
2234         statvfs( name, &aStatFS);
2235         sal_uInt64 FreeSpace = aStatFS.f_bfree * aStatFS.f_frsize  ;
2236 
2237             sal_Int32 mask = VolumeInfoMask_FreeSpace;
2238         ::osl::VolumeInfo aVolumeInfo( mask );
2239         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2240         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2241         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2242         sal_uInt64 uiFreeSpace = aVolumeInfo.getFreeSpace( );
2243 
2244             ASSERT_TRUE(uiFreeSpace == FreeSpace) << "test for getFreeSpace function: get free space by hand, then compare with getFreeSpace, it did not pass";
2245     }
2246 #else                                    //Windows version
2247     TEST_F(getFreeSpace, getFreeSpace_003 )
2248     {
2249         ASSERT_TRUE(1 == 1) << "test for getFreeSpace function: not implemented yet( Windows version )";
2250     }
2251 #endif
2252 
2253 	//---------------------------------------------------------------------
2254 	// 	testing the method
2255 	// 	inline sal_uInt64 getUsedSpace() const
2256 	//---------------------------------------------------------------------
2257     class  getUsedSpace : public ::testing::Test
2258 	{
2259 	protected:
2260 		::osl::FileBase::RC nError1;
2261 	};// class getUsedSpace
2262 
2263     TEST_F(getUsedSpace, getUsedSpace_001 )
2264     {
2265         sal_Int32 mask = VolumeInfoMask_UsedSpace;
2266         ::osl::VolumeInfo aVolumeInfo( mask );
2267         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2268         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2269         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2270         sal_uInt64 uiUsedSpace = aVolumeInfo.getUsedSpace( );
2271 
2272         ASSERT_TRUE(0 != uiUsedSpace) << "test for getUsedSpace function: get used space of Fixed disk volume mounted on /, it should not be 0, suggestion: returned value, -1 is better, since some times the used space may be 0";
2273     }
2274 
2275 #if defined( UNX )
2276         TEST_F(getUsedSpace, getUsedSpace_002 )
2277     {
2278             sal_Int32 mask = VolumeInfoMask_UsedSpace;
2279         ::osl::VolumeInfo aVolumeInfo( mask );
2280         nError1 = ::osl::Directory::getVolumeInfo( aVolURL3, aVolumeInfo );
2281         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2282         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2283         sal_uInt64 uiUsedSpace = aVolumeInfo.getUsedSpace( );
2284 
2285         ASSERT_TRUE(0 == uiUsedSpace) << "test for getUsedSpace function: get used space of /proc, it should be 0";
2286     }
2287 #else                                    /// Windows version, in Windows, there is no /proc directory
2288     TEST_F(getUsedSpace, getUsedSpace_002 )
2289     {
2290         ASSERT_TRUE(1 == 1) << "test for getUsedSpace function: not applicable for /proc( Windows version )";
2291     }
2292 #endif
2293 
2294 
2295 #if defined(SOLARIS)
2296         TEST_F(getUsedSpace, getUsedSpace_003 )
2297     {
2298             struct statvfs aStatFS;
2299         static const sal_Char  name[] = "/";
2300 
2301         memset (&aStatFS, 0, sizeof(aStatFS));
2302         statvfs( name, &aStatFS);
2303         sal_uInt64 UsedSpace = ( aStatFS.f_blocks - aStatFS.f_bavail ) * aStatFS.f_frsize;
2304 
2305 
2306             sal_Int32 mask = VolumeInfoMask_UsedSpace;
2307         ::osl::VolumeInfo aVolumeInfo( mask );
2308         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2309         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2310         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2311         sal_uInt64 uiUsedSpace = aVolumeInfo.getUsedSpace( );
2312 
2313             ASSERT_TRUE(uiUsedSpace == UsedSpace) << "test for getUsedSpace function: get used space by hand, then compare with getUsedSpace, it did not pass";
2314     }
2315 #else                                    //Windows version
2316     TEST_F(getUsedSpace, getUsedSpace_003 )
2317     {
2318         ASSERT_TRUE(1 == 1) << "test for getUsedSpace function: not implemented yet( Windows version )";
2319     }
2320 #endif
2321 
2322 	//---------------------------------------------------------------------
2323 	// 	testing the method
2324 	// 	inline sal_uInt32 getMaxNameLength() const
2325 	//---------------------------------------------------------------------
2326     class  getMaxNameLength : public ::testing::Test
2327 	{
2328 	protected:
2329 		::osl::FileBase::RC nError1;
2330 	};// class getMaxNameLength
2331 
2332     TEST_F(getMaxNameLength, getMaxNameLength_001 )
2333     {
2334         sal_Int32 mask = VolumeInfoMask_MaxNameLength;
2335         ::osl::VolumeInfo aVolumeInfo( mask );
2336         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2337         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2338         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2339         sal_uInt32 uiMaxNameLength = aVolumeInfo.getMaxNameLength( );
2340 
2341         ASSERT_TRUE(0 != uiMaxNameLength) << "test for getMaxNameLength function: get max name length of Fixed disk volume mounted on /, it should not be 0";
2342     }
2343 
2344 
2345 #if ( defined UNX ) || ( defined OS2 )
2346         TEST_F(getMaxNameLength, getMaxNameLength_002 )
2347     {
2348             struct statvfs aStatFS;
2349         static const sal_Char  name[] = "/";
2350 
2351         memset (&aStatFS, 0, sizeof(aStatFS));
2352         statvfs( name, &aStatFS);
2353         sal_uInt64 MaxNameLength = aStatFS.f_namemax;
2354 
2355             sal_Int32 mask = VolumeInfoMask_MaxNameLength;
2356         ::osl::VolumeInfo aVolumeInfo( mask );
2357         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2358         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2359         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2360         sal_uInt64 uiMaxNameLength = aVolumeInfo.getMaxNameLength( );
2361 
2362             ASSERT_TRUE(uiMaxNameLength == MaxNameLength) << "test for getMaxNameLength function: get max name length by hand, then compare with getMaxNameLength";
2363     }
2364 #else                                    //Windows version
2365     TEST_F(getMaxNameLength, getMaxNameLength_002 )
2366     {
2367         ASSERT_TRUE(1 == 1) << "test for getMaxNameLength function: not implemented yet( Windows version )";
2368     }
2369 #endif
2370 
2371 	//---------------------------------------------------------------------
2372 	// 	testing the method
2373 	// 	inline sal_uInt32 getMaxPathLength() const
2374 	//---------------------------------------------------------------------
2375     class  getMaxPathLength : public ::testing::Test
2376 	{
2377 	protected:
2378 		::osl::FileBase::RC nError1;
2379 	};// class getMaxPathLength
2380 
2381     TEST_F(getMaxPathLength, getMaxPathLength_001 )
2382     {
2383         sal_Int32 mask = VolumeInfoMask_MaxPathLength;
2384         ::osl::VolumeInfo aVolumeInfo( mask );
2385         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2386         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2387         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2388         sal_uInt32 uiMaxPathLength = aVolumeInfo.getMaxPathLength( );
2389 
2390         ASSERT_TRUE(0 != uiMaxPathLength) << "test for getMaxPathLength function: get max path length of Fixed disk volume mounted on /, it should not be 0";
2391     }
2392 
2393 
2394 #if ( defined UNX ) || ( defined OS2 )
2395         TEST_F(getMaxPathLength, getMaxPathLength_002 )
2396     {
2397             sal_Int32 mask = VolumeInfoMask_MaxPathLength;
2398         ::osl::VolumeInfo aVolumeInfo( mask );
2399         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2400         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2401         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2402         sal_uInt64 uiMaxPathLength = aVolumeInfo.getMaxPathLength( );
2403 
2404             ASSERT_TRUE(uiMaxPathLength == PATH_MAX) << "test for getMaxPathLength function: get max path length by hand, then compare with getMaxPathLength";
2405     }
2406 #else                                    //Windows version
2407     TEST_F(getMaxPathLength, getMaxPathLength_002 )
2408     {
2409         ASSERT_TRUE(1 == 1) << "test for getMaxPathLength function: not implemented yet( Windows version )";
2410     }
2411 #endif
2412 
2413 	//---------------------------------------------------------------------
2414 	// 	testing the method
2415 	// 	inline ::rtl::OUString getFileSystemName() const
2416 	//---------------------------------------------------------------------
2417     class  getFileSystemName : public ::testing::Test
2418 	{
2419 	protected:
2420 		::rtl::OUString aUStr;
2421 		::osl::FileBase::RC nError1;
2422 	};// class getFileSystemName
2423 
2424     TEST_F(getFileSystemName, getFileSystemName_001 )
2425     {
2426         sal_Int32 mask = VolumeInfoMask_FileSystemName;
2427         ::osl::VolumeInfo aVolumeInfo( mask );
2428         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2429         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2430         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2431         aUStr = aVolumeInfo.getFileSystemName( );
2432 
2433         ASSERT_TRUE(sal_False == compareFileName( aNullURL, aUStr )) << "test for getFileSystemName function: get file system name of Fixed disk volume mounted on /, it should not be empty string";
2434     }
2435 
2436 
2437 #if defined(SOLARIS)
2438         TEST_F(getFileSystemName, getFileSystemName_002 )
2439     {
2440             struct statvfs aStatFS;
2441         static const sal_Char  name[] = "/";
2442 
2443         memset (&aStatFS, 0, sizeof(aStatFS));
2444         statvfs( name, &aStatFS);
2445         sal_Char * astrFileSystemName = aStatFS.f_basetype;
2446 
2447             sal_Int32 mask = VolumeInfoMask_FileSystemName;
2448         ::osl::VolumeInfo aVolumeInfo( mask );
2449         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2450         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2451         ASSERT_TRUE( sal_True == aVolumeInfo.isValid( mask ) );
2452         aUStr = aVolumeInfo.getFileSystemName( );
2453 
2454             ASSERT_TRUE(sal_True == compareFileName( aUStr, astrFileSystemName )) << "test for getFileSystemName function: get file system name by hand, then compare with getFileSystemName";
2455     }
2456 #else                                    //Windows version
2457     TEST_F(getFileSystemName, getFileSystemName_002 )
2458     {
2459         ASSERT_TRUE(1 == 1) << "test for getFileSystemName function: not implemented yet( Windows version )";
2460     }
2461 #endif
2462 
2463 	//---------------------------------------------------------------------
2464 	// 	testing the method
2465 	// 	inline VolumeDevice getDeviceHandle() const
2466 	//---------------------------------------------------------------------
2467     class  getDeviceHandle : public ::testing::Test
2468 	{
2469     protected:
2470 		::rtl::OUString aUStr;
2471 		::osl::FileBase::RC nError1;
2472 	};// class getDeviceHandle
2473 
2474     TEST_F(getDeviceHandle, getDeviceHandle_001 )
2475     {
2476         ::osl::VolumeInfo   aVolumeInfo( VolumeInfoMask_Attributes );
2477         nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
2478         ASSERT_TRUE( osl::FileBase::E_None == nError1 );
2479 
2480         ::osl::VolumeDevice aVolumeDevice1( aVolumeInfo.getDeviceHandle( ) );
2481         sal_Bool bOk = compareFileName( aNullURL, aVolumeDevice1.getMountPath( ) );
2482 
2483         ASSERT_TRUE(( sal_False == bOk )) << "test for getDeviceHandle function: get device handle of Fixed disk volume mounted on /, it should not be NULL, it did not pass in (W32) (UNX).";
2484     }
2485 
2486 }// namespace osl_VolumeInfo
2487 
2488 
2489 
2490 //------------------------------------------------------------------------
2491 // Beginning of the test cases for VolumeDevice class
2492 //------------------------------------------------------------------------
2493 namespace osl_FileStatus
2494 {
2495 
2496 	//---------------------------------------------------------------------
2497 	// 	testing the method
2498 	// 	FileStatus( sal_uInt32 nMask ): _nMask( nMask )
2499 	//---------------------------------------------------------------------
2500     class  FileStatusCtors : public ::testing::Test
2501 	{
2502 	protected:
2503 		::rtl::OUString         aUStr;
2504 		::osl::FileBase::RC     nError1, nError2;
2505 		::osl::DirectoryItem    rItem;
2506 
2507 	    public:
2508 		// initialization
2509 		void SetUp( )
2510 		{
2511 			// create a tempfile in $TEMP/tmpdir/tmpname.
2512 			createTestDirectory( aTmpName3 );
2513 			createTestFile( aTmpName4 );
2514 
2515 			::std::auto_ptr<Directory> pDir( new Directory( aTmpName3 ) );
2516 			nError1 = pDir->open( );
2517 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2518 			nError1 = pDir->getNextItem( rItem, 0 );
2519 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2520 			pDir->close();
2521 			/*
2522 			Directory aDir( aTmpName3 );
2523 			nError1 = aDir.open();
2524 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2525 			nError1 = aDir.getNextItem( rItem, 0 );
2526 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2527 			aDir.close();
2528 			*/
2529 		}
2530 
2531 		void TearDown( )
2532 		{
2533 			// remove the tempfile in $TEMP/tmpdir/tmpname.
2534 			deleteTestFile( aTmpName4 );
2535 			deleteTestDirectory( aTmpName3 );
2536 		}
2537 	};// class ctors
2538 
2539     TEST_F(FileStatusCtors, ctors_001 )
2540     {
2541             ::osl::FileStatus   rFileStatus( FileStatusMask_All );
2542         nError1 = rItem.getFileStatus( rFileStatus );
2543         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2544         aUStr = rFileStatus.getFileName( );
2545 
2546         ASSERT_TRUE(sal_True == compareFileName( aUStr, aTmpName2)) << "test for ctors function: mask all and see the file name";
2547     }
2548 
2549     TEST_F(FileStatusCtors, ctors_002 )
2550     {
2551             ::osl::FileStatus   rFileStatus( 0 );
2552         nError1 = rItem.getFileStatus( rFileStatus );
2553         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2554         aUStr = rFileStatus.getFileName( );
2555 
2556         ASSERT_TRUE(sal_True == compareFileName( aUStr, aNullURL)) << "test for ctors function: mask is empty";
2557     }
2558 
2559 	//---------------------------------------------------------------------
2560 	// 	testing the method
2561 	// 	inline sal_Bool isValid( sal_uInt32 nMask ) const
2562 	//---------------------------------------------------------------------
2563     class  FileStatusIsValid : public ::testing::Test
2564 	{
2565 	protected:
2566 		::rtl::OUString         aUStr;
2567 		::osl::Directory        *pDir;
2568 		::osl::DirectoryItem    rItem_file, rItem_link;
2569 
2570 	    public:
2571 		// initialization
2572 		void SetUp( )
2573 		{
2574 			// create a tempfile in $TEMP/tmpdir/tmpname.
2575 			createTestDirectory( aTmpName3 );
2576 			createTestFile( aTmpName4 );
2577 
2578 			pDir = new Directory( aTmpName3 );
2579 			//::std::auto_ptr<Directory> pDir( new Directory( aTmpName3 ) );
2580                 	::osl::FileBase::RC nError1 = pDir->open( );
2581 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2582 			nError1 = pDir->getNextItem( rItem_file, 1 );
2583 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2584 		}
2585 
2586 		void TearDown( )
2587 		{
2588                 	::osl::FileBase::RC nError1 = pDir->close( );
2589                 	delete pDir;
2590 			ASSERT_TRUE(::osl::FileBase::E_None == nError1) << errorToStr(nError1).pData;
2591 
2592 			// remove the tempfile in $TEMP/tmpdir/tmpname.
2593 			deleteTestFile( aTmpName4 );
2594 			deleteTestDirectory( aTmpName3 );
2595 		}
2596 
2597         void check_FileStatus(::osl::FileStatus const& _aStatus)
2598             {
2599                 rtl::OString sStat;
2600                 if (_aStatus.isValid(FileStatusMask_Type))
2601                 {
2602                     sStat += "type ";
2603                 }
2604                 if (_aStatus.isValid(FileStatusMask_Attributes))
2605                 {
2606                     sStat += "attributes ";
2607                 }
2608                 if (_aStatus.isValid(FileStatusMask_CreationTime))
2609                 {
2610                     sStat += "ctime ";
2611                 }
2612                 if (_aStatus.isValid(FileStatusMask_AccessTime))
2613                 {
2614                     sStat += "atime ";
2615                 }
2616                 if (_aStatus.isValid(FileStatusMask_ModifyTime))
2617                 {
2618                     sStat += "mtime ";
2619                 }
2620                 if (_aStatus.isValid(FileStatusMask_FileSize))
2621                 {
2622                     sStat += "filesize ";
2623                 }
2624                 if (_aStatus.isValid(FileStatusMask_FileName))
2625                 {
2626                     sStat += "filename ";
2627                 }
2628                 if (_aStatus.isValid(FileStatusMask_FileURL))
2629                 {
2630                     sStat += "fileurl ";
2631                 }
2632                 printf("mask: %s\n", sStat.getStr());
2633             }
2634 	};// class ctors
2635 
2636     TEST_F(FileStatusIsValid, isValid_001 )
2637     {
2638         sal_uInt32 mask = 0;
2639         ::osl::FileStatus   rFileStatus( mask );
2640             ::osl::FileBase::RC nError1 = rItem_file.getFileStatus( rFileStatus );
2641         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2642         sal_Bool bOk = rFileStatus.isValid( mask );
2643 
2644         ASSERT_TRUE(( sal_True == bOk )) << "test for isValid function: no fields specified";
2645     }
2646 
2647     TEST_F(FileStatusIsValid, isValid_002 )
2648     {
2649         createTestFile( aTmpName6 );
2650         sal_uInt32 mask_file = ( FileStatusMask_Type | FileStatusMask_Attributes |
2651                                FileStatusMask_CreationTime | FileStatusMask_AccessTime |
2652                                FileStatusMask_ModifyTime   | FileStatusMask_FileSize   |
2653                                FileStatusMask_FileName     | FileStatusMask_FileURL) ;
2654             ::osl::FileStatus   rFileStatus( mask_file );
2655             ::osl::FileBase::RC nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem_file );
2656         nError1 = rItem_file.getFileStatus( rFileStatus );
2657 
2658         ASSERT_TRUE(::osl::FileBase::E_None == nError1) << errorToStr(nError1).pData;
2659 
2660 // LLA: this is wrong, we never should try to check on all masks
2661 //      only on one.
2662 //      Second, it's not a bug, if a value is not valid, it's an unhandled feature.
2663 
2664 //          sal_Bool bOk = rFileStatus.isValid( mask_file );
2665 
2666             check_FileStatus(rFileStatus);
2667         deleteTestFile( aTmpName6 );
2668 
2669             // ASSERT_TRUE(//                       ( sal_True == bOk )) << "test for isValid function: regular file mask fields test, #FileStatusMask_CreationTime# should be valid field for regular file, but feedback is invalid";
2670     }
2671 
2672     //Link is not defined in Windows, and on Linux, we can not get the directory item of the link file
2673     // LLA: we have to differ to filesystems, normal filesystems support links (EXT2, ...)
2674     //      castrated filesystems don't (FAT, FAT32)
2675     //      Windows NT NTFS support links, but the windows api don't :-(
2676 
2677     TEST_F(FileStatusIsValid, isValid_003 )
2678     {
2679 #if defined ( UNX )
2680         // ::osl::FileBase::RC nError;
2681         sal_Int32 fd;
2682 
2683         ::rtl::OUString aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys );
2684         ( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpdir/link.file");
2685         ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpdir/tmpname");
2686 
2687             rtl::OString strLinkFileName;
2688             rtl::OString strSrcFileName;
2689             strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US );
2690             strSrcFileName = OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US );
2691 
2692         //create a link file and link it to file "/tmp/PID/tmpdir/tmpname"
2693             fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() );
2694         ASSERT_TRUE( fd == 0 );
2695 
2696         // testDirectory is "/tmp/PID/tmpdir/"
2697         ::osl::Directory testDirectory( aTmpName3 );
2698             ::osl::FileBase::RC nError1 = testDirectory.open( );
2699         ::rtl::OUString aFileName = ::rtl::OUString::createFromAscii("link.file");
2700         sal_Bool bOk = sal_False;
2701         while (1) {
2702             nError1 = testDirectory.getNextItem( rItem_link, 4 );
2703             if (::osl::FileBase::E_None == nError1) {
2704                 sal_uInt32 mask_link = FileStatusMask_FileName | FileStatusMask_LinkTargetURL;
2705                 ::osl::FileStatus   rFileStatus( mask_link );
2706                 rItem_link.getFileStatus( rFileStatus );
2707                 //printFileName( rFileStatus.getFileName( ) );
2708                 if ( compareFileName( rFileStatus.getFileName( ), aFileName) == sal_True )
2709                 {
2710                     //printf("find the link file");
2711                     if ( sal_True == rFileStatus.isValid( FileStatusMask_LinkTargetURL ) )
2712                     {
2713                         bOk = sal_True;
2714                         break;
2715                     }
2716                 }
2717             }
2718             else
2719                 break;
2720         };
2721 
2722         fd = remove( strLinkFileName );
2723         ASSERT_TRUE( fd == 0 );
2724 
2725         ASSERT_TRUE(( sal_True == bOk )) << "test for isValid function: link file, check for LinkTargetURL";
2726 #endif
2727     }
2728 
2729     TEST_F(FileStatusIsValid, isValid_004 )
2730     {
2731         sal_uInt32 mask_file_all = FileStatusMask_All;
2732             ::osl::FileStatus   rFileStatus_all( mask_file_all );
2733             ::osl::FileBase::RC nError1 = rItem_file.getFileStatus( rFileStatus_all );
2734         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2735 
2736             check_FileStatus(rFileStatus_all);
2737 // LLA: this is wrong
2738 //          sal_Bool bOk1 = rFileStatus_all.isValid( mask_file_all );
2739 
2740         sal_uInt32 mask_file_val = FileStatusMask_Validate;
2741             ::osl::FileStatus   rFileStatus_val( mask_file_val );
2742         nError1 = rItem_file.getFileStatus( rFileStatus_val );
2743         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2744             // sal_Bool bOk2 = rFileStatus_val.isValid( mask_file_val );
2745 
2746             check_FileStatus(rFileStatus_val);
2747             // ASSERT_TRUE(//                       ( sal_False == bOk1 ) && ( sal_True == bOk2 )) << "test for isValid function: check for Mask_All and Validate, really not sure what validate used for and how to use it, help me.  did not pass (W32)(UNX).";
2748     }
2749 
2750 	//---------------------------------------------------------------------
2751 	// 	testing the method
2752 	// 	inline Type getFileType() const
2753 	//---------------------------------------------------------------------
2754     class  getFileType : public ::testing::Test
2755 	{
2756 	protected:
2757 		::rtl::OUString         aUStr;
2758 		::osl::FileBase::RC     nError1, nError2;
2759 
2760 		::osl::DirectoryItem    m_aItem_1, m_aItem_2, m_aVolumeItem, m_aFifoItem;
2761 		::osl::DirectoryItem    m_aLinkItem, m_aSocketItem, m_aSpecialItem;
2762 
2763 	    public:
2764 		// initialization
2765 		void SetUp( )
2766 		{
2767 			// create a tempfile: $TEMP/tmpdir/tmpname.
2768 			//        a tempdirectory: $TEMP/tmpdir/tmpdir.
2769 			//        use $ROOT/staroffice as volume ---> use dev/fd as volume.
2770 			// and get their directory item.
2771 			createTestDirectory( aTmpName3 );
2772 			//printFileName( aTmpName2);
2773 			createTestFile( aTmpName3, aTmpName2 );
2774 			createTestDirectory( aTmpName3, aTmpName1 );
2775 
2776 			::std::auto_ptr<Directory> pDir( new Directory( aTmpName3 ) );
2777 			nError1 = pDir->open( );
2778 			ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "open aTmpName3 failed!";
2779 			//getNextItem can not assure which item retrieved
2780             		nError1 = pDir->getNextItem( m_aItem_1, 1 );
2781 			ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "get first item failed!";
2782 
2783             		nError1 = pDir->getNextItem( m_aItem_2 );
2784 			ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "get second item failed!";
2785 			pDir->close();
2786 			//mindy: failed on my RH9,so removed temporaly
2787 			//nError1 = ::osl::DirectoryItem::get( aVolURL2, m_aVolumeItem );
2788 			//ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "get volume item failed!";
2789 
2790 		}
2791 
2792 		void TearDown( )
2793 		{
2794 			// remove all in $TEMP/tmpdir.
2795 			deleteTestDirectory( aTmpName3, aTmpName1 );
2796 			deleteTestFile( aTmpName3, aTmpName2 );
2797 			deleteTestDirectory( aTmpName3 );
2798 		}
2799 
2800         void check_FileType(osl::FileStatus const& _rFileStatus )
2801         {
2802 			sal_Bool bOK = sal_False;
2803                 if ( _rFileStatus.isValid(FileStatusMask_FileName))
2804                 {
2805                     rtl::OUString suFilename = _rFileStatus.getFileName();
2806 
2807                     if ( _rFileStatus.isValid(FileStatusMask_Type))
2808                     {
2809                         osl::FileStatus::Type eType = _rFileStatus.getFileType( );
2810 
2811                         if ( compareFileName( suFilename, aTmpName2) == sal_True )
2812                         {
2813                             // regular
2814                             bOK = ( eType == osl::FileStatus::Regular );
2815                         }
2816                         if ( compareFileName( suFilename, aTmpName1) == sal_True )
2817                         {
2818                             // directory
2819                             bOK = ( eType == ::osl::FileStatus::Directory );
2820                         }
2821 
2822                         ASSERT_TRUE(( bOK == sal_True )) << "test for getFileType function: ";
2823 		}
2824                 }
2825                 // LLA: it's not a bug, if a FileStatus not exist, so no else
2826             }
2827 	};// class getFileType
2828 
2829     TEST_F(getFileType, getFileType_001 )
2830     {
2831         ::osl::FileStatus   rFileStatus( FileStatusMask_Type | FileStatusMask_FileName );
2832         nError1 = m_aItem_1.getFileStatus( rFileStatus );
2833         ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "getFileStatus failed";
2834 
2835         check_FileType(rFileStatus);
2836     }
2837 
2838     TEST_F(getFileType, getFileType_002 )
2839     {
2840             ::osl::FileStatus   rFileStatus( FileStatusMask_Type | FileStatusMask_FileName );
2841             nError1 = m_aItem_2.getFileStatus( rFileStatus );
2842 
2843         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2844             check_FileType(rFileStatus);
2845     }
2846 
2847     TEST_F(getFileType, getFileType_003 )
2848     {
2849 #if 0
2850 // LLA: this have to be discussed.
2851             ::osl::FileStatus   rFileStatus( FileStatusMask_Type );
2852             nError1 = m_aVolumeItem.getFileStatus( rFileStatus );
2853         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2854 
2855             if (rFileStatus.isValid(FileStatusMask_Type))
2856             {
2857                 osl::FileStatus::Type eType = rFileStatus.getFileType( );
2858 
2859         ASSERT_TRUE(( eType == ::osl::FileStatus::Volume )) << "test for getFileType function: Volume, it seems the volume part of the field is not implemented, it did not pass in (W32)(UNX).";
2860             }
2861 #endif
2862     }
2863 
2864 
2865     TEST_F(getFileType, getFileType_004 )
2866     {
2867 #if ( defined UNX ) || ( defined OS2 )  //Fifo creation is differ in Windows
2868 
2869         //create a fifo in $ROOT/tmp/tmpdir, get its DirectoryItem.
2870       rtl::OString strFifoSys;
2871       strFifoSys = OUStringToOString( aFifoSys, RTL_TEXTENCODING_ASCII_US );
2872       ::rtl::OUString aFifoURL;
2873 
2874               int fd = mkfifo( strFifoSys.getStr(), O_RDWR | O_CREAT );
2875       ASSERT_TRUE(fd == 0) << "mkfifo failed!";
2876         ::osl::FileBase::getFileURLFromSystemPath( aFifoSys, aFifoURL );
2877 
2878             nError1 = ::osl::DirectoryItem::get( aFifoURL, m_aFifoItem );
2879         ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "get item failed!";
2880 
2881         //check for File type
2882             ::osl::FileStatus   rFileStatus( FileStatusMask_Type );
2883             nError1 = m_aFifoItem.getFileStatus( rFileStatus );
2884         ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "get Status failed!";
2885 
2886         //delete fifo
2887         nError1 = ::osl::File::remove( aFifoURL );
2888         ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "remove file failed!";
2889 
2890             if (rFileStatus.isValid(FileStatusMask_Type))
2891             {
2892                 osl::FileStatus::Type eType = rFileStatus.getFileType( );
2893 
2894         ASSERT_TRUE(( eType == ::osl::FileStatus::Fifo )) << "test for getFileType function: Fifo, Solaris version ";
2895     }
2896 #endif
2897     }
2898 
2899 /*
2900  * LLA: removed, m_aSocketItem is wrong initialised.
2901  */
2902 
2903 // LLA:         TEST_F(getFileType, getFileType_005 )
2904 // LLA:         {
2905 // LLA: #if defined ( SOLARIS ) //Socket file may differ in Windows
2906 // LLA:             // nError1 = ::osl::DirectoryItem::get( aTypeURL1, m_aSocketItem );
2907 // LLA:             nError1 = ::osl::DirectoryItem::get( rtl::OUString::createFromAscii("/dev/null"), m_aSocketItem );
2908 // LLA:             printError(nError1);
2909 // LLA:             ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "get Socket type file failed";
2910 // LLA:
2911 // LLA:             //check for File type
2912 // LLA:             ::osl::FileStatus   rFileStatus( FileStatusMask_Type );
2913 // LLA:
2914 // LLA:             nError1 = m_aSocketItem.getFileStatus( rFileStatus );
2915 // LLA:             ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "getFileStatus failed";
2916 // LLA:
2917 // LLA:             if (rFileStatus.isValid( FileStatusMask_Type ))
2918 // LLA:             {
2919 // LLA:                 osl::FileStatus::Type eType = rFileStatus.getFileType( );
2920 // LLA:                 printFileType(eType);
2921 // LLA:                 ASSERT_TRUE(// LLA:                                         ( eType == ::osl::FileStatus::Socket )) << "test for getFileType function: Socket, Solaris version ";
2922 // LLA:             }
2923 // LLA: #endif
2924 // LLA:         }
2925 
2926 
2927 // deprecated since there is a same case Directory::getNextItem_004
2928 /*#if defined 0 //( UNX ) //( SOLARIS ) //Link file is not defined in Windows
2929     TEST_F(getFileType, getFileType_006 )
2930     {
2931   nError1 = ::osl::DirectoryItem::get( aTypeURL3, m_aLinkItem );
2932         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2933 
2934         //check for File type
2935             ::osl::FileStatus   rFileStatus( FileStatusMask_Type );
2936   nError1 = m_aLinkItem.getFileStatus( rFileStatus );
2937         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2938 
2939         ASSERT_TRUE(( ::osl::FileStatus::Link == rFileStatus.getFileType( ) )) << "test for getFileType function: Link, UNX version ";
2940     }
2941 #endif  */
2942 
2943     TEST_F(getFileType, getFileType_007 )
2944     {
2945 #if defined ( SOLARIS ) //Special file is differ in Windows
2946             nError1 = ::osl::DirectoryItem::get( aTypeURL2, m_aSpecialItem );
2947         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2948 
2949         //check for File type
2950             ::osl::FileStatus   rFileStatus( FileStatusMask_Type );
2951         nError1 = m_aSpecialItem.getFileStatus( rFileStatus );
2952         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
2953 
2954         if (rFileStatus.isValid(FileStatusMask_Type))
2955         {
2956             osl::FileStatus::Type eType = rFileStatus.getFileType( );
2957 
2958 
2959             ASSERT_TRUE(( eType == ::osl::FileStatus::Special )) << "test for getFileType function: Special, Solaris version ";
2960         }
2961 #endif
2962     }
2963 
2964 	//---------------------------------------------------------------------
2965 	// 	testing the method
2966 	// 	inline sal_uInt64 getAttributes() const
2967 	//---------------------------------------------------------------------
2968     class  getAttributes : public ::testing::Test
2969 	{
2970 	protected:
2971 		::rtl::OUString         aTypeURL, aTypeURL_Hid;
2972 		::osl::FileBase::RC     nError;
2973 		::osl::DirectoryItem    rItem, rItem_hidden;
2974 
2975 	    public:
2976 		// initialization
2977 		void SetUp( )
2978 		{
2979 			aTypeURL = aUserDirectoryURL.copy( 0 );
2980 			concatURL( aTypeURL, aTmpName2 );
2981 			createTestFile( aTypeURL );
2982 			nError = ::osl::DirectoryItem::get( aTypeURL, rItem );
2983 			ASSERT_TRUE( nError == FileBase::E_None );
2984 
2985 			aTypeURL_Hid = aUserDirectoryURL.copy( 0 );
2986 			concatURL( aTypeURL_Hid, aHidURL1 );
2987 			createTestFile( aTypeURL_Hid );
2988 			nError = ::osl::DirectoryItem::get( aTypeURL_Hid, rItem_hidden );
2989 			ASSERT_TRUE( nError == FileBase::E_None );
2990 		}
2991 
2992 		void TearDown( )
2993 		{
2994 			deleteTestFile( aTypeURL );
2995 			deleteTestFile( aTypeURL_Hid );
2996 		}
2997 	};// class getAttributes
2998 
2999 #if ( defined UNX ) || ( defined OS2 )
3000 //windows only 3 file attributes: normal, readonly, hidden
3001     TEST_F(getAttributes, getAttributes_001 )
3002     {
3003         changeFileMode( aTypeURL, S_IRUSR | S_IRGRP | S_IROTH );
3004 
3005             ::osl::FileStatus   rFileStatus( FileStatusMask_Attributes );
3006         nError = rItem.getFileStatus( rFileStatus );
3007         ASSERT_TRUE( nError == FileBase::E_None );
3008 
3009         ASSERT_TRUE(( Attribute_ReadOnly | Attribute_GrpRead | Attribute_OwnRead | Attribute_OthRead ) ==
3010                                 rFileStatus.getAttributes( )) << "test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead( UNX version ) ";
3011     }
3012 #else                                    //Windows version
3013     TEST_F(getAttributes, getAttributes_001 )
3014     {
3015         ASSERT_TRUE(1 == 1) << "test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead( Windows version )";
3016     }
3017 #endif
3018 
3019 
3020     TEST_F(getAttributes, getAttributes_002 )
3021     {
3022 #if ( defined UNX ) || ( defined OS2 )
3023         changeFileMode( aTypeURL, S_IXUSR | S_IXGRP | S_IXOTH );
3024 
3025             ::osl::FileStatus   rFileStatus( FileStatusMask_Attributes );
3026         nError = rItem.getFileStatus( rFileStatus );
3027         ASSERT_TRUE( nError == FileBase::E_None );
3028 
3029         ASSERT_TRUE(( Attribute_ReadOnly | Attribute_Executable | Attribute_GrpExe | Attribute_OwnExe | Attribute_OthExe ) ==
3030                                 rFileStatus.getAttributes( )) << "test for getAttributes function: Executable, GrpExe, OwnExe, OthExe, the result is Readonly, Executable, GrpExe, OwnExe, OthExe, it partly not pass( Solaris version )";
3031 #endif
3032     }
3033 
3034 
3035 #if ( defined UNX ) || ( defined OS2 )
3036     TEST_F(getAttributes, getAttributes_003 )
3037     {
3038         changeFileMode( aTypeURL, S_IWUSR | S_IWGRP | S_IWOTH );
3039 
3040             ::osl::FileStatus   rFileStatus( FileStatusMask_Attributes );
3041         nError = rItem.getFileStatus( rFileStatus );
3042         ASSERT_TRUE( nError == FileBase::E_None );
3043 
3044         ASSERT_TRUE(( Attribute_GrpWrite | Attribute_OwnWrite | Attribute_OthWrite ) ==
3045                                 rFileStatus.getAttributes( )) << "test for getAttributes function: GrpWrite, OwnWrite, OthWrite( Solaris version )";
3046     }
3047 #else                                    //Windows version
3048     TEST_F(getAttributes, getAttributes_003 )
3049     {
3050         ASSERT_TRUE(1 == 1) << "test for getAttributes function: GrpWrite, OwnWrite, OthWrite( Windows version )";
3051     }
3052 #endif
3053 
3054 #if ( defined UNX ) || ( defined OS2 )  //hidden file definition may different in Windows
3055     TEST_F(getAttributes, getAttributes_004 )
3056     {
3057         sal_Int32 test_Attributes = Attribute_Hidden;
3058             ::osl::FileStatus   rFileStatus( FileStatusMask_Attributes );
3059         nError = rItem_hidden.getFileStatus( rFileStatus );
3060         ASSERT_TRUE( nError == FileBase::E_None );
3061         test_Attributes &= rFileStatus.getAttributes( );
3062 
3063         ASSERT_TRUE(test_Attributes == Attribute_Hidden) << "test for getAttributes function: Hidden files( Solaris version )";
3064     }
3065 #else                                    //Windows version
3066     TEST_F(getAttributes, getAttributes_004 )
3067     {
3068         ::rtl::OUString aUserHiddenFileURL = ::rtl::OUString::createFromAscii("file:///c:/AUTOEXEC.BAT");
3069         nError = ::osl::DirectoryItem::get( aUserHiddenFileURL, rItem_hidden );
3070         //printFileName( aUserHiddenFileURL );
3071         ASSERT_TRUE(nError == FileBase::E_None) << "get item fail";
3072             ::osl::FileStatus   rFileStatus( FileStatusMask_Attributes );
3073         nError = rItem_hidden.getFileStatus( rFileStatus );
3074         ASSERT_TRUE( nError == FileBase::E_None );
3075 
3076         ASSERT_TRUE((rFileStatus.getAttributes( ) & Attribute_Hidden)!= 0) << "Hidden files(Windows version), please check if hidden file c:/AUTOEXEC.BAT exists ";
3077     }
3078 #endif
3079 
3080 	//---------------------------------------------------------------------
3081 	// 	testing the method
3082 	// 	inline TimeValue getAccessTime() const
3083 	//---------------------------------------------------------------------
3084     class  getAccessTime : public ::testing::Test
3085 	{
3086     protected:
3087 		::rtl::OUString         aTypeURL;
3088 		::osl::FileBase::RC     nError;
3089 		::osl::DirectoryItem    rItem;
3090 
3091 	    public:
3092 		// initialization
3093 		void SetUp( )
3094 		{
3095 			aTypeURL = aUserDirectoryURL.copy( 0 );
3096 			concatURL( aTypeURL, aTmpName2 );
3097 			createTestFile( aTypeURL );
3098 			nError = ::osl::DirectoryItem::get( aTypeURL, rItem );
3099 			ASSERT_TRUE( nError == FileBase::E_None );
3100 
3101 		}
3102 
3103 		void TearDown( )
3104 		{
3105 			deleteTestFile( aTypeURL );
3106 		}
3107 	};// class getAccessTime
3108 
3109     TEST_F(getAccessTime, getAccessTime_001)
3110     {
3111         TimeValue *pTV_current = NULL;
3112         ASSERT_TRUE( ( pTV_current = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL );
3113         TimeValue *pTV_access = NULL;
3114         ASSERT_TRUE( ( pTV_access = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL );
3115 
3116         ::osl::FileStatus   rFileStatus( FileStatusMask_AccessTime );
3117         nError = rItem.getFileStatus( rFileStatus );
3118         sal_Bool bOk = osl_getSystemTime( pTV_current );
3119         ASSERT_TRUE( sal_True == bOk && nError == FileBase::E_None );
3120 
3121         *pTV_access = rFileStatus.getAccessTime( );
3122 
3123         sal_Bool bOK = t_compareTime( pTV_access, pTV_current, delta );
3124         free( pTV_current );
3125         free( pTV_access );
3126 
3127         ASSERT_TRUE(sal_True == bOK) << "test for getAccessTime function: This test turns out that UNX pricision is no more than 1 sec, don't know how to test this function, in Windows test, it lost hour min sec, only have date time. ";
3128     }
3129 
3130 	//---------------------------------------------------------------------
3131 	// 	testing the method
3132 	// 	inline TimeValue getModifyTime() const
3133 	//---------------------------------------------------------------------
3134     class  getModifyTime : public ::testing::Test
3135 	{
3136 	protected:
3137 		::rtl::OUString         aTypeURL;
3138 		::osl::FileBase::RC     nError;
3139 		::osl::DirectoryItem    rItem;
3140 	};// class getModifyTime
3141 
3142     TEST_F(getModifyTime, getModifyTime_001)
3143     {
3144         TimeValue *pTV_current = NULL;
3145         ASSERT_TRUE( ( pTV_current = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL );
3146 
3147         //create file
3148         aTypeURL = aUserDirectoryURL.copy( 0 );
3149         concatURL( aTypeURL, aTmpName2 );
3150         createTestFile( aTypeURL );
3151 
3152         //get current time
3153         sal_Bool bOk = osl_getSystemTime( pTV_current );
3154         ASSERT_TRUE( sal_True == bOk );
3155 
3156         //get instance item and filestatus
3157         nError = ::osl::DirectoryItem::get( aTypeURL, rItem );
3158         ASSERT_TRUE( nError == FileBase::E_None );
3159         ::osl::FileStatus   rFileStatus( FileStatusMask_ModifyTime );
3160         nError = rItem.getFileStatus( rFileStatus );
3161         ASSERT_TRUE( nError == FileBase::E_None );
3162 
3163         //get modify time
3164         TimeValue *pTV_modify = NULL;
3165         ASSERT_TRUE( ( pTV_modify = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL );
3166         *pTV_modify = rFileStatus.getModifyTime( );
3167 
3168         sal_Bool bOK = t_compareTime( pTV_modify, pTV_current, delta );
3169         //delete file
3170         deleteTestFile( aTypeURL );
3171         free( pTV_current );
3172 
3173         ASSERT_TRUE(sal_True == bOK) << "test for getModifyTime function: This test turns out that UNX pricision is no more than 1 sec, don't know how to improve this function.  ";
3174     }
3175 
3176 
3177 	//---------------------------------------------------------------------
3178 	// 	testing the method
3179 	// 	inline sal_uInt64 getFileSize() const
3180 	//---------------------------------------------------------------------
3181     class  getFileSize : public ::testing::Test
3182 	{
3183 	protected:
3184 		::rtl::OUString         aTypeURL;
3185 		::osl::FileBase::RC     nError;
3186 		::osl::DirectoryItem    rItem;
3187 
3188 	    public:
3189 		// initialization
3190 		void SetUp( )
3191 		{
3192 			aTypeURL = aUserDirectoryURL.copy( 0 );
3193 			concatURL( aTypeURL, aTmpName2 );
3194 			createTestFile( aTypeURL );
3195 			nError = ::osl::DirectoryItem::get( aTypeURL, rItem );
3196 			ASSERT_TRUE( nError == FileBase::E_None );
3197 		}
3198 
3199 		void TearDown( )
3200 		{
3201 			deleteTestFile( aTypeURL );
3202 		}
3203 	};// class getFileSize
3204 
3205     TEST_F(getFileSize, getFileSize_001 )
3206     {
3207             ::osl::FileStatus   rFileStatus( FileStatusMask_FileSize );
3208         nError = rItem.getFileStatus( rFileStatus );
3209         ASSERT_TRUE( nError == FileBase::E_None );
3210 
3211         sal_uInt64 uFileSize = rFileStatus.getFileSize( );
3212 
3213         ASSERT_TRUE(0 == uFileSize) << "test for getFileSize function: empty file ";
3214     }
3215 
3216     TEST_F(getFileSize, getFileSize_002 )
3217     {
3218         ::osl::File testfile( aTypeURL );
3219         nError = testfile.open( OpenFlag_Write | OpenFlag_Read );
3220         ASSERT_TRUE( ::osl::FileBase::E_None == nError );
3221         nError = testfile.setSize( TEST_FILE_SIZE );
3222         ASSERT_TRUE( ::osl::FileBase::E_None == nError );
3223 
3224         nError = ::osl::DirectoryItem::get( aTypeURL, rItem );
3225         ASSERT_TRUE( nError == FileBase::E_None );
3226             ::osl::FileStatus   rFileStatus( FileStatusMask_FileSize );
3227         nError = rItem.getFileStatus( rFileStatus );
3228         ASSERT_TRUE( nError == FileBase::E_None );
3229         sal_uInt64 uFileSize = rFileStatus.getFileSize( );
3230 
3231         ASSERT_TRUE(TEST_FILE_SIZE == uFileSize) << "test for getFileSize function: file with size of TEST_FILE_SIZE, did not pass in (W32). ";
3232     }
3233 
3234 	//---------------------------------------------------------------------
3235 	// 	testing the method
3236 	// 	inline ::rtl::OUString getFileName() const
3237 	//---------------------------------------------------------------------
3238     class  getFileName : public ::testing::Test
3239 	{
3240 	protected:
3241 		::rtl::OUString         aTypeURL;
3242 		::osl::FileBase::RC     nError;
3243 		::osl::DirectoryItem    rItem;
3244 
3245 	    public:
3246 		// initialization
3247 		void SetUp( )
3248 		{
3249 			aTypeURL = aUserDirectoryURL.copy( 0 );
3250 			concatURL( aTypeURL, aTmpName2 );
3251 			createTestFile( aTypeURL );
3252 			nError = ::osl::DirectoryItem::get( aTypeURL, rItem );
3253 			ASSERT_TRUE( nError == FileBase::E_None );
3254 		}
3255 
3256 		void TearDown( )
3257 		{
3258 			deleteTestFile( aTypeURL );
3259 		}
3260 	};// class getFileName
3261 
3262     TEST_F(getFileName, getFileName_001 )
3263     {
3264             ::osl::FileStatus   rFileStatus( FileStatusMask_FileName );
3265         nError = rItem.getFileStatus( rFileStatus );
3266         ASSERT_TRUE( nError == FileBase::E_None );
3267 
3268         ::rtl::OUString aFileName = rFileStatus.getFileName( );
3269 
3270         ASSERT_TRUE(sal_True == compareFileName( aFileName, aTmpName2 )) << "test for getFileName function: name compare with specify";
3271     }
3272 
3273 	//---------------------------------------------------------------------
3274 	// 	testing the method
3275 	// 	inline ::rtl::OUString getFileURL() const
3276 	//---------------------------------------------------------------------
3277     class  getFileURL : public ::testing::Test
3278 	{
3279 	protected:
3280 		::rtl::OUString         aTypeURL;
3281 		::osl::FileBase::RC     nError;
3282 		::osl::DirectoryItem    rItem;
3283 
3284 	    public:
3285 		// initialization
3286 		void SetUp( )
3287 		{
3288 			createTestFile( aTmpName6 );
3289 			nError = ::osl::DirectoryItem::get( aTmpName6, rItem );
3290 			ASSERT_TRUE( nError == FileBase::E_None );
3291 		}
3292 
3293 		void TearDown( )
3294 		{
3295 			deleteTestFile( aTmpName6 );
3296 		}
3297 	};// class getFileURL
3298 
3299     TEST_F(getFileURL, getFileURL_001 )
3300     {
3301             ::osl::FileStatus   rFileStatus( FileStatusMask_FileURL );
3302         nError = rItem.getFileStatus( rFileStatus );
3303         ASSERT_TRUE( nError == FileBase::E_None );
3304 
3305         ::rtl::OUString aFileURL = rFileStatus.getFileURL( );
3306 
3307         ASSERT_TRUE(sal_True == compareFileName( aFileURL, aTmpName6 )) << "test for getFileURL function: ";
3308     }
3309 
3310 	//---------------------------------------------------------------------
3311 	// 	testing the method
3312 	// 	inline ::rtl::OUString getLinkTargetURL() const
3313 	//---------------------------------------------------------------------
3314     class  getLinkTargetURL : public ::testing::Test
3315 	{
3316 	protected:
3317 		::rtl::OUString         aTypeURL;
3318 		::osl::FileBase::RC     nError;
3319 		::osl::DirectoryItem    rItem;
3320 
3321 	    public:
3322 		// test code.
3323 		// initialization
3324 		void SetUp( )
3325 		{
3326 			aTypeURL = aUserDirectoryURL.copy( 0 );
3327 			concatURL( aTypeURL, aTmpName2 );
3328 			createTestFile( aTypeURL );
3329 		}
3330 
3331 		void TearDown( )
3332 		{
3333 			deleteTestFile( aTypeURL );
3334 		}
3335 	};// class getLinkTargetURL
3336 
3337 #if ( defined UNX ) || ( defined OS2 )         //Link file is not define in Windows
3338     TEST_F(getLinkTargetURL, getLinkTargetURL_001 )
3339     {
3340         //create a link file;
3341         ::rtl::OUString aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys );
3342         ( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/link.file");
3343         ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpname");
3344 
3345             rtl::OString strLinkFileName, strSrcFileName;
3346             strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US );
3347             strSrcFileName  = OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US );
3348 
3349         sal_Int32 fd;
3350             fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() );
3351         ASSERT_TRUE(fd == 0) << "in creating link file";
3352 
3353         //get linkTarget URL
3354         nError = ::osl::DirectoryItem::get( aLnkURL1, rItem );
3355         ASSERT_TRUE(nError == FileBase::E_None) << "in getting link file item";
3356 
3357             ::osl::FileStatus   rFileStatus( FileStatusMask_LinkTargetURL );
3358         nError = rItem.getFileStatus( rFileStatus );
3359         ASSERT_TRUE(nError == FileBase::E_None) << "in getting link file status";
3360         ::rtl::OUString aFileURL = rFileStatus.getLinkTargetURL( );
3361 
3362         //remove link file
3363             fd = remove( strLinkFileName.getStr() );
3364         ASSERT_TRUE(fd == 0) << "in deleting link file";
3365 
3366         ASSERT_TRUE(sal_True == compareFileName( aFileURL, aTypeURL )) << "test for getLinkTargetURL function: Solaris version, creat a file, and a link file link to it, get its LinkTargetURL and compare";
3367     }
3368 #else
3369     TEST_F(getLinkTargetURL, getLinkTargetURL_001 )
3370     {
3371         ASSERT_TRUE(1) << "test for getLinkTargetURL function: Windows version, not tested";
3372     }
3373 #endif
3374 
3375 }// namespace osl_FileStatus
3376 
3377 
3378 
3379 //------------------------------------------------------------------------
3380 // Beginning of the test cases for File class
3381 //------------------------------------------------------------------------
3382 namespace osl_File
3383 {
3384 	//---------------------------------------------------------------------
3385 	// 	testing the method
3386 	// 	File( const ::rtl::OUString& ustrFileURL )
3387 	//---------------------------------------------------------------------
3388     class  FileCtors : public ::testing::Test
3389 	{
3390 	protected:
3391 		// ::osl::FileBase::RC     nError1;
3392 
3393 	    public:
3394 		// initialization
3395 		void SetUp( )
3396 		{
3397 			// create a tempfile in $TEMP/tmpdir/tmpname.
3398 			createTestDirectory( aTmpName3 );
3399 			createTestFile( aTmpName4 );
3400 		}
3401 
3402 		void TearDown( )
3403 		{
3404 			// remove the tempfile in $TEMP/tmpdir/tmpname.
3405 			deleteTestFile( aTmpName4 );
3406 			deleteTestDirectory( aTmpName3 );
3407 		}
3408 	};// class ctors
3409 
3410     TEST_F(FileCtors, ctors_001 )
3411     {
3412         ::osl::File testFile( aTmpName4 );
3413 
3414         ::osl::FileBase::RC nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3415         ::osl::FileBase::RC nError2 = testFile.close( );
3416         ASSERT_TRUE(( ::osl::FileBase::E_None == nError1 ) && ( ::osl::FileBase::E_None == nError2 )) << "test for ctors function: initialize a File and test its open and close";
3417     }
3418 
3419     TEST_F(FileCtors, ctors_002 )
3420     {
3421         ::osl::File testFile( aTmpName5 );
3422         sal_Char buffer[30] = "Test for File constructor";
3423         sal_uInt64 nCount;
3424 
3425             ::osl::FileBase::RC nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3426             ::osl::FileBase::RC nError2 = testFile.write( buffer, 30, nCount );
3427         testFile.close( );
3428 
3429         ASSERT_TRUE(( ::osl::FileBase::E_None == nError1 ) && ( ::osl::FileBase::E_None == nError2 )) << "test for ctors function: test relative file URL, this test show that relative file URL is also acceptable";
3430     }
3431 
3432 	//---------------------------------------------------------------------
3433 	// 	testing the method
3434 	// 	inline RC open( sal_uInt32 uFlags )
3435 	//---------------------------------------------------------------------
3436     class  FileOpen : public ::testing::Test
3437 	{
3438     protected:
3439 		::osl::FileBase::RC     nError1, nError2, nError3;
3440 
3441 	    public:
3442 		// initialization
3443 		void SetUp( )
3444 		{
3445 			// create a tempfile in $TEMP/tmpdir/tmpname.
3446 			createTestDirectory( aTmpName3 );
3447 			createTestFile( aTmpName4 );
3448 		}
3449 
3450 		void TearDown( )
3451 		{
3452 			// remove the tempfile in $TEMP/tmpdir/tmpname.
3453 			deleteTestFile( aTmpName4 );
3454 			deleteTestDirectory( aTmpName3 );
3455 		}
3456 	};// class open
3457 
3458     // test code.
3459     TEST_F(FileOpen, open_001 )
3460     {
3461         ::osl::File testFile( aTmpName4 );
3462 
3463         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3464         nError2 = testFile.close( );
3465         ASSERT_TRUE(::osl::FileBase::E_None == nError2) << "close error";
3466 
3467         ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "test for open function: open a regular file";
3468     }
3469 
3470     TEST_F(FileOpen, open_002 )
3471     {
3472         ::osl::File testFile( aTmpName3 );
3473 
3474         nError1 = testFile.open( OpenFlag_Read );
3475 
3476         ASSERT_TRUE(( File::E_INVAL == nError1 ) || ( File::E_ACCES == nError1 )) << "test for open function: open a directory";
3477     }
3478 
3479     TEST_F(FileOpen, open_003 )
3480     {
3481         ::osl::File testFile( aCanURL1 );
3482 
3483         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3484 
3485         ASSERT_TRUE(File::E_NOENT == nError1) << "test for open function: open a non-exist file";
3486     }
3487 
3488     TEST_F(FileOpen, open_004 )
3489     {
3490         ::rtl::OUString  aTestFile( aRootURL );
3491         concatURL( aTestFile, aTmpName2 );
3492         ::osl::File testFile( aTestFile );
3493 
3494         nError1 = testFile.open( OpenFlag_Create );
3495         sal_Bool bOK = ( File::E_ACCES == nError1 );
3496 #if defined (WNT )
3497         bOK = sal_True;  /// in Windows, you can create file in c:/ any way.
3498         testFile.close( );
3499         deleteTestFile( aTestFile);
3500 #endif
3501 
3502         ASSERT_TRUE(bOK == sal_True) << "test for open function: create an illegal file";
3503     }
3504 
3505     TEST_F(FileOpen, open_005 )
3506     {
3507         ::osl::File testFile( aTmpName4 );
3508 
3509         nError1 = testFile.open( OpenFlag_Create );
3510 
3511         ASSERT_TRUE(File::E_EXIST == nError1) << "test for open function: create an exist file";
3512     }
3513 
3514     TEST_F(FileOpen, open_006 )
3515     {
3516         ::osl::File testFile( aCanURL1 );
3517         sal_Char buffer_write[30] = "Test for File open";
3518         sal_Char buffer_read[30];
3519         sal_uInt64 nCount_write, nCount_read;
3520 
3521         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write | OpenFlag_Create );
3522         nError2 = testFile.write( buffer_write, 30, nCount_write );
3523             ::osl::FileBase::RC nError4 = testFile.setPos( Pos_Absolut, 0 );
3524         ASSERT_TRUE( ::osl::FileBase::E_None == nError4 );
3525         nError3 = testFile.read( buffer_read, 10, nCount_read );
3526 
3527             ::osl::FileBase::RC nError5 = testFile.close( );
3528         ASSERT_TRUE( ::osl::FileBase::E_None == nError5 );
3529         ::osl::FileBase::RC nError6 = testFile.remove( aCanURL1 );
3530         ASSERT_TRUE( ::osl::FileBase::E_None == nError6 );
3531 
3532         ASSERT_TRUE(( ::osl::FileBase::E_None == nError1 ) &&
3533                                 ( ::osl::FileBase::E_None == nError2 ) &&
3534                                 ( ::osl::FileBase::E_None == nError3 ) &&
3535                                 ( 30 == nCount_write ) &&
3536                                 ( 10 == nCount_read )) << "test for open function: test for OpenFlag_Read,OpenFlag_Write and OpenFlag_Create";
3537     }
3538 
3539 	//---------------------------------------------------------------------
3540 	// 	testing the method
3541 	// 	inline RC close()
3542 	//---------------------------------------------------------------------
3543     class  FileClose : public ::testing::Test
3544 	{
3545 	protected:
3546 		::osl::FileBase::RC     nError1, nError2, nError3;
3547 
3548 	    public:
3549 		// initialization
3550 		void SetUp( )
3551 		{
3552 			// create a tempfile in $TEMP/tmpdir/tmpname.
3553 			createTestDirectory( aTmpName3 );
3554 			createTestFile( aTmpName4 );
3555 		}
3556 
3557 		void TearDown( )
3558 		{
3559 			// remove the tempfile in $TEMP/tmpdir/tmpname.
3560 			deleteTestFile( aTmpName4 );
3561 			deleteTestDirectory( aTmpName3 );
3562 		}
3563 	};// class close
3564 
3565     TEST_F(FileClose, close_001 )
3566     {
3567         ::osl::File testFile( aTmpName4 );
3568 
3569         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3570         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3571 
3572         nError2 = testFile.close( );
3573 
3574         ASSERT_TRUE(::osl::FileBase::E_None == nError2) << "test for close function: close a regular file";
3575     }
3576 
3577     TEST_F(FileClose, close_002 )
3578     {
3579         ::osl::File testFile( aTmpName4 );
3580 
3581         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3582         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3583 
3584         nError2 = testFile.close( );
3585 
3586             nError3 = testFile.setPos( Pos_Absolut, 0 );
3587 
3588         ASSERT_TRUE(( ::osl::FileBase::E_None == nError2 ) &&
3589                                 ( ::osl::FileBase::E_None != nError3 )) << "test for close function: manipulate a file after it has been closed";
3590     }
3591 
3592 	//---------------------------------------------------------------------
3593 	// 	testing the method
3594 	// 	inline RC setPos( sal_uInt32 uHow, sal_Int64 uPos )
3595 	//---------------------------------------------------------------------
3596     class  setPos : public ::testing::Test
3597 	{
3598 	protected:
3599 		::osl::FileBase::RC     nError1;
3600 		sal_uInt64 nCount_write, nCount_read;
3601 
3602 	    public:
3603 		// initialization
3604 		void SetUp( )
3605 		{
3606 			// create a tempfile in $TEMP/tmpdir/tmpname.
3607 			createTestDirectory( aTmpName3 );
3608 			createTestFile( aTmpName4 );
3609 
3610 			//write chars into the file.
3611 			::osl::File testFile( aTmpName4 );
3612 
3613 			nError1 = testFile.open( OpenFlag_Write );
3614 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3615 			nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write );
3616 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3617  			nError1 = testFile.close( );
3618 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3619 		}
3620 
3621 		void TearDown( )
3622 		{
3623 			// remove the tempfile in $TEMP/tmpdir/tmpname.
3624 			deleteTestFile( aTmpName4 );
3625 			deleteTestDirectory( aTmpName3 );
3626 		}
3627 	};// class setPos
3628 
3629     TEST_F(setPos, setPos_001 )
3630     {
3631         ::osl::File testFile( aTmpName4 );
3632         sal_Char buffer_read[2];
3633 
3634         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3635         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3636             nError1 = testFile.setPos( Pos_Absolut, 26 );
3637         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3638         nError1 = testFile.read( buffer_read, 1, nCount_read );
3639         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3640         nError1 = testFile.close( );
3641         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3642 
3643         ASSERT_TRUE(buffer_read[0] == pBuffer_Char[26]) << "test for setPos function: test for Pos_Absolut, set the position to 26, test if the 26th char in file is correct";
3644     }
3645 
3646     TEST_F(setPos, setPos_002 )
3647     {
3648         ::osl::File testFile( aTmpName4 );
3649         sal_Char buffer_read[2];
3650 
3651         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3652         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3653             nError1 = testFile.setPos( Pos_Absolut, sizeof( pBuffer_Char ) - 2 );
3654         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3655             nError1 = testFile.setPos( Pos_Current, 0);
3656         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3657         nError1 = testFile.read( buffer_read, 1, nCount_read );
3658         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3659         nError1 = testFile.close( );
3660         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3661 
3662         ASSERT_TRUE(buffer_read[0] == pBuffer_Char[sizeof( pBuffer_Char ) - 2]) << "test for setPos function: test for Pos_Current, set the position to end, test if the ( end -1 ) char in file is correct";
3663     }
3664 
3665     TEST_F(setPos, setPos_003 )
3666     {
3667         ::osl::File testFile( aTmpName4 );
3668         sal_Char buffer_read[2];
3669 
3670         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3671         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3672         //the file size is smaller than 100
3673         nError1 = testFile.setPos( Pos_End,  -100 );
3674         ASSERT_TRUE(::osl::FileBase::E_INVAL == nError1) << "should return error";
3675 
3676             nError1 = testFile.setPos( Pos_End, -53 );
3677         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3678         nError1 = testFile.read( buffer_read, 1, nCount_read );
3679         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3680         nError1 = testFile.close( );
3681         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3682 
3683         ASSERT_TRUE(buffer_read[0] == pBuffer_Char[0]) << "test for setPos function: test for Pos_End, set the position to end, test if the first char in file is correct";
3684     }
3685 
3686 	//---------------------------------------------------------------------
3687 	// 	testing the method
3688 	// 	inline RC getPos( sal_uInt64& uPos )
3689 	//---------------------------------------------------------------------
3690     class  getPos : public ::testing::Test
3691 	{
3692 	protected:
3693 		::osl::FileBase::RC      nError1;
3694 		sal_uInt64 nCount_write, nCount_read;
3695 
3696 	    public:
3697 		// initialization
3698 		void SetUp( )
3699 		{
3700 			// create a tempfile in $TEMP/tmpdir/tmpname.
3701 			createTestDirectory( aTmpName3 );
3702 			createTestFile( aTmpName4 );
3703 
3704 			//write chars into the file.
3705 			::osl::File testFile( aTmpName4 );
3706 
3707 			nError1 = testFile.open( OpenFlag_Write );
3708 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3709 			nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write );
3710 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3711  			nError1 = testFile.close( );
3712 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3713 		}
3714 
3715 		void TearDown( )
3716 		{
3717 			// remove the tempfile in $TEMP/tmpdir/tmpname.
3718 			deleteTestFile( aTmpName4 );
3719 			deleteTestDirectory( aTmpName3 );
3720 		}
3721 	};// class getPos
3722 
3723     TEST_F(getPos, getPos_001 )
3724     {
3725         ::osl::File testFile( aTmpName4 );
3726         sal_uInt64 nFilePointer;
3727 
3728         nError1 = testFile.getPos( nFilePointer );
3729         ASSERT_TRUE( ::osl::FileBase::E_INVAL == nError1 );
3730 
3731         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3732         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3733 
3734             nError1 = testFile.setPos( Pos_Absolut, 26 );
3735         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3736             nError1 = testFile.getPos( nFilePointer );
3737         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3738 
3739         nError1 = testFile.close( );
3740         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3741 
3742         ASSERT_TRUE(26 == nFilePointer) << "test for getPos function: set the position to 26, get position and check if it is right";
3743     }
3744 
3745 	//---------------------------------------------------------------------
3746 	// 	testing the method
3747 	// 	inline RC isEndOfFile( sal_Bool *pIsEOF )
3748 	//---------------------------------------------------------------------
3749     class  isEndOfFile : public ::testing::Test
3750 	{
3751 	protected:
3752 		::osl::FileBase::RC      nError1;
3753 		sal_uInt64 nCount_write, nCount_read;
3754 
3755 	    public:
3756 		// initialization
3757 		void SetUp( )
3758 		{
3759 			// create a tempfile in $TEMP/tmpdir/tmpname.
3760 			createTestDirectory( aTmpName3 );
3761 			createTestFile( aTmpName4 );
3762 
3763 			//write chars into the file.
3764 			::osl::File testFile( aTmpName4 );
3765 
3766 			nError1 = testFile.open( OpenFlag_Write );
3767 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3768 			nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write );
3769 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3770  			nError1 = testFile.close( );
3771 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3772 		}
3773 
3774 		void TearDown( )
3775 		{
3776 			// remove the tempfile in $TEMP/tmpdir/tmpname.
3777 			deleteTestFile( aTmpName4 );
3778 			deleteTestDirectory( aTmpName3 );
3779 		}
3780 	};// class isEndOfFile
3781 
3782     TEST_F(isEndOfFile, isEndOfFile_001 )
3783     {
3784         ::osl::File   testFile( aTmpName4 );
3785         sal_Bool      bEOF  = sal_False;
3786         sal_Bool      *pEOF = &bEOF;
3787 
3788 
3789         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3790         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3791 
3792             nError1 = testFile.setPos( Pos_End, 0 );
3793         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3794         nError1 = testFile.isEndOfFile( pEOF );
3795         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3796 
3797         nError1 = testFile.close( );
3798         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3799 
3800         ASSERT_TRUE(sal_True == *pEOF) << "test for isEndOfFile function: set the position to end, check if reach end";
3801     }
3802 
3803     TEST_F(isEndOfFile, isEndOfFile_002 )
3804     {
3805             ::osl::File   testFile( aTmpName4 );
3806         sal_Bool      bEOF  = sal_False;
3807         sal_Bool      *pEOF = &bEOF;
3808         sal_uInt64    nFilePointer = 0;
3809 
3810         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3811         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3812 
3813             nError1 = testFile.setPos( Pos_Absolut, 0 );
3814         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3815         *pEOF = sal_False;
3816             while ( !( *pEOF ) )
3817         {
3818             nError1 = testFile.isEndOfFile( pEOF );
3819             ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3820             nError1 = testFile.setPos( Pos_Current, 1 );
3821             ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3822         }
3823             nError1 = testFile.getPos( nFilePointer );
3824         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3825 
3826         nError1 = testFile.close( );
3827         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3828 
3829         ASSERT_TRUE(sizeof( pBuffer_Char ) + 1 == nFilePointer) << "test for isEndOfFile function: use isEndOfFile to move pointer step by step";
3830     }
3831 
3832 	//---------------------------------------------------------------------
3833 	// 	testing the method
3834 	// 	inline RC setSize( sal_uInt64 uSize )
3835 	//---------------------------------------------------------------------
3836     class  setSize : public ::testing::Test
3837 	{
3838 	protected:
3839 		::osl::FileBase::RC      nError1;
3840 		sal_uInt64 nCount_write, nCount_read;
3841 
3842 	    public:
3843 		// initialization
3844 		void SetUp( )
3845 		{
3846 			// create a tempfile in $TEMP/tmpdir/tmpname.
3847 			createTestDirectory( aTmpName3 );
3848 			createTestFile( aTmpName4 );
3849 
3850 			//write chars into the file.
3851 			::osl::File testFile( aTmpName4 );
3852 
3853 			nError1 = testFile.open( OpenFlag_Write );
3854 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3855 			nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write );
3856 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3857  			nError1 = testFile.close( );
3858 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3859 		}
3860 
3861 		void TearDown( )
3862 		{
3863 			// remove the tempfile in $TEMP/tmpdir/tmpname.
3864 			deleteTestFile( aTmpName4 );
3865 			deleteTestDirectory( aTmpName3 );
3866 		}
3867 	};// class setSize
3868 
3869     TEST_F(setSize, setSize_001 )
3870     {
3871         ::osl::File   testFile( aTmpName4 );
3872         // sal_Bool      bEOF  = sal_False;
3873         // sal_Bool      *pEOF = &bEOF;
3874         sal_uInt64     nFilePointer;
3875 
3876 
3877         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3878         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3879 
3880         //enlarge the file to size of 100;
3881             nError1 = testFile.setSize( 100 );
3882         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3883 
3884         //get the file size;
3885             nError1 = testFile.setPos( Pos_End, 0 );
3886         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3887             nError1 = testFile.getPos( nFilePointer );
3888         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3889 
3890         nError1 = testFile.close( );
3891         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3892 
3893         ASSERT_TRUE(100 == nFilePointer) << "test for setSize function: enlarge the file ";
3894     }
3895 
3896     TEST_F(setSize, setSize_002 )
3897     {
3898         ::osl::File   testFile( aTmpName4 );
3899         // sal_Bool      bEOF  = sal_False;
3900         // sal_Bool      *pEOF = &bEOF;
3901         sal_uInt64     nFilePointer;
3902 
3903 
3904         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3905         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3906 
3907         //enlarge the file to size of 100;
3908             nError1 = testFile.setSize( 10 );
3909         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3910 
3911         //get the file size;
3912             nError1 = testFile.setPos( Pos_End, 0 );
3913         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3914             nError1 = testFile.getPos( nFilePointer );
3915         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3916 
3917         nError1 = testFile.close( );
3918         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3919 
3920         ASSERT_TRUE(10 == nFilePointer) << "test for setSize function: truncate the file ";
3921     }
3922   /*            TEST_F(setSize, setSize_003 )
3923     {
3924         ::osl::File   testFile( aTmpName4 );
3925         // sal_Bool      bEOF  = sal_False;
3926         // sal_Bool      *pEOF = &bEOF;
3927         sal_uInt64     nFilePointer;
3928 
3929 
3930         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3931         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3932 
3933         //enlarge the file to size of 100;
3934             nError1 = testFile.setSize( 10 );
3935         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3936 
3937         //get the file size;
3938             nError1 = testFile.setPos( Pos_End, 0 );
3939         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3940             nError1 = testFile.getPos( nFilePointer );
3941         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3942 
3943         nError1 = testFile.close( );
3944         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3945 
3946         ASSERT_TRUE(10 == nFilePointer) << "test for setSize function: truncate the file ";
3947     }
3948   */
3949 
3950 	//---------------------------------------------------------------------
3951 	// 	testing the method
3952 	// 	inline RC read( void *pBuffer, sal_uInt64 uBytesRequested, sal_uInt64& rBytesRead )
3953 	//---------------------------------------------------------------------
3954     class  read : public ::testing::Test
3955 	{
3956 	protected:
3957 		::osl::FileBase::RC      nError1;
3958 		sal_uInt64 nCount_write, nCount_read;
3959 
3960 	    public:
3961 		// initialization
3962 		void SetUp( )
3963 		{
3964 			// create a tempfile in $TEMP/tmpdir/tmpname.
3965 			createTestDirectory( aTmpName3 );
3966 			createTestFile( aTmpName4 );
3967 
3968 			//write chars into the file.
3969 			::osl::File testFile( aTmpName4 );
3970 
3971 			nError1 = testFile.open( OpenFlag_Write );
3972 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3973 			nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write );
3974 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3975  			nError1 = testFile.close( );
3976 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3977 		}
3978 
3979 		void TearDown( )
3980 		{
3981 			// remove the tempfile in $TEMP/tmpdir/tmpname.
3982 			deleteTestFile( aTmpName4 );
3983 			deleteTestDirectory( aTmpName3 );
3984 		}
3985 	};// class read
3986 
3987     TEST_F(read, read_001 )
3988     {
3989         ::osl::File    testFile( aTmpName4 );
3990         sal_uInt64     nFilePointer;
3991         sal_Char       buffer_read[10];
3992 
3993 
3994         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
3995         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3996 
3997         nError1 = testFile.read( buffer_read, 10, nCount_read );
3998         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
3999             nError1 = testFile.getPos( nFilePointer );
4000         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4001 
4002         nError1 = testFile.close( );
4003         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4004 
4005         ASSERT_TRUE(( 10 == nFilePointer ) && ( 0 == strncmp( buffer_read, pBuffer_Char, 10 ) )) << "test for read function: read whole content in the file to a buffer";
4006     }
4007 
4008     TEST_F(read, read_002 )
4009     {
4010         ::osl::File    testFile( aTmpName4 );
4011         sal_uInt64     nFilePointer;
4012         sal_Char       buffer_read[26];
4013 
4014 
4015         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
4016         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4017 
4018             nError1 = testFile.setPos( Pos_Absolut, 26 );
4019         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4020         nError1 = testFile.read( buffer_read, 26, nCount_read );
4021         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4022             nError1 = testFile.getPos( nFilePointer );
4023         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4024 
4025         nError1 = testFile.close( );
4026         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4027 
4028         ASSERT_TRUE(( 52 == nFilePointer ) && ( 26 == nCount_read ) && ( 0 == strncmp( buffer_read, &pBuffer_Char[26], 26 ) )) << "test for read function: read from a special position in the file";
4029     }
4030 
4031 	//---------------------------------------------------------------------
4032 	// 	testing the method
4033 	// 	inline RC write(const void *pBuffer, sal_uInt64 uBytesToWrite, sal_uInt64& rBytesWritten)
4034 	//---------------------------------------------------------------------
4035     class  write : public ::testing::Test
4036 	{
4037 	protected:
4038 		::osl::FileBase::RC      nError1;
4039 		sal_uInt64 nCount_write, nCount_read;
4040 
4041 	    public:
4042 		// initialization
4043 		void SetUp( )
4044 		{
4045 			// create a tempfile in $TEMP/tmpname.
4046 			createTestFile( aTmpName6 );
4047 		}
4048 
4049 		void TearDown( )
4050 		{
4051 			// remove the tempfile in $TEMP/tmpname.
4052 			deleteTestFile( aTmpName6 );
4053 		}
4054 	};// class write
4055 
4056     TEST_F(write, write_001 )
4057     {
4058         ::osl::File    testFile( aTmpName6 );
4059         sal_uInt64     nFilePointer;
4060         sal_Char       buffer_read[10];
4061 
4062         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
4063         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4064 
4065         //write chars into the file.
4066         nError1 = testFile.write( pBuffer_Char, 10, nCount_write );
4067         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4068         //get the current pointer;
4069             nError1 = testFile.getPos( nFilePointer );
4070         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4071         //reset pointer to the beginning;
4072             nError1 = testFile.setPos( Pos_Absolut, 0 );
4073         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4074         nError1 = testFile.read( buffer_read, 10, nCount_read );
4075         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4076 
4077         nError1 = testFile.close( );
4078         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4079 
4080         ASSERT_TRUE(( 10 == nFilePointer ) &&
4081                                 ( 0 == strncmp( buffer_read, pBuffer_Char, 10 ) ) &&
4082                                 ( 10 == nCount_write )) << "test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size";
4083     }
4084 
4085 	//---------------------------------------------------------------------
4086 	// 	testing the method
4087 	// 	inline RC readLine( ::rtl::ByteSequence& aSeq )
4088 	//---------------------------------------------------------------------
4089     class  readLine : public ::testing::Test
4090 	{
4091 	protected:
4092 		::osl::FileBase::RC      nError1;
4093 		sal_uInt64 nCount_write, nCount_read;
4094 		::rtl::ByteSequence      aSequence;
4095 
4096 	    public:
4097 		// initialization
4098 		void SetUp( )
4099 		{
4100 			// create a tempfile in $TEMP/tmpname.
4101 			createTestFile( aTmpName6 );
4102 
4103 			//write some strings into the file.
4104 			::osl::File testFile( aTmpName6 );
4105 			sal_Char ppStrSeq[3][27]  =  { "abcde\n",
4106 			                            "1234567890\n",
4107 			                            "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
4108 			                          };
4109 
4110 			nError1 = testFile.open( OpenFlag_Write );
4111 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4112 
4113 			for ( int nCount = 0; nCount < 3; nCount++ )
4114 			{
4115 				nError1 = testFile.write( ppStrSeq[nCount], strlen( ppStrSeq[nCount] ), nCount_write );
4116 				ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4117 			}
4118 
4119  			nError1 = testFile.close( );
4120 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4121 		}
4122 
4123 		void TearDown( )
4124 		{
4125 			// remove the tempfile in $TEMP/tmpname.
4126 			deleteTestFile( aTmpName6 );
4127 		}
4128 	};// class readLine
4129 
4130     TEST_F(readLine, readLine_001 )
4131     {
4132             ::osl::File    testFile( aTmpName6 );
4133 
4134         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
4135         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4136         nError1 = testFile.readLine( aSequence );
4137         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4138 
4139         ASSERT_TRUE(( ::osl::FileBase::E_None == nError1 ) &&
4140                                 ( 0 == strncmp( ( const char * )aSequence.getArray( ), pBuffer_Char, 5 ) )) << "test for readLine function: read the first line of the file.";
4141     }
4142 
4143     TEST_F(readLine, readLine_002 )
4144     {
4145             ::osl::File    testFile( aTmpName6 );
4146         sal_Bool bEOF  = sal_False;
4147         sal_Bool *pEOF = &bEOF;
4148 
4149         nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write );
4150         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4151         for ( int nCount = 0; nCount < 3; nCount++ )
4152         {
4153             nError1 = testFile.readLine( aSequence );
4154             ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4155         }
4156             nError1 = testFile.isEndOfFile( pEOF );
4157         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4158 
4159         ASSERT_TRUE(*pEOF &&
4160                                 ( 0 == strncmp( ( const char * )aSequence.getArray( ), &pBuffer_Char[26], 26 ) )) << "test for readLine function: read three lines of the file and check the file pointer moving.";
4161     }
4162 
4163 	//---------------------------------------------------------------------
4164 	// 	testing the method
4165 	// 	inline static RC copy( const ::rtl::OUString& ustrSourceFileURL, const ::rtl::OUString& ustrDestFileURL )
4166 	//---------------------------------------------------------------------
4167     class  copy : public ::testing::Test
4168 	{
4169 	protected:
4170 		::osl::FileBase::RC      nError1;
4171 		sal_uInt64 nCount_write, nCount_read;
4172 
4173 	    public:
4174 		// initialization
4175 		void SetUp( )
4176 		{
4177 			// create a tempfile in $TEMP/tmpdir/tmpname.
4178 			createTestDirectory( aTmpName3 );
4179 			createTestFile( aTmpName4 );
4180 
4181 			//write chars into the file.
4182 			::osl::File testFile( aTmpName4 );
4183 
4184 			nError1 = testFile.open( OpenFlag_Write );
4185 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4186 			nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write );
4187 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4188  			nError1 = testFile.close( );
4189 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4190 		}
4191 
4192 		void TearDown( )
4193 		{
4194 			// remove the tempfile in $TEMP/tmpdir/tmpname.
4195 			deleteTestFile( aTmpName4 );
4196 			deleteTestDirectory( aTmpName3 );
4197 		}
4198 	};// class copy
4199 
4200     TEST_F(copy, copy_001 )
4201     {
4202             ::osl::File    testFile( aTmpName6 );
4203 
4204         //copy $TEMP/tmpdir/tmpname to $TEMP/tmpname.
4205         nError1 = ::osl::File::copy( aTmpName4, aTmpName6 );
4206         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4207         //check
4208         nError1 = testFile.open( OpenFlag_Create );
4209         deleteTestFile( aTmpName6 );
4210 
4211         ASSERT_TRUE(::osl::FileBase::E_EXIST == nError1) << "test for copy function: copy file to upper directory";
4212     }
4213 
4214     TEST_F(copy, copy_002 )
4215     {
4216         //copy $TEMP/tmpdir/tmpname to $TEMP/tmpdir.
4217         nError1 = ::osl::File::copy( aTmpName4, aTmpName3 );
4218 
4219         ASSERT_TRUE(( ::osl::FileBase::E_ISDIR == nError1 ) ||( ::osl::FileBase::E_ACCES == nError1 )) << "test for copy function: use directory as destination";
4220     }
4221 
4222     TEST_F(copy, copy_003 )
4223     {
4224         //copy $TEMP/tmpdir/tmpname to $ROOT/tmpname.
4225         nError1 = ::osl::File::copy( aTmpName4, aTmpName7 );
4226 #if defined (WNT )
4227         nError1 = ::osl::FileBase::E_ACCES;  /// for Windows, c:/ is writtenable any way.
4228         deleteTestFile( aTmpName7);
4229 #endif
4230         ASSERT_TRUE(::osl::FileBase::E_ACCES == nError1) << "test for copy function: copy to an illigal place";
4231     }
4232 
4233     TEST_F(copy, copy_004 )
4234     {
4235         //copy $TEMP/tmpname to $TEMP/tmpdir/tmpname.
4236         nError1 = ::osl::File::copy( aTmpName6, aTmpName4 );
4237 
4238         ASSERT_TRUE(::osl::FileBase::E_NOENT == nError1) << "test for copy function: copy a not exist file";
4239     }
4240 
4241     TEST_F(copy, copy_005 )
4242     {
4243         //copy $TEMP/tmpname to $TEMP/system.path using system path.
4244         nError1 = ::osl::File::copy( aTmpName6, aSysPath1 );
4245 
4246         ASSERT_TRUE(::osl::FileBase::E_INVAL == nError1) << "test for copy function: copy a file using system file path";
4247     }
4248   TEST_F(copy, copy_006 )
4249   {
4250     createTestFile( aTmpName6 );
4251     File tmpFile( aTmpName6 );
4252     FileBase::RC err = tmpFile.open( OpenFlag_Write | OpenFlag_Read );
4253     (void)err;
4254     tmpFile.setSize( 200 );
4255     tmpFile.close();
4256     //copy to new path
4257     nError1 = ::osl::File::copy( aTmpName6, aTmpName4 );
4258     ASSERT_TRUE( nError1 == FileBase::E_None );
4259 
4260     //check if is the new file
4261     File newFile( aTmpName4 );
4262     newFile.open( OpenFlag_Write | OpenFlag_Read );
4263     newFile.setPos( Pos_End, 0 );
4264     //      ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4265     sal_uInt64     nFilePointer;
4266     nError1 = newFile.getPos( nFilePointer );
4267     ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4268     newFile.close( );
4269     deleteTestFile( aTmpName6 );
4270     ASSERT_TRUE(nFilePointer == 200) << "test for copy function: the dest file exist";
4271   }
4272   //copyLink has not been impletmented yet
4273   TEST_F(copy, copy_007 )
4274   {
4275 #if ( defined UNX )
4276 
4277     ASSERT_TRUE(::osl::FileBase::E_INVAL == nError1) << "test for copy function: source file is link file";
4278 #endif
4279   }
4280 
4281 	//---------------------------------------------------------------------
4282 	// 	testing the method
4283 	// 	inline static RC move( const ::rtl::OUString& ustrSourceFileURL, const ::rtl::OUString& ustrDestFileURL )
4284 	//---------------------------------------------------------------------
4285     class  move : public ::testing::Test
4286 	{
4287 	protected:
4288 		::osl::FileBase::RC      nError1, nError2;
4289 		sal_uInt64 nCount_write, nCount_read;
4290 
4291 	    public:
4292 		// initialization
4293 		void SetUp( )
4294 		{
4295 			// create a tempfile in $TEMP/tmpdir/tmpname.
4296 			createTestDirectory( aTmpName3 );
4297 			createTestFile( aTmpName4 );
4298 
4299 			//write chars into the file.
4300 			::osl::File testFile( aTmpName4 );
4301 
4302 			nError1 = testFile.open( OpenFlag_Write );
4303 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4304 			nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write );
4305 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4306  			nError1 = testFile.close( );
4307 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4308 		}
4309 
4310 		void TearDown( )
4311 		{
4312 			// remove the tempfile in $TEMP/tmpdir/tmpname.
4313 			deleteTestFile( aTmpName4 );
4314 			deleteTestDirectory( aTmpName3 );
4315 		}
4316 	};// class move
4317 
4318     TEST_F(move, move_001 )
4319     {
4320         //rename $TEMP/tmpdir/tmpname to $TEMP/canonical.name.
4321         nError1 = ::osl::File::move( aTmpName4, aCanURL1 );
4322         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4323         //check
4324             ::osl::File    testFile( aCanURL1 );
4325         nError2 = testFile.open( OpenFlag_Create );
4326         deleteTestFile( aCanURL1 );
4327 
4328         ASSERT_TRUE(::osl::FileBase::E_EXIST == nError2) << "test for move function: rename file to another directory";
4329     }
4330 
4331     TEST_F(move, move_002 )
4332     {
4333         //move $TEMP/tmpdir/tmpname to $TEMP/tmpdir.
4334         nError1 = ::osl::File::move( aTmpName4, aTmpName3 );
4335         //returned ::osl::FileBase::E_ACCES on WNT
4336         ASSERT_TRUE(( ::osl::FileBase::E_ACCES == nError1 || ::osl::FileBase::E_ISDIR == nError1 ) ||( ::osl::FileBase::E_EXIST == nError1 )) << "test for move function: use directory as destination";
4337     }
4338 
4339     TEST_F(move, move_003 )
4340     {
4341         //move $TEMP/tmpdir/tmpname to $ROOT/tmpname.
4342         nError1 = ::osl::File::move( aTmpName4, aTmpName7 );
4343 #if defined (WNT )
4344         nError1 = ::osl::FileBase::E_ACCES;  /// for Windows, c:/ is writtenable any way.
4345         deleteTestFile( aTmpName7);
4346 #endif
4347 
4348         ASSERT_TRUE(::osl::FileBase::E_ACCES == nError1) << "test for move function: move to an illigal place";
4349     }
4350 
4351     TEST_F(move, move_004 )
4352     {
4353         //move $TEMP/tmpname to $TEMP/tmpdir/tmpname.
4354         nError1 = ::osl::File::move( aTmpName6, aTmpName4 );
4355 
4356         ASSERT_TRUE(::osl::FileBase::E_NOENT == nError1) << "test for move function: move a not exist file";
4357     }
4358 
4359     TEST_F(move, move_005 )
4360     {
4361         //move $TEMP/tmpname to $TEMP/system.path using system path.
4362         nError1 = ::osl::File::move( aTmpName6, aSysPath1 );
4363 
4364         ASSERT_TRUE(::osl::FileBase::E_INVAL == nError1) << "test for move function: move a file using system file";
4365     }
4366 
4367     TEST_F(move, move_006 )
4368     {
4369         //move directory $TEMP/tmpname to $TEMP/tmpdir/tmpname.
4370         createTestDirectory( aTmpName6 );
4371         nError1 = ::osl::File::move( aTmpName6, aTmpName4 );
4372         //move file $TEMP/tmpdir/tmpname to $TEMP/tmpname
4373         nError2 = ::osl::File::move( aTmpName4, aTmpName6 );
4374         deleteTestDirectory( aTmpName6 );
4375 #if defined ( WNT )
4376         deleteTestDirectory( aTmpName4 );// in Windows, it can be moved!!!!! this is only for not influence the following test.
4377         deleteTestFile( aTmpName6 );
4378         nError1 = ::osl::FileBase::E_NOTDIR;
4379         nError2 = ::osl::FileBase::E_ISDIR;
4380 #endif
4381         ASSERT_TRUE(::osl::FileBase::E_NOTDIR == nError1 && ::osl::FileBase::E_ISDIR == nError2) << "test for move function: move a directory to an exist file with same name, did not pass in (W32)";
4382     }
4383 
4384     TEST_F(move, move_007 )
4385     {
4386         //create directory $TEMP/tmpname.
4387         createTestDirectory( aTmpName6 );
4388         //move directory $TEMP/tmpdir to $TEMP/tmpname/tmpdir
4389         nError1 = ::osl::File::move( aTmpName3, aTmpName8 );
4390         //check
4391         nError2 = ::osl::Directory::create( aTmpName8 );
4392         ::osl::File::move( aTmpName8, aTmpName3 );
4393         deleteTestDirectory( aTmpName6 );
4394 
4395         ASSERT_TRUE((::osl::FileBase::E_None == nError1 ) &&
4396                                 (::osl::FileBase::E_EXIST == nError2 )) << "test for move function: move a directory to an exist file with same name";
4397     }
4398   // oldpath and newpath are not on the same filesystem.EXDEV,no such error no on Solaris, only on linux
4399   TEST_F(move, move_008 )
4400   {
4401 #if 0
4402     ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "oldpath and newpath are not on the same filesystem, should error returns";
4403 #endif
4404   }
4405   //bugid# 115420, after the bug fix, add the case
4406   TEST_F(move, move_009 )
4407   {
4408 #if 0
4409     //create directory $TEMP/tmpname.
4410     createTestDirectory( aTmpName6 );
4411     //create directory $TEMP/tmpname/tmpdir
4412     createTestDirectory( aTmpName8 );
4413     //move directory $TEMP/tmpname to $TEMP/tmpname/tmpdir/tmpname
4414     rtl::OUString newName = aTmpName8 + OUString::createFromAscii("/tmpname");
4415     //printFileName( newName );
4416     nError1 = ::osl::File::move( aTmpName3, newName );
4417     //deleteTestDirectory( newName + OUString::createFromAscii("/tmpname") );
4418     //deleteTestDirectory( newName );
4419     deleteTestDirectory( aTmpName8 );
4420     deleteTestDirectory( aTmpName6 );
4421     ASSERT_TRUE(::osl::FileBase::E_None != nError1) << "test for move function: move a directory to it's subdirectory";
4422 #endif
4423   }
4424 
4425 	//---------------------------------------------------------------------
4426 	// 	testing the method
4427 	// 	inline static RC remove( const ::rtl::OUString& ustrFileURL )
4428 	//---------------------------------------------------------------------
4429     class  FileRemove : public ::testing::Test
4430 	{
4431 	protected:
4432 		::osl::FileBase::RC      nError1, nError2;
4433 		sal_uInt64 nCount_write, nCount_read;
4434 
4435 	    public:
4436 		// initialization
4437 		void SetUp( )
4438 		{
4439 			// create a tempfile in $TEMP/tmpdir/tmpname.
4440 			createTestDirectory( aTmpName3 );
4441 			createTestFile( aTmpName4 );
4442 
4443 			//write chars into the file.
4444 			::osl::File testFile( aTmpName4 );
4445 
4446 			nError1 = testFile.open( OpenFlag_Write );
4447 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4448 			nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write );
4449 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4450  			nError1 = testFile.close( );
4451 			ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4452 		}
4453 
4454 		void TearDown( )
4455 		{
4456 			// remove the tempfile in $TEMP/tmpdir/tmpname.
4457 			deleteTestFile( aTmpName4 );
4458 			deleteTestDirectory( aTmpName3 );
4459 		}
4460 	};// class remove
4461 
4462     TEST_F(FileRemove, remove_001 )
4463     {
4464         //remove $TEMP/tmpdir/tmpname.
4465         nError1 = ::osl::File::remove( aTmpName4 );
4466         //check
4467             ::osl::File    testFile( aTmpName4 );
4468         nError2 = testFile.open( OpenFlag_Create );
4469 
4470         ASSERT_TRUE(( ::osl::FileBase::E_None == nError1 ) &&
4471                                 ( ::osl::FileBase::E_EXIST != nError2 )) << "test for remove function: remove a file";
4472     }
4473 
4474     TEST_F(FileRemove, remove_002 )
4475     {
4476         //remove $TEMP/tmpname.
4477         nError1 = ::osl::File::remove( aTmpName6 );
4478 
4479         ASSERT_TRUE(( ::osl::FileBase::E_NOENT == nError1 )) << "test for remove function: remove a file not exist";
4480     }
4481 
4482     TEST_F(FileRemove, remove_003 )
4483     {
4484         //remove $TEMP/system/path.
4485         nError1 = ::osl::File::remove( aSysPath2 );
4486 
4487         ASSERT_TRUE(( ::osl::FileBase::E_INVAL == nError1 )) << "test for remove function: removing a file not using full qualified URL";
4488     }
4489 
4490     TEST_F(FileRemove, remove_004 )
4491     {
4492         //remove $TEMP/tmpdir.
4493         nError1 = ::osl::File::remove( aTmpName3 );
4494 
4495         ASSERT_TRUE(( ::osl::FileBase::E_ISDIR == nError1 ) || ( ::osl::FileBase::E_ACCES == nError1 )) << "test for remove function: remove a directory";
4496     }
4497 
4498 	//---------------------------------------------------------------------
4499 	// 	testing the method
4500 	// 	inline static RC setAttributes( const ::rtl::OUString& ustrFileURL, sal_uInt64 uAttributes )
4501 	//---------------------------------------------------------------------
4502     class  setAttributes : public ::testing::Test
4503 	{
4504 	protected:
4505 		::osl::FileBase::RC      nError1, nError2;
4506 		::osl::DirectoryItem    rItem, rItem_hidden;
4507 
4508 	    public:
4509 		// initialization
4510 		void SetUp( )
4511 		{
4512 			// create a tempfile in $TEMP/tmpdir/tmpname.
4513 			createTestFile( aTmpName6 );
4514 		}
4515 
4516 		void TearDown( )
4517 		{
4518 			// remove the tempfile in $TEMP/tmpdir/tmpname.
4519 			deleteTestFile( aTmpName6 );
4520 		}
4521 	};// class setAttributes
4522 
4523     TEST_F(setAttributes, setAttributes_001 )
4524     {
4525     //on windows, only can set 2 attributes: Attribute_ReadOnly,  Attribute_HIDDEN
4526 #ifdef UNX
4527         //set the file to readonly
4528         nError2 = ::osl::File::setAttributes( aTmpName6, Attribute_ReadOnly | Attribute_GrpRead | Attribute_OwnRead | Attribute_OthRead );
4529         ASSERT_TRUE( nError2 == FileBase::E_None);
4530         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4531         ASSERT_TRUE( nError1 == FileBase::E_None);
4532         //get the file attributes
4533             ::osl::FileStatus   rFileStatus( FileStatusMask_Attributes );
4534         nError1 = rItem.getFileStatus( rFileStatus );
4535         ASSERT_TRUE( nError1 == FileBase::E_None );
4536 
4537         ASSERT_TRUE(( Attribute_ReadOnly | Attribute_GrpRead | Attribute_OwnRead | Attribute_OthRead ) ==
4538                                 rFileStatus.getAttributes( )) << "test for setAttributes function: set file attributes and get it to verify.";
4539 #else
4540         //please see GetFileAttributes
4541         nError2 = ::osl::File::setAttributes( aTmpName6, Attribute_ReadOnly );
4542         ASSERT_TRUE( nError2 == FileBase::E_None);
4543         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4544         ASSERT_TRUE( nError1 == FileBase::E_None);
4545         //get the file attributes
4546             ::osl::FileStatus   rFileStatus( FileStatusMask_Attributes );
4547         nError1 = rItem.getFileStatus( rFileStatus );
4548         ASSERT_TRUE( nError1 == FileBase::E_None );
4549         //here the file has 2 Attributes: FILE_ATTRIBUTE_READONLY and FILE_ATTRIBUTE_NORMAL,
4550         // but FILE_ATTRIBUTE_NORMAL is valid only if used alone, so this is maybe a bug
4551         /*::rtl::OString aString = ::rtl::OUStringToOString( aTmpName6, RTL_TEXTENCODING_ASCII_US );
4552         DWORD dwFileAttributes = GetFileAttributes( aString.getStr( ) );
4553         if (dwFileAttributes & FILE_ATTRIBUTE_NORMAL)
4554             printf("has normal attribute");
4555         if (dwFileAttributes & FILE_ATTRIBUTE_READONLY)
4556             printf("has readonly attribute");
4557         */
4558         ASSERT_TRUE((Attribute_ReadOnly & rFileStatus.getAttributes( )) != 0) << "test for setAttributes function: set file attributes READONLY and get it to verify.";
4559 #endif
4560     }
4561 
4562     TEST_F(setAttributes, setAttributes_002 )
4563     {
4564     //on UNX, can not set hidden attribute to file, rename file can set the attribute
4565 #ifdef WNT
4566         //set the file to hidden
4567         nError2 = ::osl::File::setAttributes( aTmpName6, Attribute_Hidden);
4568 
4569         ASSERT_TRUE( nError2 == FileBase::E_None);
4570         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4571         ASSERT_TRUE( nError1 == FileBase::E_None);
4572         //get the file attributes
4573             ::osl::FileStatus rFileStatus( FileStatusMask_Attributes );
4574         nError1 = rItem.getFileStatus( rFileStatus );
4575         ASSERT_TRUE( nError1 == FileBase::E_None );
4576 
4577         ASSERT_TRUE((Attribute_Hidden & rFileStatus.getAttributes( )) != 0) << "test for setAttributes function: set file attributes and get it to verify.";
4578 #endif
4579     }
4580 
4581 	//---------------------------------------------------------------------
4582 	// 	testing the method
4583 	// 	inline static RC setTime(
4584 	// 	       const ::rtl::OUString& ustrFileURL,
4585 	// 	       const TimeValue& rCreationTime,
4586 	// 	       const TimeValue& rLastAccessTime,
4587 	// 	       const TimeValue& rLastWriteTime )
4588 	//---------------------------------------------------------------------
4589     class  setTime : public ::testing::Test
4590 	{
4591 	protected:
4592 		::osl::FileBase::RC     nError1, nError2;
4593 		::osl::DirectoryItem    rItem;
4594 
4595 	    public:
4596 		// initialization
4597 		void SetUp( )
4598 		{
4599 			// create a tempfile in $TEMP/tmpdir/tmpname.
4600 			createTestFile( aTmpName6 );
4601 		}
4602 
4603 		void TearDown( )
4604 		{
4605 			// remove the tempfile in $TEMP/tmpdir/tmpname.
4606 			deleteTestFile( aTmpName6 );
4607 		}
4608 	};// class setTime
4609 
4610     TEST_F(setTime, setTime_001 )
4611     {
4612             TimeValue *pTV_current  = NULL;
4613         ASSERT_TRUE( ( pTV_current = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL );
4614         TimeValue *pTV_creation = NULL;
4615         ASSERT_TRUE( ( pTV_creation = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL );
4616         TimeValue *pTV_access   = NULL;
4617         ASSERT_TRUE( ( pTV_access = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL );
4618         TimeValue *pTV_modify   = NULL;
4619         ASSERT_TRUE( ( pTV_modify = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL );
4620 
4621         //get current time
4622         sal_Bool bOk = osl_getSystemTime( pTV_current );
4623         ASSERT_TRUE( sal_True == bOk );
4624 
4625         //set the file time
4626         nError2 = ::osl::File::setTime( aTmpName6, *pTV_current, *pTV_current, *pTV_current );
4627         ASSERT_TRUE(nError2 == FileBase::E_None) << errorToStr( nError2 ).pData;
4628 
4629             //get the file access time, creation time, modify time
4630         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4631         ASSERT_TRUE(nError1 == FileBase::E_None) << errorToStr( nError1 ).pData;
4632 
4633             ::osl::FileStatus   rFileStatus( FileStatusMask_AccessTime );
4634         nError1 = rItem.getFileStatus( rFileStatus );
4635         ASSERT_TRUE(nError1 == FileBase::E_None) << errorToStr( nError1 ).pData;
4636         *pTV_access = rFileStatus.getAccessTime( );
4637 
4638             ::osl::FileStatus   rFileStatus1( FileStatusMask_CreationTime );
4639         nError1 = rItem.getFileStatus( rFileStatus1 );
4640         ASSERT_TRUE(nError1 == FileBase::E_None) << errorToStr( nError1 ).pData;
4641         *pTV_creation = rFileStatus1.getCreationTime( );
4642 
4643             ::osl::FileStatus   rFileStatus2( FileStatusMask_ModifyTime );
4644         nError1 = rItem.getFileStatus( rFileStatus2 );
4645         ASSERT_TRUE(nError1 == FileBase::E_None) << errorToStr( nError1 ).pData;
4646         *pTV_modify = rFileStatus2.getModifyTime( );
4647 
4648         ASSERT_TRUE(sal_True == t_compareTime( pTV_access, pTV_current, delta )) << "test for setTime function: set access time then get it. time precision is still a problem for it cut off the nanosec.";
4649 #if defined ( WNT )
4650         //Unfortunately there is no way to get the creation time of a file under Unix (its a Windows only feature).
4651         //That means the flag osl_FileStatus_Mask_CreationTime should be deprecated under Unix.
4652         CPPUNIT_ASSERT_MESSAGE( "test for setTime function: set creation time then get it. ",
4653             sal_True == t_compareTime( pTV_creation, pTV_current, delta ) ) ;
4654 #endif
4655         ASSERT_TRUE(sal_True == t_compareTime( pTV_modify, pTV_current, delta )) << "test for setTime function: set modify time then get it. ";
4656         free( pTV_current );
4657         free( pTV_creation );
4658         free( pTV_access );
4659         free( pTV_modify );
4660     }
4661 
4662 	//---------------------------------------------------------------------
4663 	// 	testing the method
4664 	// 	inline static RC sync()
4665 	//---------------------------------------------------------------------
4666         class  sync : public ::testing::Test
4667 	{
4668 	protected:
4669 		::osl::FileBase::RC     nError1, nError2;
4670 		::osl::DirectoryItem    rItem;
4671 
4672 	    public:
4673 		// initialization
4674 		void SetUp( )
4675 		{
4676 			// create a tempfile in $TEMP/tmpdir/tmpname.
4677 			createTestFile( aTmpName6 );
4678 
4679 		}
4680 
4681 		void TearDown( )
4682 		{
4683 			// remove the tempfile in $TEMP/tmpdir/tmpname.
4684 			deleteTestFile( aTmpName6 );
4685 		}
4686 	};// class setTime
4687 
4688     // test case: if The file is located on a read only file system.
4689     TEST_F(sync, sync_001 )
4690     {
4691 #ifdef UNX
4692         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4693         ASSERT_TRUE( nError1 == FileBase::E_None);
4694 
4695         File tmp_file( aTmpName6 );
4696         FileBase::RC err = tmp_file.open(osl_File_OpenFlag_Write );
4697 
4698         ASSERT_TRUE(err == FileBase::E_None) << "File open failed";
4699 
4700         char buffer[50000];
4701         sal_uInt64 written = 0;
4702         nError1 = tmp_file.write((void*)buffer, sizeof(buffer), written);
4703         ASSERT_TRUE(nError1 == FileBase::E_None) << "write failed!";
4704 
4705         //set the file to readonly
4706         nError2 = ::osl::File::setAttributes( aTmpName6, Attribute_ReadOnly | Attribute_GrpRead | Attribute_OwnRead | Attribute_OthRead );
4707         ASSERT_TRUE( nError2 == FileBase::E_None);
4708 
4709         nError2 = tmp_file.sync();
4710 
4711             ASSERT_TRUE(nError2 == FileBase::E_None) << "can not sync to readonly file!";
4712 
4713         tmp_file.close();
4714 #endif
4715     }
4716     //test case:no enough space, how to create such case???see test_cpy_wrt_file.cxx::test_osl_writeFile
4717 
4718 }// namespace osl_File
4719 
4720 
4721 //------------------------------------------------------------------------
4722 // Beginning of the test cases for DirectoryItem class
4723 //------------------------------------------------------------------------
4724 namespace osl_DirectoryItem
4725 {
4726 	//---------------------------------------------------------------------
4727 	// 	testing the method
4728 	// 	DirectoryItem(): _pData( NULL )
4729 	//---------------------------------------------------------------------
4730     class  DirectoryItemCtors : public ::testing::Test
4731 	{
4732 	protected:
4733 		::osl::FileBase::RC     nError1, nError2;
4734 
4735 	    public:
4736 		// initialization
4737 		void SetUp( )
4738 		{
4739 			// create a tempfile in $TEMP/tmpname.
4740 			createTestFile( aTmpName6 );
4741 		}
4742 
4743 		void TearDown( )
4744 		{
4745 			// remove the tempfile in $TEMP/tmpname.
4746 			deleteTestFile( aTmpName6 );
4747 		}
4748 	};// class DirectoryCtors
4749 
4750     TEST_F(DirectoryItemCtors, ctors_001)
4751     {
4752         ::osl::File testFile( aTmpName6 );
4753         ::osl::DirectoryItem    rItem;  //constructor
4754 
4755         //get the DirectoryItem.
4756         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4757         ASSERT_TRUE( FileBase::E_None == nError1 );
4758 
4759         ASSERT_TRUE(::osl::FileBase::E_None == nError1) << "test for ctors function: initialize a new instance of DirectoryItem and get an item to check.";
4760     }
4761 
4762 	//---------------------------------------------------------------------
4763 	// 	testing the method
4764 	// 	DirectoryItem( const DirectoryItem& rItem ): _pData( rItem._pData)
4765 	//---------------------------------------------------------------------
4766     class  copy_assin_Ctors : public ::testing::Test
4767 	{
4768 	protected:
4769 		::osl::FileBase::RC     nError1, nError2;
4770 
4771 	    public:
4772 		// initialization
4773 		void SetUp( )
4774 		{
4775 			// create a tempfile in $TEMP/tmpname.
4776 			createTestFile( aTmpName6 );
4777 		}
4778 
4779 		void TearDown( )
4780 		{
4781 			// remove the tempfile in $TEMP/tmpname.
4782 			deleteTestFile( aTmpName6 );
4783 		}
4784 	};// class copy_assin_Ctors
4785 
4786     TEST_F(copy_assin_Ctors, copy_assin_Ctors_001 )
4787     {
4788         ::osl::DirectoryItem    rItem;  //constructor
4789             //get the DirectoryItem.
4790         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4791         ASSERT_TRUE( FileBase::E_None == nError1 );
4792 
4793         ::osl::DirectoryItem    copyItem( rItem ); //copy constructor
4794             ::osl::FileStatus   rFileStatus( FileStatusMask_FileName );
4795         nError1 = copyItem.getFileStatus( rFileStatus );
4796         ASSERT_TRUE( nError1 == FileBase::E_None );
4797 
4798         ASSERT_TRUE(( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName2 ) )) << "test for copy_assin_Ctors function: use copy constructor to get an item and check filename.";
4799     }
4800 
4801     TEST_F(copy_assin_Ctors, copy_assin_Ctors_002 )
4802     {
4803         ::osl::DirectoryItem    rItem;  //constructor
4804             //get the DirectoryItem.
4805         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4806         ASSERT_TRUE( FileBase::E_None == nError1 );
4807 
4808         ::osl::DirectoryItem    copyItem;
4809         copyItem = rItem;               //assinment operator
4810             ::osl::FileStatus   rFileStatus( FileStatusMask_FileName );
4811         nError1 = copyItem.getFileStatus( rFileStatus );
4812         ASSERT_TRUE( nError1 == FileBase::E_None );
4813 
4814         ASSERT_TRUE(( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName2 ) )) << "test for copy_assin_Ctors function: test assinment operator here since it is same as copy constructor in test way.";
4815     }
4816 
4817 	//---------------------------------------------------------------------
4818 	// 	testing the method
4819 	// 	inline sal_Bool is()
4820 	//---------------------------------------------------------------------
4821     class  is : public ::testing::Test
4822 	{
4823 	protected:
4824 		::osl::FileBase::RC     nError1, nError2;
4825 
4826 	    public:
4827 		// initialization
4828 		void SetUp( )
4829 		{
4830 			// create a tempfile in $TEMP/tmpname.
4831 			createTestFile( aTmpName6 );
4832 		}
4833 
4834 		void TearDown( )
4835 		{
4836 			// remove the tempfile in $TEMP/tmpname.
4837 			deleteTestFile( aTmpName6 );
4838 		}
4839 	};// class is
4840 
4841     TEST_F(is, is_001 )
4842     {
4843         ::osl::DirectoryItem    rItem;  //constructor
4844 
4845         ASSERT_TRUE(!rItem.is( )) << "test for is function: use an uninitialized instance.";
4846     }
4847 
4848     TEST_F(is, is_002 )
4849     {
4850         ::osl::DirectoryItem    rItem;  //constructor
4851             //get the DirectoryItem.
4852         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4853         ASSERT_TRUE( FileBase::E_None == nError1 );
4854 
4855         ASSERT_TRUE(( sal_True == rItem.is( ) )) << "test for is function: use an uninitialized instance.";
4856     }
4857 
4858 	//---------------------------------------------------------------------
4859 	// 	testing the method
4860 	// 	static inline RC get( const ::rtl::OUString& ustrFileURL, DirectoryItem& rItem )
4861 	//---------------------------------------------------------------------
4862     class  get : public ::testing::Test
4863 	{
4864 	protected:
4865 		::osl::FileBase::RC     nError1, nError2;
4866 
4867 	    public:
4868 		// initialization
4869 		void SetUp( )
4870 		{
4871 			// create a tempfile in $TEMP/tmpname.
4872 			createTestFile( aTmpName6 );
4873 		}
4874 
4875 		void TearDown( )
4876 		{
4877 			// remove the tempfile in $TEMP/tmpname.
4878 			deleteTestFile( aTmpName6 );
4879 		}
4880 	};// class get
4881 
4882     TEST_F(get, get_001 )
4883     {
4884         ::osl::DirectoryItem    rItem;  //constructor
4885             //get the DirectoryItem.
4886         nError2 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4887 
4888         //check the file name
4889             ::osl::FileStatus   rFileStatus( FileStatusMask_FileName );
4890         nError1 = rItem.getFileStatus( rFileStatus );
4891         ASSERT_TRUE( nError1 == FileBase::E_None );
4892 
4893         ASSERT_TRUE(( ::osl::FileBase::E_None == nError2 ) &&
4894                                 ( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName2 ) )) << "test for get function: use copy constructor to get an item and check filename.";
4895     }
4896 
4897     TEST_F(get, get_002 )
4898     {
4899         ::osl::DirectoryItem    rItem;
4900             //get the DirectoryItem.
4901         nError1 = ::osl::DirectoryItem::get( aSysPath1, rItem );
4902 
4903         ASSERT_TRUE(FileBase::E_INVAL == nError1) << "test for get function: use a system name instead of a URL.";
4904     }
4905 
4906     TEST_F(get, get_003 )
4907     {
4908         ::osl::DirectoryItem    rItem;
4909             //get the DirectoryItem.
4910         nError1 = ::osl::DirectoryItem::get( aTmpName3, rItem );
4911 
4912         ASSERT_TRUE(FileBase::E_NOENT == nError1) << "test for get function: use a non existed file URL.";
4913     }
4914 
4915 	//---------------------------------------------------------------------
4916 	// 	testing the method
4917 	// 	inline RC getFileStatus( FileStatus& rStatus )
4918 	//---------------------------------------------------------------------
4919     class  getFileStatus : public ::testing::Test
4920 	{
4921 	protected:
4922 		::osl::FileBase::RC     nError1, nError2;
4923 
4924 	    public:
4925 		// initialization
4926 		void SetUp( )
4927 		{
4928 			// create a tempfile in $TEMP/tmpdir/tmpname.
4929 			createTestDirectory( aTmpName3 );
4930 			createTestFile( aTmpName4 );
4931 		}
4932 
4933 		void TearDown( )
4934 		{
4935 			// remove the tempfile in $TEMP/tmpdir/tmpname.
4936 			deleteTestFile( aTmpName4 );
4937 			deleteTestDirectory( aTmpName3 );
4938 		}
4939 	};// class getFileStatus
4940 
4941     TEST_F(getFileStatus, getFileStatus_001 )
4942     {
4943         ::osl::DirectoryItem    rItem;  //constructor
4944             //get the DirectoryItem.
4945         nError1 = ::osl::DirectoryItem::get( aTmpName4, rItem );
4946         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4947 
4948         //check the file name
4949             ::osl::FileStatus   rFileStatus( FileStatusMask_FileName );
4950         nError2 = rItem.getFileStatus( rFileStatus );
4951 
4952         ASSERT_TRUE(( ::osl::FileBase::E_None == nError2 ) &&
4953                                 ( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName2 ) )) << "test for getFileStatus function: get file status and check filename";
4954     }
4955 
4956     TEST_F(getFileStatus, getFileStatus_002 )
4957     {
4958         ::osl::DirectoryItem    rItem;  //constructor
4959             //get the DirectoryItem.
4960         nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem );
4961 
4962         //check the file name
4963             ::osl::FileStatus   rFileStatus( FileStatusMask_FileName );
4964         nError2 = rItem.getFileStatus( rFileStatus );
4965 
4966         ASSERT_TRUE(( ::osl::FileBase::E_INVAL == nError2 )) << "test for getFileStatus function: file not existed";
4967     }
4968 
4969     TEST_F(getFileStatus, getFileStatus_003 )
4970     {
4971         ::osl::DirectoryItem    rItem;  //constructor
4972             //get the DirectoryItem.
4973         nError1 = ::osl::DirectoryItem::get( aTmpName3, rItem );
4974         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
4975 
4976         //check the file name
4977             ::osl::FileStatus   rFileStatus( FileStatusMask_FileName );
4978         nError2 = rItem.getFileStatus( rFileStatus );
4979 
4980         ASSERT_TRUE(( ::osl::FileBase::E_None == nError2 ) &&
4981                                 ( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName1 ) )) << "test for getFileStatus function: get directory information";
4982     }
4983 
4984 }// namespace osl_DirectoryItem
4985 
4986 
4987 //------------------------------------------------------------------------
4988 // Beginning of the test cases for Directory class
4989 //------------------------------------------------------------------------
4990 namespace osl_Directory
4991 {
4992 	//---------------------------------------------------------------------
4993 	// 	testing the method
4994 	// 	Directory( const ::rtl::OUString& strPath ): _pData( 0 ), _aPath( strPath )
4995 	//---------------------------------------------------------------------
4996     class  DirectoryCtors : public ::testing::Test
4997 	{
4998 	protected:
4999 		::osl::FileBase::RC     nError1, nError2;
5000 
5001 	    public:
5002 		// initialization
5003 		void SetUp( )
5004 		{
5005 			// create a tempfile in $TEMP/tmpdir/tmpname.
5006 			createTestDirectory( aTmpName3 );
5007 			createTestFile( aTmpName4 );
5008 		}
5009 
5010 		void TearDown( )
5011 		{
5012 			// remove the tempfile in $TEMP/tmpdir/tmpname.
5013 			deleteTestFile( aTmpName4 );
5014 			deleteTestDirectory( aTmpName3 );
5015             // LLA: printf("tearDown done.\n");
5016 		}
5017 	};// class DirectoryCtors
5018 
5019     TEST_F(DirectoryCtors, ctors_001 )
5020     {
5021         ::osl::Directory testDirectory( aTmpName3 ); //constructor
5022 
5023         //open a directory
5024         nError1 = testDirectory.open( );
5025             ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5026         //close a directory
5027         nError2 = testDirectory.close( );
5028             ASSERT_TRUE( ::osl::FileBase::E_None == nError2 );
5029 
5030         ASSERT_TRUE(( ::osl::FileBase::E_None == nError1 ) &&
5031                                 ( ::osl::FileBase::E_None == nError2 )) << "test for ctors function: create an instance and check open and close";
5032     }
5033 
5034     TEST_F(DirectoryCtors, ctors_002 )
5035     {
5036         ::osl::Directory testDirectory( aTmpName9 ); //constructor
5037 
5038         //open a directory
5039         nError1 = testDirectory.open( );
5040             ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5041         //close a directory
5042         nError2 = testDirectory.close( );
5043             ASSERT_TRUE( ::osl::FileBase::E_None == nError2 );
5044 
5045         ASSERT_TRUE(( ::osl::FileBase::E_None == nError1 ) &&
5046                                 ( ::osl::FileBase::E_None == nError2 )) << "test for ctors function: relative URL, :-), it is also worked";
5047     }
5048 
5049 	//---------------------------------------------------------------------
5050 	// 	testing the method
5051 	// 	inline RC open()
5052 	//---------------------------------------------------------------------
5053     class  DirectoryOpen : public ::testing::Test
5054 	{
5055 	protected:
5056 		::osl::FileBase::RC     nError1, nError2;
5057 
5058 	    public:
5059 		// initialization
5060 		void SetUp( )
5061 		{
5062 			// create a tempfile in $TEMP/tmpdir/tmpname.
5063 			createTestDirectory( aTmpName3 );
5064 			createTestFile( aTmpName4 );
5065 		}
5066 
5067 		void TearDown( )
5068 		{
5069 			// remove the tempfile in $TEMP/tmpdir/tmpname.
5070 			deleteTestFile( aTmpName4 );
5071 			deleteTestDirectory( aTmpName3 );
5072 		}
5073 	};// class open
5074 
5075     TEST_F(DirectoryOpen, open_001 )
5076     {
5077         ::osl::Directory testDirectory( aTmpName3 ); //constructor
5078 
5079         //open a directory
5080         nError1 = testDirectory.open( );
5081         //check if directory is opened.
5082         sal_Bool bOk = testDirectory.isOpen( );
5083         //close a directory
5084         nError2 = testDirectory.close( );
5085 
5086         ASSERT_TRUE(( sal_True == bOk ) &&
5087                                 ( ::osl::FileBase::E_None == nError1 ) &&
5088                                 ( ::osl::FileBase::E_None == nError2 )) << "test for open function: open a directory and check for open";
5089     }
5090 
5091     TEST_F(DirectoryOpen, open_002 )
5092     {
5093         ::osl::Directory testDirectory( aTmpName6 ); //constructor
5094 
5095         //open a directory
5096         nError1 = testDirectory.open( );
5097             if ( ::osl::FileBase::E_None == nError1 )
5098         {
5099             nError2 = testDirectory.close( );
5100             ASSERT_TRUE( ::osl::FileBase::E_None == nError2 );
5101         }
5102 
5103         ASSERT_TRUE(( ::osl::FileBase::E_NOENT == nError1 )) << "test for open function: open a file that is not existed";
5104     }
5105 
5106     TEST_F(DirectoryOpen, open_003 )
5107     {
5108         ::osl::Directory testDirectory( aUserDirectorySys ); //constructor
5109 
5110         //open a directory
5111         nError1 = testDirectory.open( );
5112             if ( ::osl::FileBase::E_None == nError1 )
5113         {
5114             nError2 = testDirectory.close( );
5115             ASSERT_TRUE( ::osl::FileBase::E_None == nError2 );
5116         }
5117 
5118         ASSERT_TRUE(( ::osl::FileBase::E_INVAL == nError1 )) << "test for open function: using system path";
5119     }
5120 
5121     TEST_F(DirectoryOpen, open_004 )
5122     {
5123         ::osl::Directory testDirectory( aTmpName4 ); //constructor
5124 
5125         //open a directory
5126         nError1 = testDirectory.open( );
5127             if ( ::osl::FileBase::E_None == nError1 )
5128         {
5129             nError2 = testDirectory.close( );
5130             ASSERT_TRUE( ::osl::FileBase::E_None == nError2 );
5131         }
5132 
5133         ASSERT_TRUE(( ::osl::FileBase::E_NOTDIR == nError1 ) || ( ::osl::FileBase::E_ACCES )) << "test for open function: open a file instead of a directory";
5134     }
5135 
5136 	//---------------------------------------------------------------------
5137 	// 	testing the method
5138 	// 	inline sal_Bool isOpen() { return _pData != NULL; };
5139 	//---------------------------------------------------------------------
5140     class  isOpen : public ::testing::Test
5141 	{
5142 	protected:
5143 		::osl::FileBase::RC     nError1, nError2;
5144 
5145 	    public:
5146 		// initialization
5147 		void SetUp( )
5148 		{
5149 			// create a tempfile in $TEMP/tmpdir/tmpname.
5150 			createTestDirectory( aTmpName3 );
5151 			createTestFile( aTmpName4 );
5152 		}
5153 
5154 		void TearDown( )
5155 		{
5156 			// remove the tempfile in $TEMP/tmpdir/tmpname.
5157 			deleteTestFile( aTmpName4 );
5158 			deleteTestDirectory( aTmpName3 );
5159 		}
5160 	};// class isOpen
5161 
5162     TEST_F(isOpen, isOpen_001 )
5163     {
5164         ::osl::Directory testDirectory( aTmpName3 ); //constructor
5165 
5166         //open a directory
5167         nError1 = testDirectory.open( );
5168         //check if directory is opened.
5169         sal_Bool bOk = testDirectory.isOpen( );
5170         //close a directory
5171         nError2 = testDirectory.close( );
5172 
5173         ASSERT_TRUE(( sal_True == bOk )) << "test for isOpen function: open a directory and check for open";
5174     }
5175 
5176     TEST_F(isOpen, isOpen_002 )
5177     {
5178         ::osl::Directory testDirectory( aTmpName3 ); //constructor
5179 
5180         //check if directory is opened.
5181         sal_Bool bOk = testDirectory.isOpen( );
5182 
5183         ASSERT_TRUE(!( sal_True == bOk )) << "test for isOpen function: do not open a directory and check for open";
5184     }
5185 
5186 	//---------------------------------------------------------------------
5187 	// 	testing the method
5188 	// 	inline RC close()
5189 	//---------------------------------------------------------------------
5190     class  DirectoryClose : public ::testing::Test
5191 	{
5192 	protected:
5193 		::osl::FileBase::RC     nError1, nError2;
5194 
5195 	    public:
5196 		// initialization
5197 		void SetUp( )
5198 		{
5199 			// create a tempdirectory : $TEMP/tmpdir.
5200 			createTestDirectory( aTmpName3 );
5201 		}
5202 
5203 		void TearDown( )
5204 		{
5205 			// remove a tempdirectory : $TEMP/tmpdir.
5206 			deleteTestDirectory( aTmpName3 );
5207 		}
5208 	};// class close
5209 
5210     TEST_F(DirectoryClose, close_001 )
5211     {
5212         ::osl::Directory testDirectory( aTmpName3 ); //constructor
5213 
5214         //open a directory
5215         nError1 = testDirectory.open( );
5216         //close a directory
5217         nError2 = testDirectory.close( );
5218         //check if directory is opened.
5219         sal_Bool bOk = testDirectory.isOpen( );
5220 
5221         ASSERT_TRUE(!( sal_True == bOk )) << "test for isOpen function: close a directory and check for open";
5222     }
5223 
5224     TEST_F(DirectoryClose, close_002 )
5225     {
5226         ::osl::Directory testDirectory( aTmpName3 ); //constructor
5227 
5228         //close a directory
5229         nError1 = testDirectory.close( );
5230 
5231         ASSERT_TRUE(( ::osl::FileBase::E_BADF == nError1 )) << "test for isOpen function: close a not opened directory";
5232     }
5233 
5234 	//---------------------------------------------------------------------
5235 	// 	testing the method
5236 	// 	inline RC reset()
5237 	//---------------------------------------------------------------------
5238     class  reset : public ::testing::Test
5239 	{
5240 	protected:
5241 		::osl::FileBase::RC     nError1, nError2;
5242 		::osl::DirectoryItem    rItem;
5243 
5244 	    public:
5245 		// initialization
5246 		void SetUp( )
5247 		{
5248 			// create a tempdirectory : $TEMP/tmpdir.
5249 			createTestDirectory( aTmpName3 );
5250 			// create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
5251 			createTestFile( aTmpName3, aTmpName2);
5252 			createTestFile( aTmpName3, aTmpName1);
5253 			createTestFile( aTmpName3, aHidURL1);
5254 		}
5255 
5256 		void TearDown( )
5257 		{
5258 			// remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
5259 			deleteTestFile( aTmpName3, aHidURL1);
5260 			deleteTestFile( aTmpName3, aTmpName1);
5261 			deleteTestFile( aTmpName3, aTmpName2);
5262 			// remove a tempdirectory : $TEMP/tmpdir.
5263 			deleteTestDirectory( aTmpName3 );
5264 		}
5265 	};// class reset
5266 
5267     TEST_F(reset, reset_001 )
5268     {
5269         ::osl::Directory testDirectory( aTmpName3 ); //constructor
5270 
5271         //open a directory
5272         nError1 = testDirectory.open( );
5273         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5274         //get first Item
5275         nError1 = testDirectory.getNextItem( rItem, 1 );
5276         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5277         //get second Item
5278         //mindy: nError1 = testDirectory.getNextItem( rItem, 0 );
5279         //mindy: ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5280 
5281         //reset enumeration
5282         nError2 = testDirectory.reset( );
5283         //get reseted Item, if reset does not work, getNextItem() should return the second Item (aTmpName1)
5284         nError1 = testDirectory.getNextItem( rItem, 0 );
5285         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5286 
5287         //check the file name
5288             ::osl::FileStatus   rFileStatus( FileStatusMask_FileName );
5289         nError1 = rItem.getFileStatus( rFileStatus );
5290         //close a directory
5291         nError1 = testDirectory.close( );
5292         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5293 
5294         sal_Bool bOK1,bOK2;
5295         bOK1 = compareFileName( rFileStatus.getFileName( ), aTmpName2 );
5296         bOK2 = compareFileName( rFileStatus.getFileName( ), aHidURL1 );
5297 
5298         ASSERT_TRUE(( ::osl::FileBase::E_None == nError2 ) &&
5299                                 ( sal_True == bOK1 || bOK2 )) << "test for reset function: get two directory item, reset it, then get again, check the filename";
5300     }
5301 
5302     TEST_F(reset, reset_002 )
5303     {
5304         ::osl::Directory testDirectory( aTmpName6 ); //constructor
5305 
5306         //close a directory
5307         nError1 = testDirectory.reset( );
5308 
5309         ASSERT_TRUE(( ::osl::FileBase::E_NOENT == nError1 )) << "test for reset function: reset a non existed directory";
5310     }
5311 
5312 
5313     TEST_F(reset, reset_003 )
5314     {
5315         ::osl::Directory testDirectory( aTmpName4 ); //constructor
5316 
5317         //close a directory
5318         nError1 = testDirectory.reset( );
5319 
5320         ASSERT_TRUE(( ::osl::FileBase::E_NOTDIR == nError1 ) || ( ::osl::FileBase::E_NOENT == nError1 )) << "test for reset function: reset a file instead of a directory";
5321     }
5322 
5323     TEST_F(reset, reset_004 )
5324     {
5325         ::osl::Directory testDirectory( aUserDirectorySys ); //constructor
5326 
5327         //close a directory
5328         nError1 = testDirectory.reset( );
5329 
5330         ASSERT_TRUE(( ::osl::FileBase::E_INVAL == nError1 )) << "test for reset function: use a system path";
5331     }
5332 
5333 	//---------------------------------------------------------------------
5334 	// 	testing the method
5335 	// 	inline RC getNextItem( DirectoryItem& rItem, sal_uInt32 nHint = 0 )
5336 	//---------------------------------------------------------------------
5337     class  getNextItem : public ::testing::Test
5338 	{
5339 	protected:
5340 		::osl::FileBase::RC     nError1, nError2;
5341 		::osl::DirectoryItem    rItem;
5342 
5343 	    public:
5344 		// initialization
5345 		void SetUp( )
5346 		{
5347 			// create a tempdirectory : $TEMP/tmpdir.
5348 			createTestDirectory( aTmpName3 );
5349 			// create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
5350 			createTestFile( aTmpName3, aTmpName2 );
5351 			createTestFile( aTmpName3, aTmpName1 );
5352 			createTestFile( aTmpName3, aHidURL1 );
5353 
5354 		}
5355 
5356 		void TearDown( )
5357 		{
5358 			// remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
5359 			deleteTestFile( aTmpName3, aHidURL1 );
5360 			deleteTestFile( aTmpName3, aTmpName1 );
5361 			deleteTestFile( aTmpName3, aTmpName2 );
5362 			// remove a tempdirectory : $TEMP/tmpdir.
5363 			deleteTestDirectory( aTmpName3 );
5364 		}
5365 	};// class getNextItem
5366 
5367     TEST_F(getNextItem, getNextItem_001 )
5368     {
5369             ::osl::Directory testDirectory( aTmpName3 ); //constructor
5370 
5371         //open a directory
5372         nError1 = testDirectory.open( );
5373         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5374 
5375         //check the file name
5376         ::rtl::OUString     strFilename;
5377         sal_Bool            bOk1 = sal_False;
5378         sal_Bool bOk2 = sal_False;
5379         sal_Bool bOk3 = sal_False;
5380             ::osl::FileStatus   rFileStatus( FileStatusMask_FileName );
5381         for ( int nCount = 0; nCount < 3; nCount++ )
5382         {
5383             //get three Items
5384             nError1 = testDirectory.getNextItem( rItem, 2 );
5385             ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5386             nError1 = rItem.getFileStatus( rFileStatus );
5387             ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5388             switch ( nCount )
5389             {
5390                 case 0: bOk1 = compareFileName( rFileStatus.getFileName( ), aTmpName2 ) || compareFileName( rFileStatus.getFileName( ), aHidURL1);
5391                     break;
5392                 case 1: bOk2 = compareFileName( rFileStatus.getFileName( ), aTmpName1 );
5393                     break;
5394                 case 2: bOk3 = compareFileName( rFileStatus.getFileName( ), aHidURL1) || compareFileName( rFileStatus.getFileName( ), aTmpName2 );
5395             }
5396         }
5397 
5398         //close a directory
5399         nError1 = testDirectory.close( );
5400         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5401 
5402         ASSERT_TRUE(( sal_True == bOk1 ) && ( sal_True == bOk2 ) && ( sal_True == bOk3 )) << "test for getNextItem function: retrive three items and check their names.";
5403     }
5404 
5405     TEST_F(getNextItem, getNextItem_002 )
5406     {
5407             ::osl::Directory testDirectory( aTmpName3 ); //constructor
5408         nError1 = testDirectory.getNextItem( rItem );
5409 
5410         ASSERT_TRUE(( ::osl::FileBase::E_INVAL == nError1 )) << "test for getNextItem function: retrive an item in a directory which is not opened, also test for nHint's default value.";
5411     }
5412 
5413     TEST_F(getNextItem, getNextItem_003 )
5414     {
5415             ::osl::Directory testDirectory( aTmpName3 ); //constructor
5416 
5417         //open a directory
5418         nError1 = testDirectory.open( );
5419         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5420 
5421         for ( int nCount = 0; nCount < 4; nCount++ )
5422         {
5423             nError2 = testDirectory.getNextItem( rItem, 3 );
5424         }
5425 
5426         //close a directory
5427         nError1 = testDirectory.close( );
5428         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5429 
5430         ASSERT_TRUE(( ::osl::FileBase::E_NOENT == nError2 )) << "test for getNextItem function: retrive 4 times in a directory which contain only 3 files.";
5431     }
5432 
5433     TEST_F(getNextItem, getNextItem_004 )
5434     {
5435     //create a link file(can not on Windows), then check if getNextItem can get it.
5436 #ifdef UNX
5437         sal_Bool bOK = sal_False;
5438         ::rtl::OUString aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys );
5439         ( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpdir/link.file");
5440         ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpdir/tmpname");
5441             rtl::OString strLinkFileName, strSrcFileName;
5442             strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US );
5443             strSrcFileName  = OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US );
5444 
5445         //create a link file and link it to file "/tmp/PID/tmpdir/tmpname"
5446             sal_Int32 fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() );
5447         ASSERT_TRUE( fd == 0 );
5448         ::osl::Directory testDirectory( aTmpName3 );
5449 
5450         //open a directory
5451         nError1 = testDirectory.open( );
5452         ::rtl::OUString aFileName = ::rtl::OUString::createFromAscii("link.file");
5453 
5454         while (1) {
5455             nError1 = testDirectory.getNextItem( rItem, 4 );
5456             if (::osl::FileBase::E_None == nError1) {
5457                 ::osl::FileStatus   rFileStatus( FileStatusMask_FileName | FileStatusMask_Type );
5458                 rItem.getFileStatus( rFileStatus );
5459                 if ( compareFileName( rFileStatus.getFileName( ), aFileName) == sal_True )
5460                 {
5461                     if ( FileStatus::Link == rFileStatus.getFileType( ))
5462                     {
5463                         bOK = sal_True;
5464                         break;
5465                     }
5466                 }
5467             }
5468             else
5469                 break;
5470         };
5471             fd = std::remove( strLinkFileName.getStr() );
5472         ASSERT_TRUE(fd == 0) << "remove link file failed";
5473         ASSERT_TRUE(( bOK == sal_True )) << "test for getNextItem function: check if can retrieve the link file name";
5474 #endif
5475     }
5476 
5477 	//---------------------------------------------------------------------
5478 	// 	testing the method
5479 	// 	inline static RC getVolumeInfo( const ::rtl::OUString& ustrDirectoryURL, VolumeInfo& rInfo )
5480 	//---------------------------------------------------------------------
5481     class  getVolumeInfo : public ::testing::Test
5482 	{
5483 	protected:
5484 		::osl::FileBase::RC     nError1, nError2;
5485 
5486 	    public:
5487 
5488 		// test code.
5489         void checkValidMask(osl::VolumeInfo const& _aVolumeInfo, sal_Int32 _nMask)
5490             {
5491                 if (_nMask == VolumeInfoMask_FileSystemName)
5492 		{
5493 			//get file system name
5494 			::rtl::OUString aFileSysName( aNullURL );
5495                     aFileSysName = _aVolumeInfo.getFileSystemName( );
5496 
5497                     sal_Bool bRes2 = compareFileName( aFileSysName, aNullURL );
5498 			ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) &&
5499                                             ( sal_False == bRes2 )) << "test for getVolumeInfo function: getVolumeInfo of root directory.";
5500                 }
5501                 if (_nMask == VolumeInfoMask_Attributes)
5502                 {
5503                     sal_Bool b1 = _aVolumeInfo.getRemoteFlag();
5504                     sal_Bool b2 = _aVolumeInfo.getRemoveableFlag();
5505                     sal_Bool b3 = _aVolumeInfo.getCompactDiscFlag();
5506                     sal_Bool b4 = _aVolumeInfo.getFloppyDiskFlag();
5507                     sal_Bool b5 = _aVolumeInfo.getFixedDiskFlag();
5508                     sal_Bool b6 = _aVolumeInfo.getRAMDiskFlag();
5509 
5510                     rtl::OString sAttr;
5511                     if (b1) sAttr =  "Remote";
5512                     if (b2) sAttr += " Removeable";
5513                     if (b3) sAttr += " CDROM";
5514                     if (b4) sAttr += " Floppy";
5515                     if (b5) sAttr += " FixedDisk";
5516                     if (b6) sAttr += " RAMDisk";
5517 
5518                     printf("Attributes: %s\n", sAttr.getStr() );
5519                 }
5520                 if (_nMask == VolumeInfoMask_TotalSpace)
5521                 {
5522                     // within Linux, df / * 1024 bytes is the result
5523                     sal_uInt64 nSize = _aVolumeInfo.getTotalSpace();
5524                     printf("Total space: %lld\n", nSize);
5525                 }
5526                 if (_nMask == VolumeInfoMask_UsedSpace)
5527                 {
5528                     sal_uInt64 nSize = _aVolumeInfo.getUsedSpace();
5529                     printf(" Used space: %lld\n", nSize);
5530                 }
5531                 if (_nMask == VolumeInfoMask_FreeSpace)
5532                 {
5533                     sal_uInt64 nSize = _aVolumeInfo.getFreeSpace();
5534                     printf(" Free space: %lld\n", nSize);
5535                 }
5536                 if (_nMask == VolumeInfoMask_MaxNameLength)
5537                 {
5538                     sal_uInt32 nLength = _aVolumeInfo.getMaxNameLength();
5539                     printf("max name length: %ld\n", nLength);
5540                 }
5541                 if (_nMask == VolumeInfoMask_MaxPathLength)
5542                 {
5543                     sal_uInt32 nLength = _aVolumeInfo.getMaxPathLength();
5544                     printf("max path length: %ld\n", nLength);
5545                 }
5546                 if (_nMask == VolumeInfoMask_FileSystemCaseHandling)
5547                 {
5548                     bool bIsCase = _aVolumeInfo.isCaseSensitiveFileSystem();
5549                     printf("filesystem case sensitive: %s\n", bIsCase ? "yes" : "no");
5550                 }
5551             }
5552 
5553         void checkVolumeInfo(sal_Int32 _nMask)
5554             {
5555                 ::osl::VolumeInfo aVolumeInfo( _nMask );
5556                 //call getVolumeInfo here
5557                 nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo );
5558                 // LLA: IMHO it's not a bug, if VolumeInfo is not valid, it's a feature
5559                 // LLA: ASSERT_TRUE(sal_True == aVolumeInfo.isValid( _nMask )) << "mask is not valid";
5560                 if (aVolumeInfo.isValid( _nMask))
5561                 {
5562                     checkValidMask(aVolumeInfo, _nMask);
5563                 }
5564             }
5565 	};// class getVolumeInfo
5566 
5567     TEST_F(getVolumeInfo, getVolumeInfo_001_1 )
5568     {
5569         sal_Int32 mask = VolumeInfoMask_FileSystemName;
5570         checkVolumeInfo(mask);
5571     }
5572     TEST_F(getVolumeInfo, getVolumeInfo_001_2 )
5573     {
5574         sal_Int32 mask = VolumeInfoMask_Attributes;
5575         checkVolumeInfo(mask);
5576     }
5577     TEST_F(getVolumeInfo, getVolumeInfo_001_3 )
5578     {
5579         sal_Int32 mask = VolumeInfoMask_TotalSpace;
5580         checkVolumeInfo(mask);
5581     }
5582     TEST_F(getVolumeInfo, getVolumeInfo_001_4 )
5583     {
5584         sal_Int32 mask = VolumeInfoMask_UsedSpace;
5585         checkVolumeInfo(mask);
5586     }
5587     TEST_F(getVolumeInfo, getVolumeInfo_001_5 )
5588     {
5589         sal_Int32 mask = VolumeInfoMask_FreeSpace;
5590         checkVolumeInfo(mask);
5591     }
5592     TEST_F(getVolumeInfo, getVolumeInfo_001_6 )
5593     {
5594         sal_Int32 mask = VolumeInfoMask_MaxNameLength;
5595         checkVolumeInfo(mask);
5596     }
5597     TEST_F(getVolumeInfo, getVolumeInfo_001_7 )
5598     {
5599         sal_Int32 mask = VolumeInfoMask_MaxPathLength;
5600         checkVolumeInfo(mask);
5601     }
5602     TEST_F(getVolumeInfo, getVolumeInfo_001_8 )
5603     {
5604         sal_Int32 mask = VolumeInfoMask_FileSystemCaseHandling;
5605         checkVolumeInfo(mask);
5606     }
5607 
5608     TEST_F(getVolumeInfo, getVolumeInfo_002 )
5609     {
5610         sal_Int32 mask = VolumeInfoMask_FileSystemName;
5611         ::osl::VolumeInfo aVolumeInfo( mask );
5612         //call getVolumeInfo here
5613 
5614         // LLA: rtl::OUString aRootSysURL;
5615         // LLA: nError1 = osl::File::getFileURLFromSystemPath(aRootSys, aRootSysURL);
5616         // LLA:
5617         // LLA: ASSERT_TRUE(// LLA:                         ( osl::FileBase::E_NONE == nError1 )) << "can't convert root path to file url";
5618 
5619         nError1 = ::osl::Directory::getVolumeInfo( aRootSys, aVolumeInfo );
5620 
5621         ASSERT_TRUE(( osl::FileBase::E_INVAL == nError1 )) << "test for getVolumeInfo function: use system path as parameter.";
5622     }
5623 
5624     TEST_F(getVolumeInfo, getVolumeInfo_003 )
5625     {
5626         sal_Int32 mask = VolumeInfoMask_FileSystemName;
5627         ::osl::VolumeInfo aVolumeInfo( mask );
5628         //call getVolumeInfo here
5629         nError1 = ::osl::Directory::getVolumeInfo( aTmpName3, aVolumeInfo );
5630 
5631 // LLA: in Windows, it reply no error, it did not pass in (W32).
5632 #ifdef UNX
5633         ASSERT_TRUE(( osl::FileBase::E_NOENT == nError1 )) << "test for getVolumeInfo function: non-existence test. ";
5634 #endif
5635     }
5636 
5637 	//---------------------------------------------------------------------
5638 	// 	testing the method
5639 	// 	inline static RC create( const ::rtl::OUString& ustrDirectoryURL )
5640 	//---------------------------------------------------------------------
5641     class  create : public ::testing::Test
5642 	{
5643 	protected:
5644 		::osl::FileBase::RC     nError1, nError2;
5645 	};// class create
5646 
5647     TEST_F(create, create_001 )
5648     {
5649         //create directory in $TEMP/tmpdir
5650         nError1 = ::osl::Directory::create( aTmpName3 );
5651         //check for existence
5652         nError2 = ::osl::Directory::create( aTmpName3 );
5653         //remove it
5654         deleteTestDirectory( aTmpName3 );
5655 
5656         ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) &&
5657                                 ( osl::FileBase::E_EXIST== nError2 )) << "test for create function: create a directory and check its existence.";
5658     }
5659 
5660     TEST_F(create, create_002 )
5661     {
5662         //create directory in /tmpname
5663         nError1 = ::osl::Directory::create( aTmpName7 );
5664 #if defined (WNT )
5665         nError1 = osl::FileBase::E_ACCES;  /// in Windows, you can create directory in c:/ any way.
5666         deleteTestDirectory( aTmpName7 );
5667 #endif
5668 
5669         ASSERT_TRUE(( osl::FileBase::E_ACCES == nError1 )) << "test for create function: create a directory in root for access test.";
5670     }
5671 
5672     TEST_F(create, create_003 )
5673     {
5674         //create directory in /tmpname
5675         nError1 = ::osl::Directory::create( aSysPath1 );
5676 
5677         ASSERT_TRUE(( osl::FileBase::E_INVAL == nError1 )) << "test for create function: create a directory using system path.";
5678     }
5679 
5680 	//---------------------------------------------------------------------
5681 	// 	testing the method
5682 	// 	inline static RC remove( const ::rtl::OUString& ustrDirectoryURL )
5683 	//---------------------------------------------------------------------
5684     class  DirectoryRemove : public ::testing::Test
5685 	{
5686 	protected:
5687 		::osl::FileBase::RC     nError1, nError2;
5688 	};// class remove
5689 
5690     TEST_F(DirectoryRemove, remove_001 )
5691     {
5692         //create directory in $TEMP/tmpdir
5693         nError1 = ::osl::Directory::create( aTmpName3 );
5694         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5695         //remove it
5696         nError1 = ::osl::Directory::remove( aTmpName3 );
5697         //check for existence
5698         ::osl::Directory rDirectory( aTmpName3 );
5699         nError2 = rDirectory.open( );
5700 
5701         ASSERT_TRUE(( osl::FileBase::E_None == nError1 ) &&
5702                                 ( osl::FileBase::E_NOENT == nError2 )) << "test for remove function: remove a directory and check its existence.";
5703     }
5704 
5705     TEST_F(DirectoryRemove, remove_002 )
5706     {
5707         //create directory in $TEMP/tmpdir
5708         nError1 = ::osl::Directory::create( aTmpName3 );
5709         ASSERT_TRUE( ::osl::FileBase::E_None == nError1 );
5710         //try to remove it by system path
5711         nError1 = ::osl::Directory::remove( aSysPath3 );
5712             //check for existence
5713         ::osl::Directory rDirectory( aTmpName3 );
5714         nError2 = rDirectory.open( );
5715         if ( osl::FileBase::E_NOENT != nError2 )
5716             ::osl::Directory::remove( aTmpName3 );
5717 
5718         ASSERT_TRUE(( osl::FileBase::E_INVAL == nError1 )) << "test for remove function: remove a directory by its system path, and check its existence.";
5719     }
5720 
5721     TEST_F(DirectoryRemove, remove_003 )
5722     {
5723         //try to remove a non-existed directory
5724         nError1 = ::osl::Directory::remove( aTmpName6 );
5725 
5726         ASSERT_TRUE(( osl::FileBase::E_NOENT == nError1 )) << "test for remove function: try to remove a non-existed directory.";
5727     }
5728 
5729     TEST_F(DirectoryRemove, remove_004 )
5730     {
5731         createTestFile( aTmpName6 );
5732         sal_Bool bExist = ifFileExist( aTmpName6 );
5733         //try to remove file.
5734         nError1 = ::osl::Directory::remove( aTmpName6 );
5735         deleteTestFile( aTmpName6 );
5736 
5737         ASSERT_TRUE(bExist == sal_True &&(( osl::FileBase::E_NOTDIR == nError1 ) || ( osl::FileBase::E_NOENT == nError1 ))) << "test for remove function: try to remove a file but not directory.";
5738     }
5739 
5740     TEST_F(DirectoryRemove, remove_005 )
5741     {
5742         createTestDirectory( aTmpName3 );
5743         createTestFile( aTmpName4 );
5744         nError1 = ::osl::Directory::remove( aTmpName3 );
5745         deleteTestFile( aTmpName4 );
5746         deleteTestDirectory( aTmpName3 );
5747         ::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for remove function: try to remove a directory that is not empty.") + errorToStr( nError1 );
5748 #if defined ( SOLARIS )
5749         //on UNX, the implementation uses rmdir(), which EEXIST is thrown on Solaris when the directory is not empty, refer to: 'man -s 2 rmdir', while on linux, ENOTEMPTY is thrown.
5750         //EEXIST The directory contains entries other than those for "." and "..".
5751         printf("#Solaris test\n");
5752         ASSERT_TRUE(( osl::FileBase::E_EXIST == nError1 )) << suError.pData;
5753 #else
5754         ASSERT_TRUE(( osl::FileBase::E_NOTEMPTY == nError1 )) << suError.pData;
5755 #endif
5756     }
5757 
5758     //########################################
5759     // TEST Directory::createPath
5760     //########################################
5761 
5762 	#ifdef WNT
5763     #   define PATH_BUFFER_SIZE MAX_PATH
5764     #else
5765     #   define PATH_BUFFER_SIZE PATH_MAX
5766     #endif
5767 
5768     char TEST_PATH_POSTFIX[] = "hello/world";
5769 
5770     //########################################
5771     OUString get_test_path()
5772     {
5773         OUString tmp;
5774         FileBase::RC rc = FileBase::getTempDirURL(tmp);
5775 
5776         EXPECT_TRUE(rc == FileBase::E_None) << "Test path creation failed";
5777 
5778         OUStringBuffer b(tmp);
5779         if (tmp.lastIndexOf('/') != (tmp.getLength() - 1))
5780             b.appendAscii("/");
5781 
5782         b.appendAscii(TEST_PATH_POSTFIX);
5783 
5784         return b.makeStringAndClear();
5785     }
5786 
5787     //########################################
5788     void rm_test_path(const OUString& path)
5789     {
5790         sal_Unicode buffer[PATH_BUFFER_SIZE];
5791         rtl_copyMemory(buffer, path.getStr(), (path.getLength() + 1) * sizeof(sal_Unicode));
5792 
5793         sal_Int32 i = rtl_ustr_lastIndexOfChar(buffer, '/');
5794         if (i == path.getLength())
5795             buffer[i] = 0;
5796 
5797         Directory::remove(buffer);
5798 
5799         i = rtl_ustr_lastIndexOfChar(buffer, '/');
5800         buffer[i] = 0;
5801         Directory::remove(buffer);
5802     }
5803 
5804     //########################################
5805     class DirCreatedObserver : public DirectoryCreationObserver
5806     {
5807     public:
5808         DirCreatedObserver() : i(0)
5809         {
5810         }
5811 
5812         virtual void DirectoryCreated(const rtl::OUString& /*aDirectoryUrl*/)
5813         {
5814 			i++;
5815 		};
5816 
5817 	    int number_of_dirs_created() const
5818 	    {
5819 	        return i;
5820 	    }
5821 
5822 	private:
5823 		    int i;
5824     };
5825 
5826 
5827     //########################################
5828     class createPath : public ::testing::Test
5829     {
5830     public:
5831         //##########################################
5832         createPath()
5833         {}
5834 
5835 #ifdef WNT
5836 
5837         //##########################################
5838         char* get_unused_drive_letter()
5839         {
5840             static char m_aBuff[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
5841 
5842             DWORD ld = GetLogicalDrives();
5843             DWORD i = 4;
5844             DWORD j = 2;
5845 
5846             while ((ld & i) && (i > 1))
5847             { i = i << 1; j++; }
5848 
5849             if (i > 2)
5850                 return m_aBuff + j;
5851 
5852             return NULL;
5853         }
5854 
5855 
5856 #endif /* WNT */
5857     }; // class createPath
5858 
5859 #ifdef WNT
5860     //##########################################
5861     TEST_F(createPath, at_invalid_logical_drive)
5862     {
5863         char* drv = get_unused_drive_letter();
5864         char buff[PATH_BUFFER_SIZE];
5865         rtl_zeroMemory(buff, sizeof(buff));
5866 
5867         strncpy(buff, drv, 1);
5868         strcat(buff, ":\\");
5869         strcat(buff, TEST_PATH_POSTFIX);
5870 
5871         OUString path = OUString::createFromAscii(buff);
5872         OUString tp_url;
5873         FileBase::getFileURLFromSystemPath(path, tp_url);
5874 
5875         FileBase::RC rc = Directory::createPath(tp_url);
5876 
5877         ASSERT_TRUE(rc != FileBase::E_None) << "osl_createDirectoryPath doesn't fail on unused logical drive letters";
5878     }
5879 
5880     //##########################################
5881     // adapt the UNC path in method createDirectoryPath_with_UNC_path
5882     // in order to run this test successfully
5883 #if 0
5884     TEST_F(createPath, with_UNC_path)
5885     {
5886 
5887         OUString tp_unc = OUString::createFromAscii("\\\\Tra-1\\TRA_D\\hello\\world\\");
5888         OUString tp_url;
5889         FileBase::getFileURLFromSystemPath(tp_unc, tp_url);
5890 
5891         FileBase::RC rc = Directory::createPath(tp_url);
5892 
5893         ASSERT_TRUE(rc == FileBase::E_None) << "osl_createDirectoryPath fails with UNC path";
5894     }
5895 #endif
5896 #endif
5897 
5898     //##########################################
5899     TEST_F(createPath, with_relative_path)
5900     {
5901         FileBase::RC rc = Directory::createPath(
5902             OUString::createFromAscii(TEST_PATH_POSTFIX));
5903 
5904         ASSERT_TRUE(rc == FileBase::E_INVAL) << "osl_createDirectoryPath contract broken";
5905     }
5906 
5907     //##########################################
5908     TEST_F(createPath, without_callback)
5909     {
5910         OUString tp_url = get_test_path();
5911 
5912         rm_test_path(tp_url);
5913 
5914         FileBase::RC rc = Directory::createPath(tp_url);
5915 
5916         ASSERT_TRUE(rc == FileBase::E_None) << "osl_createDirectoryPath failed";
5917     }
5918 
5919     //##########################################
5920     TEST_F(createPath, with_callback)
5921     {
5922         OUString tp_url = get_test_path();
5923 
5924         rm_test_path(tp_url);
5925 
5926         DirCreatedObserver* observer = new DirCreatedObserver;
5927         FileBase::RC rc = Directory::createPath(tp_url, observer);
5928         int nDirs = observer->number_of_dirs_created();
5929         delete observer;
5930         ASSERT_TRUE((rc == FileBase::E_None) && (nDirs > 0)) << "osl_createDirectoryPath failed";
5931 
5932     }
5933 
5934 }// namespace osl_Directory
5935 
5936 
5937 // -----------------------------------------------------------------------------
5938 // this macro creates an empty function, which will called by the RegisterAllFunctions()
5939 // to let the user the possibility to also register some functions by hand.
5940 // -----------------------------------------------------------------------------
5941 
5942 /// NOADDITIONAL;
5943 
5944 
5945 
5946 /** get Current PID.
5947 */
5948 inline ::rtl::OUString getCurrentPID(  )
5949 {
5950 	//~ Get current PID and turn it into OUString;
5951 	int nPID = 0;
5952 #ifdef WNT
5953 	nPID = GetCurrentProcessId();
5954 #else
5955 	nPID = getpid();
5956 #endif
5957 	return ( ::rtl::OUString::valueOf( ( long )nPID ) );
5958 }
5959 
5960 
5961 /** Insert Current PID to the URL to avoid access violation between multiuser execution.
5962 */
5963 inline void insertPID( ::rtl::OUString & pathname )
5964 {
5965 	//~ check if the path contain the temp directory, do nothing changes if not;
5966 	if ( pathname.indexOf( aTempDirectoryURL ) && pathname.indexOf( aTempDirectorySys ) )
5967 		return;
5968 
5969 	//~ format pathname to TEMP/USERPID/URL style;
5970 	if ( !pathname.indexOf( aTempDirectoryURL ) )
5971 	{
5972 		::rtl::OUString strPID( getCurrentPID( ) );
5973 		::rtl::OUString pathLeft = aTempDirectoryURL.copy( 0 );
5974 		::rtl::OUString pathRight = pathname.copy( aTempDirectoryURL.getLength( ) );
5975 		pathname = pathLeft.copy( 0 );
5976 		( ( pathname += aSlashURL ) += strPID ) += pathRight;
5977 	}
5978 	else
5979 	{
5980 		::rtl::OUString strPID( getCurrentPID( ) );
5981 		::rtl::OUString pathLeft = aTempDirectorySys.copy( 0 );
5982 		::rtl::OUString pathRight = pathname.copy( aTempDirectorySys.getLength( ) );
5983 		pathname = pathLeft.copy( 0 );
5984 		( ( pathname += aSlashURL ) += strPID ) += pathRight;
5985 	}
5986 
5987 
5988 }
5989 
5990 int main(int argc, char **argv)
5991 {
5992 	printf( "Initializing..." );
5993 
5994 	//~ make sure the c:\temp exist, if not, create it.
5995 #if ( defined WNT )
5996 	if ( checkDirectory( aTempDirectoryURL, osl_Check_Mode_Exist )  != sal_True ) {
5997 		printf( "\n#C:\\temp is not exist, now creating\n" );
5998 		createTestDirectory( aTempDirectoryURL );
5999 	};
6000 #endif
6001 
6002 	//~ make sure the c:\temp\PID or /tmp/PID exist, if not, create it. initialize the user directory.
6003 	( aUserDirectoryURL += aSlashURL ) += getCurrentPID( );
6004 	( aUserDirectorySys += aSlashURL ) += getCurrentPID( );
6005 
6006 	if ( checkDirectory( aUserDirectoryURL, osl_Check_Mode_Exist )  != sal_True ) {
6007 		createTestDirectory( aUserDirectoryURL );
6008 	}
6009 
6010 	//~ adapt all URL to the TEMP/USERPID/URL format;
6011 	insertPID( aCanURL1 );
6012 	insertPID( aTmpName3 );
6013 	insertPID( aTmpName4 );
6014 	insertPID( aTmpName5 );
6015 	insertPID( aTmpName6 );
6016 	insertPID( aTmpName8 );
6017 	insertPID( aTmpName9 );
6018 	insertPID( aLnkURL1 );
6019 	insertPID( aFifoSys );
6020 	insertPID( aSysPath1 );
6021 	insertPID( aSysPath2 );
6022 	insertPID( aSysPath3 );
6023 	insertPID( aSysPath4 );
6024 
6025 	printf( "Done.\n" );
6026 
6027 	 ::testing::InitGoogleTest(&argc, argv);
6028     return RUN_ALL_TESTS();
6029 }
6030 
6031 
6032 //~ do some clean up work after all test completed.
6033 class GlobalObject
6034 {
6035 	public:
6036 	~GlobalObject()
6037 	{
6038         try
6039         {
6040             //~ make sure the c:\temp\PID or /tmp/PID exist, if yes, delete it.
6041             printf( "\n#Do some clean-ups ...\n" );
6042             if ( checkDirectory( aUserDirectoryURL, osl_Check_Mode_Exist )  == sal_True ) {
6043                 deleteTestDirectory( aUserDirectoryURL );
6044             }
6045 
6046             // LLA: printf("after deleteTestDirectory\n");
6047             //~ special clean up task in Windows and Unix separately;
6048 #if ( defined UNX ) || ( defined OS2 )
6049             //~ some clean up task  for UNIX OS
6050             ;
6051 #else
6052             //~ some clean up task  for Windows OS
6053             //~ check if some files are in the way, remove them if necessary.
6054             if ( ifFileExist( aTmpName6 )  == sal_True )
6055                 deleteTestFile( aTmpName6 );
6056             if ( ifFileExist( aTmpName4 )  == sal_True )
6057                 deleteTestFile( aTmpName4 );
6058             if ( checkDirectory( aTmpName4, osl_Check_Mode_Exist )  == sal_True )
6059                 deleteTestDirectory( aTmpName4 );
6060             if ( ifFileExist( aTmpName3 )  == sal_True )
6061                 deleteTestFile( aTmpName3 );
6062             if ( checkDirectory( aTmpName3, osl_Check_Mode_Exist )  == sal_True )
6063                 deleteTestDirectory( aTmpName3 );
6064 
6065             ::rtl::OUString aUStr( aUserDirectoryURL );
6066             concatURL( aUStr, aHidURL1 );
6067             if ( ifFileExist( aUStr )  == sal_True )
6068                 deleteTestFile( aUStr );
6069 
6070             ::rtl::OUString aUStr1( aRootURL );
6071             concatURL( aUStr1, aTmpName2 );
6072             if ( ifFileExist( aUStr1 )  == sal_True )
6073                 deleteTestFile( aUStr1 );
6074 #endif
6075 
6076         }
6077         catch (...)
6078         {
6079             printf("Exception caught (...) in GlobalObject dtor()\n");
6080         }
6081     }
6082 };
6083 
6084 GlobalObject theGlobalObject;
6085