diff options
Diffstat (limited to 'sal/qa/osl/file')
-rw-r--r-- | sal/qa/osl/file/makefile.mk | 85 | ||||
-rw-r--r-- | sal/qa/osl/file/osl_File.cxx | 6856 | ||||
-rw-r--r-- | sal/qa/osl/file/osl_File_Const.h | 242 | ||||
-rw-r--r-- | sal/qa/osl/file/osl_old_test_file.cxx | 273 | ||||
-rwxr-xr-x | sal/qa/osl/file/test_cpy_wrt_file.cxx | 111 |
5 files changed, 7567 insertions, 0 deletions
diff --git a/sal/qa/osl/file/makefile.mk b/sal/qa/osl/file/makefile.mk new file mode 100644 index 000000000000..e13de9f5d5af --- /dev/null +++ b/sal/qa/osl/file/makefile.mk @@ -0,0 +1,85 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=..$/..$/.. + +PRJNAME=sal +TARGET=qa_osl_file + +ENABLE_EXCEPTIONS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +CFLAGS+= $(LFS_CFLAGS) +CXXFLAGS+= $(LFS_CFLAGS) + +# --- BEGIN -------------------------------------------------------- +SHL1OBJS= \ + $(SLO)$/osl_File.obj +SHL1TARGET= osl_File +SHL1STDLIBS= $(SALLIB) $(CPPUNITLIB) $(TESTSHL2LIB) + +SHL1IMPLIB= i$(SHL1TARGET) + +DEF1NAME =$(SHL1TARGET) +SHL1VERSIONMAP = $(PRJ)$/qa$/export.map + +#------------------------------------------------------------------- + +SHL2OBJS=$(SLO)$/test_cpy_wrt_file.obj +SHL2TARGET=tcwf +SHL2STDLIBS= $(SALLIB) $(CPPUNITLIB) $(TESTSHL2LIB) +SHL2IMPLIB=i$(SHL2TARGET) +SHL2DEF=$(MISC)$/$(SHL2TARGET).def +SHL2VERSIONMAP = $(PRJ)$/qa$/export.map +DEF2NAME =$(SHL2TARGET) + + +# END -------------------------------------------------------------- + +# --- BEGIN -------------------------------------------------------- +SHL3OBJS= \ + $(SLO)$/osl_old_test_file.obj +SHL3TARGET= osl_old_test_file +SHL3STDLIBS= $(SALLIB) $(CPPUNITLIB) $(TESTSHL2LIB) + +SHL3IMPLIB= i$(SHL3TARGET) + +DEF3NAME =$(SHL3TARGET) +SHL3VERSIONMAP = $(PRJ)$/qa$/export.map +# END -------------------------------------------------------------- + +#------------------------------- All object files ------------------------------- +# do this here, so we get right dependencies +SLOFILES=$(SHL1OBJS) + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk +.INCLUDE : _cppunit.mk diff --git a/sal/qa/osl/file/osl_File.cxx b/sal/qa/osl/file/osl_File.cxx new file mode 100644 index 000000000000..1450d49874bd --- /dev/null +++ b/sal/qa/osl/file/osl_File.cxx @@ -0,0 +1,6856 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sal.hxx" + +//------------------------------------------------------------------------ +// include files +//------------------------------------------------------------------------ +#include <sal/types.h> +#include <rtl/ustring.hxx> +#include <rtl/ustrbuf.hxx> + +#include "osl/thread.h" + +#include "rtl/ustrbuf.hxx" +#include <osl/file.hxx> +#include <osl_File_Const.h> + +#include <testshl/simpleheader.hxx> + +// #ifdef WNT +// # define UNICODE +// # define WIN32_LEAN_AND_MEAN +// # include <windows.h> +// # include <tchar.h> +// #endif + + +using namespace osl; +using namespace rtl; + +//------------------------------------------------------------------------ +// helper functions +//------------------------------------------------------------------------ + +/** detailed wrong message. +*/ +inline ::rtl::OString errorToString( const ::osl::FileBase::RC _nError ) +{ + ::rtl::OString sResult; + switch ( _nError ) { + case ::osl::FileBase::E_None: + sResult = "Success"; + break; + case ::osl::FileBase::E_PERM: + sResult = "Operation not permitted"; + break; + case ::osl::FileBase::E_NOENT: + sResult = "No such file or directory"; + break; + case ::osl::FileBase::E_EXIST: + sResult = "Already Exist"; + break; + case ::osl::FileBase::E_ACCES: + sResult = "Permission denied"; + break; + case ::osl::FileBase::E_INVAL: + sResult = "The format of the parameters was not valid"; + break; + case ::osl::FileBase::E_NOTDIR: + sResult = "Not a directory"; + break; + case ::osl::FileBase::E_ISDIR: + sResult = "Is a directory"; + break; + case ::osl::FileBase::E_BADF: + sResult = "Bad file"; + break; + case ::osl::FileBase::E_NOTEMPTY: + sResult = "The directory is not empty"; + break; + default: + sResult = "Unknown Error"; + break; + } + return sResult; +} + +rtl::OUString errorToStr( ::osl::FileBase::RC const& nError) +{ + rtl::OUStringBuffer suBuf; + suBuf.append( rtl::OUString::createFromAscii("The returned error is: ") ); + suBuf.append( rtl::OStringToOUString(errorToString(nError), RTL_TEXTENCODING_ASCII_US) ); + suBuf.append( rtl::OUString::createFromAscii("!\n") ); + return suBuf.makeStringAndClear(); +} + +/** print a file type name. +*/ +inline void printFileType( const ::osl::FileStatus::Type nType ) +{ + t_print( "#printFileType# " ); + switch ( nType ) { + case ::osl::FileStatus::Directory: + t_print( "This file is a: Directory.\n" ); + break; + case ::osl::FileStatus::Volume: + t_print( "This file is a: volume device.\n" ); + break; + case ::osl::FileStatus::Regular: + t_print( "This file is a: regular file.\n" ); + break; + case ::osl::FileStatus::Fifo: + t_print( "This file is a: fifo.\n" ); + break; + case ::osl::FileStatus::Socket: + t_print( "This file is a: socket.\n" ); + break; + case ::osl::FileStatus::Link: + t_print( "This file is a: link file.\n" ); + break; + case ::osl::FileStatus::Special: + t_print( "This file is a: special.\n" ); + break; + case ::osl::FileStatus::Unknown: + t_print( "The file type is unknown %d \n", nType ); + break; + } +} + +/** print a file attributes. +*/ +inline void printFileAttributes( const sal_Int64 nAttributes ) +{ + t_print( "#printFileAttributes# This file is a: (" ); + if ( ( nAttributes | Attribute_ReadOnly ) == nAttributes ) + t_print( " ReadOnly " ); + if ( ( nAttributes | Attribute_Hidden ) == nAttributes ) + t_print( " Hidden " ); + if ( ( nAttributes | Attribute_Executable ) == nAttributes ) + t_print( " Executable " ); + if ( ( nAttributes | Attribute_GrpWrite ) == nAttributes ) + t_print( " GrpWrite " ); + if ( ( nAttributes | Attribute_GrpRead ) == nAttributes ) + t_print( " GrpRead " ); + if ( ( nAttributes | Attribute_GrpExe ) == nAttributes ) + t_print( " GrpExe " ); + if ( ( nAttributes | Attribute_OwnWrite ) == nAttributes ) + t_print( " OwnWrite " ); + if ( ( nAttributes | Attribute_OwnRead ) == nAttributes ) + t_print( " OwnRead " ); + if ( ( nAttributes | Attribute_OwnExe ) == nAttributes ) + t_print( " OwnExe " ); + if ( ( nAttributes | Attribute_OthWrite ) == nAttributes ) + t_print( " OthWrite " ); + if ( ( nAttributes | Attribute_OthRead ) == nAttributes ) + t_print( " OthRead " ); + if ( ( nAttributes | Attribute_OthExe ) == nAttributes ) + t_print( " OthExe " ); + t_print( ") file!\n" ); +} + +/** print a UNI_CODE file name. +*/ +inline void printFileName( const ::rtl::OUString & str ) +{ + rtl::OString aString; + + t_print( "#printFileName_u# " ); + aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ); + t_print( "%s\n", aString.getStr( ) ); +} + +/** print a ASCII_CODE file name. +*/ +inline void printFileName( const sal_Char * str ) +{ + t_print( "#printFileName_a# " ); + t_print( "%s\n", str ); +} + +/** print an output wrong message. +*/ +inline void printError( const ::osl::FileBase::RC nError ) +{ + t_print( "#printError# " ); + printFileName( errorToStr(nError) ); +} + +/** print an signed Integer Number. +*/ +inline void printInt( sal_Int64 i ) +{ + t_print( "#printInt_i64# " ); + t_print( "The Integer64 is %lld\n", i); +} + +/** print an unsigned Integer Number. +*/ +inline void printInt( sal_uInt64 i ) +{ + t_print( "#printInt_u64# " ); + t_print( "The unsigned Integer64 is %llu\n", i); +} + +/** print Boolean value. +*/ +inline void printBool( sal_Bool bOk ) +{ + t_print( "#printBool# " ); + ( sal_True == bOk ) ? t_print( "YES!\n" ): t_print( "NO!\n" ); +} + +/** print struct TimeValue in local time format. +*/ +inline void printTime( TimeValue *tv ) +{ + oslDateTime *pDateTime = ( oslDateTime* )malloc( sizeof( oslDateTime ) ) ; + CPPUNIT_ASSERT_MESSAGE( "Error in printTime() function,malloc ", pDateTime != NULL ); + TimeValue *pLocalTV = ( TimeValue* )malloc( sizeof( TimeValue ) ); + CPPUNIT_ASSERT_MESSAGE( "Error in printTime() function,malloc ", pLocalTV != NULL ); + + CPPUNIT_ASSERT_MESSAGE( "Error in printTime() function,osl_getLocalTimeFromSystemTime ",sal_True == osl_getLocalTimeFromSystemTime( tv, pLocalTV ) ); + CPPUNIT_ASSERT_MESSAGE( "Error in printTime() function,osl_gepDateTimeFromTimeValue ",sal_True == osl_getDateTimeFromTimeValue( pLocalTV, pDateTime ) ); + + t_print( "#printTime# " ); + t_print( " Time is: %d/%d/%d ", pDateTime->Month, pDateTime->Day, pDateTime->Year); + switch ( pDateTime->DayOfWeek ) + { + case 0: t_print("Sun. "); break; + case 1: t_print("Mon. "); break; + case 2: t_print("Tue. "); break; + case 3: t_print("Thr. "); break; + case 4: t_print("Wen. "); break; + case 5: t_print("Fri. "); break; + case 6: t_print("Sat. "); break; + } + t_print( " %d:%d:%d %d nsecs\n", pDateTime->Hours, pDateTime->Minutes, pDateTime->Seconds, pDateTime->NanoSeconds); + + free( pDateTime ); + free( pLocalTV ); +} + +/** compare two TimeValue, unit is "ms", since Windows time precision is better than UNX. +*/ + +#if ( defined UNX ) || ( defined OS2 ) //precision of time in Windows is better than UNX +# define delta 2000 //time precision, 2000ms +#else +# define delta 1800 //time precision, 1.8s +#endif + +inline sal_Int64 t_abs64(sal_Int64 _nValue) +{ + // std::abs() seems to have some ambiguity problems (so-texas) + // return abs(_nValue); + t_print("t_abs64(%ld)\n", _nValue); + // CPPUNIT_ASSERT(_nValue < 2147483647); + + if (_nValue < 0) + { + _nValue = -_nValue; + } + return _nValue; +} + +inline sal_Bool t_compareTime( TimeValue *m_aEndTime, TimeValue *m_aStartTime, sal_Int32 nDelta) +{ + // sal_uInt64 uTimeValue; + // sal_Int64 iTimeValue; + // + // iTimeValue = t_abs64(( tv1->Seconds - tv2->Seconds) * 1000000000 + tv1->Nanosec - tv2->Nanosec); + // uTimeValue = ( iTimeValue / 1000000 ); + + sal_Int32 nDeltaSeconds = m_aEndTime->Seconds - m_aStartTime->Seconds; + sal_Int32 nDeltaNanoSec = sal_Int32(m_aEndTime->Nanosec) - sal_Int32(m_aStartTime->Nanosec); + if (nDeltaNanoSec < 0) + { + nDeltaNanoSec = 1000000000 + nDeltaNanoSec; + nDeltaSeconds--; + } + + sal_Int32 nDeltaMilliSec = (nDeltaSeconds * 1000) + (nDeltaNanoSec / 1000000); + return ( nDeltaMilliSec < nDelta ); +} + +/** compare two OUString file name. +*/ +inline sal_Bool compareFileName( const ::rtl::OUString & ustr1, const ::rtl::OUString & ustr2 ) +{ + sal_Bool bOk; +//on Windows, the seperatar is '\', so here change to '/', then compare +#if defined (WNT ) + ::rtl::OUString ustr1new,ustr2new; + sal_Unicode reverseSlash = (sal_Unicode)'\\'; + + if (ustr1.lastIndexOf(reverseSlash) != -1) + ustr1new = ustr1.replace(reverseSlash,(sal_Unicode)'/'); + else + ustr1new = ustr1; + if (ustr2.lastIndexOf(reverseSlash) != -1) + ustr2new = ustr2.replace(reverseSlash,(sal_Unicode)'/'); + else + ustr2new = ustr2; + bOk = ustr1new.equalsIgnoreAsciiCase( ustr2new ) ; +#else + bOk = ustr1.equalsIgnoreAsciiCase( ustr2 ); +#endif + return bOk; +} + +/** compare a OUString and an ASCII file name. +*/ +inline sal_Bool compareFileName( const ::rtl::OUString & ustr, const sal_Char *astr ) +{ + (void)ustr; + ::rtl::OUString ustr1 = rtl::OUString::createFromAscii( astr ); + sal_Bool bOk = ustr1.equalsIgnoreAsciiCase( ustr1 ); + + return bOk; +} + +/** simple version to judge if a file name or directory name is a URL or a system path, just to see if it + is start with "file:///";. +*/ +inline sal_Bool isURL( const sal_Char *pathname ) +{ + return ( 0 == strncmp( pathname, FILE_PREFIX, sizeof( FILE_PREFIX ) - 1 ) ); +} + +/** simple version to judge if a file name or directory name is a URL or a system path, just to see if it + is start with "file:///";. +*/ +inline sal_Bool isURL( const ::rtl::OUString pathname ) +{ + return ( ( pathname.indexOf( aPreURL ) == 0 ) ? sal_True : sal_False ); +} + +/** concat two part to form a URL or system path, add PATH_SEPERATOR between them if necessary, add "file:///" to begining if necessary. +*/ +inline void concatURL( ::rtl::OUString & pathname1, const ::rtl::OUString & pathname2 ) +{ + //check if pathname1 is full qualified URL; + if ( !isURL( pathname1 ) ) + { + ::rtl::OUString aPathName = pathname1.copy( 0 ); + ::osl::FileBase::getFileURLFromSystemPath( pathname1, aPathName ); //convert if not full qualified URL + pathname1 = aPathName.copy( 0 ); + } + + sal_Int32 index = 0; + //check if '/' is in the end of pathname1 or at the begin of pathname2; + if ( ( ( index = pathname1.lastIndexOf( aSlashURL ) ) != ( pathname1.getLength( ) - 1 ) ) && + ( ( index = pathname2.indexOf( aSlashURL ) ) != 0 ) ) + pathname1 += aSlashURL; + pathname1 += pathname2; +} + +/** create a temp test file using OUString name of full qualified URL or system path. +*/ +inline void createTestFile( const ::rtl::OUString filename ) +{ + ::rtl::OUString aPathURL = filename.copy( 0 ); + ::osl::FileBase::RC nError; + + if ( !isURL( filename ) ) + ::osl::FileBase::getFileURLFromSystemPath( filename, aPathURL ); //convert if not full qualified URL + + //::std::auto_ptr<File> pFile( new File( aPathURL ) ); + File aFile(aPathURL); + //nError = pFile->open( OpenFlag_Read | OpenFlag_Write | OpenFlag_Create ); + nError = aFile.open( OpenFlag_Read | OpenFlag_Write | OpenFlag_Create ); + //CPPUNIT_ASSERT_MESSAGE( "In createTestFile Function: creation ", ( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_EXIST ) ); + if ( ( ::osl::FileBase::E_None != nError ) && ( nError != ::osl::FileBase::E_EXIST )) + { + t_print("createTestFile failed!\n"); + } + aFile.close(); + +} + +/** create a temp test file using OUString name of full qualified URL or system path in a base directory. +*/ +inline void createTestFile( const ::rtl::OUString basename, const ::rtl::OUString filename ) +{ + ::rtl::OUString aBaseURL = basename.copy( 0 ); + + concatURL( aBaseURL, filename ); + createTestFile( aBaseURL ); +} + +/** detete a temp test file using OUString name. +*/ +inline void deleteTestFile( const ::rtl::OUString filename ) +{ + // LLA: t_print("deleteTestFile\n"); + ::rtl::OUString aPathURL = filename.copy( 0 ); + ::osl::FileBase::RC nError; + + if ( !isURL( filename ) ) + ::osl::FileBase::getFileURLFromSystemPath( filename, aPathURL ); //convert if not full qualified URL + + nError = ::osl::File::setAttributes( aPathURL, Attribute_GrpWrite| Attribute_OwnWrite| Attribute_OthWrite ); // if readonly, make writtenable. + CPPUNIT_ASSERT_MESSAGE( "In deleteTestFile Function: set writtenable ", ( ::osl::FileBase::E_None == nError ) || ( ::osl::FileBase::E_NOENT == nError ) ); + + nError = ::osl::File::remove( aPathURL ); + CPPUNIT_ASSERT_MESSAGE( "In deleteTestFile Function: remove ", ( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_NOENT ) ); +} + +/** delete a temp test file using OUString name of full qualified URL or system path in a base directory. +*/ +inline void deleteTestFile( const ::rtl::OUString basename, const ::rtl::OUString filename ) +{ + ::rtl::OUString aBaseURL = basename.copy( 0 ); + + concatURL( aBaseURL, filename ); + deleteTestFile( aBaseURL ); +} + +/** create a temp test directory using OUString name of full qualified URL or system path. +*/ +inline void createTestDirectory( const ::rtl::OUString dirname ) +{ + ::rtl::OUString aPathURL = dirname.copy( 0 ); + ::osl::FileBase::RC nError; + + if ( !isURL( dirname ) ) + ::osl::FileBase::getFileURLFromSystemPath( dirname, aPathURL ); //convert if not full qualified URL + nError = ::osl::Directory::create( aPathURL ); + //CPPUNIT_ASSERT_MESSAGE( "In createTestDirectory Function: creation: ", ( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_EXIST ) ); + if ( ( ::osl::FileBase::E_None != nError ) && ( nError != ::osl::FileBase::E_EXIST )) + t_print("createTestDirectory failed!\n"); +} + +/** create a temp test directory using OUString name of full qualified URL or system path in a base directory. +*/ +inline void createTestDirectory( const ::rtl::OUString basename, const ::rtl::OUString dirname ) +{ + ::rtl::OUString aBaseURL = basename.copy( 0 ); + ::rtl::OString aString; + + concatURL( aBaseURL, dirname ); + createTestDirectory( aBaseURL ); +} + +/** delete a temp test directory using OUString name of full qualified URL or system path. +*/ +inline void deleteTestDirectory( const ::rtl::OUString dirname ) +{ + // LLA: t_print("deleteTestDirectory\n"); + ::rtl::OUString aPathURL = dirname.copy( 0 ); + ::osl::FileBase::RC nError; + // LLA: printFileName(aPathURL); + if ( !isURL( dirname ) ) + ::osl::FileBase::getFileURLFromSystemPath( dirname, aPathURL ); //convert if not full qualified URL + + ::osl::Directory testDir( aPathURL ); + if ( testDir.isOpen( ) == sal_True ) + { + // LLA: t_print("#close Dir\n"); + testDir.close( ); //close if still open. + } + + nError = ::osl::Directory::remove( aPathURL ); + // LLA: printError(nError); + // LLA: if (( ::osl::FileBase::E_None == nError )) + // LLA: { + // LLA: t_print("nError == E_None\n"); + // LLA: } + // LLA: else if ( ( nError == ::osl::FileBase::E_NOENT )) + // LLA: { + // LLA: t_print("nError == E_NOENT\n"); + // LLA: } + // LLA: else + // LLA: { + // LLA: // t_print("nError == %d\n", nError); + // LLA: } + rtl::OUString strError = rtl::OUString::createFromAscii( "In deleteTestDirectory function: remove Directory "); + strError += aPathURL; + CPPUNIT_ASSERT_MESSAGE( strError, ( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_NOENT ) ); + // LLA: if (! ( ::osl::FileBase::E_None == nError ) || ( nError == ::osl::FileBase::E_NOENT )) + // LLA: { + // LLA: t_print("In deleteTestDirectory function: remove\n"); + // LLA: } +} + +/** delete a temp test directory using OUString name of full qualified URL or system path in a base directory. +*/ +inline void deleteTestDirectory( const ::rtl::OUString basename, const ::rtl::OUString dirname ) +{ + ::rtl::OUString aBaseURL = basename.copy( 0 ); + + concatURL( aBaseURL, dirname ); + deleteTestDirectory( aBaseURL ); +} + + +/** Check for the file and directory access right. +*/ +typedef enum { + osl_Check_Mode_Exist, + osl_Check_Mode_OpenAccess, + osl_Check_Mode_ReadAccess, + osl_Check_Mode_WriteAccess +} oslCheckMode; + +// not used here +inline sal_Bool checkFile( const ::rtl::OUString & str, oslCheckMode nCheckMode ) +{ + ::osl::FileBase::RC nError1, nError2; + ::osl::File testFile( str ); + sal_Bool bCheckResult; + + bCheckResult = sal_False; + nError1 = testFile.open ( OpenFlag_Read ); + if ( ( ::osl::FileBase::E_NOENT != nError1 ) && ( ::osl::FileBase::E_ACCES != nError1 ) ){ + + switch ( nCheckMode ) { + case osl_Check_Mode_Exist: + /// check if the file is exist. + if ( ::osl::FileBase::E_None == nError1 ) + bCheckResult = sal_True; + break; + case osl_Check_Mode_OpenAccess: + /// check if the file is openable. + if ( ::osl::FileBase::E_None == nError1 ) + bCheckResult = sal_True; + break; + case osl_Check_Mode_WriteAccess: + /// check the file name and whether it can be write. + /// write chars into the file. + //testFile.close( ); + //testFile.open( OpenFlag_Write ); + sal_uInt64 nCount_write; + nError2 = testFile.write( pBuffer_Char, 10, nCount_write ); + if ( ::osl::FileBase::E_None == nError2 ) + bCheckResult = sal_True; + break; + + default: + bCheckResult = sal_False; + }/// swith + + nError2 = testFile.close( ); + CPPUNIT_ASSERT_MESSAGE( " in CheckFile() function, close file ", nError2 == FileBase::E_None ); + + } + + return bCheckResult; +} + +//check if the file exist +inline sal_Bool ifFileExist( const ::rtl::OUString & str ) +{ + sal_Bool bCheckResult = sal_False; + +/*#ifdef WNT + ::rtl::OUString aUStr = str.copy( 0 ); + if ( isURL( str ) ) + ::osl::FileBase::getSystemPathFromFileURL( str, aUStr ); + + ::rtl::OString aString = ::rtl::OUStringToOString( aUStr, RTL_TEXTENCODING_ASCII_US ); + const char *path = aString.getStr( ); + if (( _access( path, 0 ) ) != -1 ) + bCheckResult = sal_True; +#else*/ + ::rtl::OString aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ); + // const char *path = aString.getStr( ); + ::osl::File testFile( str ); + bCheckResult = ( osl::FileBase::E_None == testFile.open( OpenFlag_Read ) ); + //if (bCheckResult) + //t_print("%s exist!\n", path); + //else + //t_print("%s not exist!\n", path); +//#endif + return bCheckResult; + +} + +//check if the file can be writen +inline sal_Bool ifFileCanWrite( const ::rtl::OUString & str ) +{ + sal_Bool bCheckResult = sal_False; + //on Windows, the file has no write right, but can be written +#ifdef WNT + ::rtl::OUString aUStr = str.copy( 0 ); + if ( isURL( str ) ) + ::osl::FileBase::getSystemPathFromFileURL( str, aUStr ); + + ::rtl::OString aString = ::rtl::OUStringToOString( aUStr, RTL_TEXTENCODING_ASCII_US ); + const char *path = aString.getStr( ); + if (( _access( path, 2 ) ) != -1 ) + bCheckResult = sal_True; + //on UNX, just test if open success with OpenFlag_Write +#else + ::osl::File testFile( str ); + bCheckResult = (osl::FileBase::E_None == testFile.open( OpenFlag_Write )); +#endif + return bCheckResult; +} + +inline sal_Bool checkDirectory( const ::rtl::OUString & str, oslCheckMode nCheckMode ) +{ + rtl::OUString aUString; + DirectoryItem rItem; + FileBase::RC rc; + sal_Bool bCheckResult= sal_False; + + //::std::auto_ptr<Directory> pDir( new Directory( str ) ); + Directory aDir( str ); + rc = aDir.open( ); + + if ( ( ::osl::FileBase::E_NOENT != rc ) && ( ::osl::FileBase::E_ACCES != rc ) ){ + + switch ( nCheckMode ) { + case osl_Check_Mode_Exist: + if ( rc == ::osl::FileBase::E_None ) + bCheckResult = sal_True; + break; + case osl_Check_Mode_OpenAccess: + if ( rc == ::osl::FileBase::E_None ) + bCheckResult = sal_True; + break; + case osl_Check_Mode_ReadAccess: + //rc = pDir->getNextItem( rItem, 0 ); + rc = aDir.getNextItem( rItem, 0 ); + if ( ( rc == ::osl::FileBase::E_None ) || ( rc == ::osl::FileBase::E_NOENT ) ) + bCheckResult = sal_True; + else + bCheckResult = sal_False; + break; + case osl_Check_Mode_WriteAccess: + ( ( aUString += str ) += aSlashURL ) += aTmpName2; + //if ( ( rc = pDir->create( aUString ) ) == ::osl::FileBase::E_None ) + if ( ( rc = Directory::create( aUString ) ) == ::osl::FileBase::E_None ) + { + bCheckResult = sal_True; + //rc = pDir->remove( aUString ); + rc = Directory::remove( aUString ); + CPPUNIT_ASSERT( rc == ::osl::FileBase::E_None ); + } + else + bCheckResult = sal_False; + break; + + default: + bCheckResult = sal_False; + }// switch + + rc = aDir.close( ); + CPPUNIT_ASSERT( rc == FileBase::E_None ); + + }//if + + return bCheckResult; +} + +/** construct error message +*/ +inline ::rtl::OUString outputError( const ::rtl::OUString & returnVal, const ::rtl::OUString & rightVal, const sal_Char * msg = "") +{ + ::rtl::OUString aUString; + if ( returnVal.equals( rightVal ) ) + return aUString; + aUString += ::rtl::OUString::createFromAscii(msg); + aUString += ::rtl::OUString::createFromAscii(": the returned value is '"); + aUString += returnVal; + aUString += ::rtl::OUString::createFromAscii("', but the value should be '"); + aUString += rightVal; + aUString += ::rtl::OUString::createFromAscii("'."); + return aUString; +} + +/** Change file mode, two version in UNIX and Windows;. +*/ +#if ( defined UNX ) || ( defined OS2 ) //chmod() method is differ in Windows +inline void changeFileMode( ::rtl::OUString & filepath, sal_Int32 mode ) +{ + rtl::OString aString; + rtl::OUString aUStr = filepath.copy( 0 ); + + if ( isURL( filepath ) ) + ::osl::FileBase::getSystemPathFromFileURL( filepath, aUStr ); + aString = ::rtl::OUStringToOString( aUStr, RTL_TEXTENCODING_ASCII_US ); + chmod( aString.getStr( ), mode ); +} +#else //Windows version +inline void changeFileMode( ::rtl::OUString & filepath, sal_Int32 mode ) +{ + (void)filepath; + (void)mode; + t_print("this method is not implemented yet"); +} +#endif + +inline ::rtl::OUString getCurrentPID( void ); + + + +//------------------------------------------------------------------------ +// Beginning of the test cases for FileBase class +//------------------------------------------------------------------------ +namespace osl_FileBase +{ + +#if 0 //~ this function has been deprecated + //--------------------------------------------------------------------- + // testing the method + // static inline RC getCanonicalName( const ::rtl::OUString& ustrRequestedURL, ::rtl::OUString& ustrValidURL ) + // + // The illegal characters are ;+=[]',\"*\\<>/?:|. + // because getCanonicalName method is not implemented yet and will be deprecated in the future, this test is not necessary. + //--------------------------------------------------------------------- + + class getCanonicalName:public CppUnit::TestFixture + { + + public: + ::osl::FileBase::RC nError; + + void getCanonicalName_001( ) + { + ::rtl::OUString aUStr_ValidURL; + nError = ::osl::FileBase::getCanonicalName( aCanURL1, aUStr_ValidURL ); + + CPPUNIT_ASSERT_MESSAGE("test for getCanonicalName function: check valid and unused file name", + ( osl::FileBase::E_None == nError ) && aUStr_ValidURL.equalsIgnoreAsciiCase( aCanURL1 ) ); + } + + void getCanonicalName_002( ) + { + ::rtl::OUString aUStr_ValidURL; + + createTestFile( aCanURL1 ); + nError = ::osl::FileBase::getCanonicalName( aCanURL1, aUStr_ValidURL ); + deleteTestFile( aCanURL1 ); + + CPPUNIT_ASSERT_MESSAGE( " test for getCanonicalName function: an existed file name, should different from the request, it did not passed(W32)(UNX)", + ( osl::FileBase::E_None == nError ) && aUStr_ValidURL.equalsIgnoreAsciiCase( aCanURL1 ) ); + } + + void getCanonicalName_003( ) + { + ::rtl::OUString aUStr_ValidURL; + nError = ::osl::FileBase::getCanonicalName ( aCanURL2, aUStr_ValidURL ); + + CPPUNIT_ASSERT_MESSAGE( " test for getCanonicalName function: invalid file name, should different from the request, it did not passed(W32)(UNX)", + ( osl::FileBase::E_None == nError ) && aUStr_ValidURL.equalsIgnoreAsciiCase( aCanURL2 ) ); + } + + CPPUNIT_TEST_SUITE( getCanonicalName ); + CPPUNIT_TEST( getCanonicalName_001 ); + CPPUNIT_TEST( getCanonicalName_002 ); + CPPUNIT_TEST( getCanonicalName_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getCanonicalName +#endif + + //--------------------------------------------------------------------- + // testing the method + // static inline RC getAbsoluteFileURL( const ::rtl::OUString& ustrBaseDirectoryURL, + // const ::rtl::OUString& ustrRelativeFileURL, + // ::rtl::OUString& ustrAbsoluteFileURL ) + //--------------------------------------------------------------------- + + class getAbsoluteFileURL:public CppUnit::TestFixture + { + //::osl::FileBase aFileBase; + ::rtl::OUString aResultURL1, aResultURL2, aResultURL3, aResultURL4, aResultURL5, aResultURL6; + // ::osl::FileBase::RC nError; + sal_Bool bOk; + + public: + + void check_getAbsoluteFileURL( rtl::OUString const& _suBaseURL, rtl::OString const& _sRelativeURL, ::osl::FileBase::RC _nAssumeError, rtl::OUString const& _suAssumeResultStr ); + + void getAbsoluteFileURL_001_1(); + void getAbsoluteFileURL_001_2(); + void getAbsoluteFileURL_001_3(); + void getAbsoluteFileURL_001_4(); + void getAbsoluteFileURL_001_5(); + void getAbsoluteFileURL_001_6(); + void getAbsoluteFileURL_001_7(); + void getAbsoluteFileURL_001_8(); + void getAbsoluteFileURL_002(); + void getAbsoluteFileURL_003(); + void getAbsoluteFileURL_004(); + + CPPUNIT_TEST_SUITE( getAbsoluteFileURL ); + CPPUNIT_TEST( getAbsoluteFileURL_001_1 ); + CPPUNIT_TEST( getAbsoluteFileURL_001_2 ); + CPPUNIT_TEST( getAbsoluteFileURL_001_3 ); + CPPUNIT_TEST( getAbsoluteFileURL_001_4 ); + CPPUNIT_TEST( getAbsoluteFileURL_001_5 ); + CPPUNIT_TEST( getAbsoluteFileURL_001_6 ); + CPPUNIT_TEST( getAbsoluteFileURL_001_7 ); + CPPUNIT_TEST( getAbsoluteFileURL_001_8 ); + CPPUNIT_TEST( getAbsoluteFileURL_002 ); + CPPUNIT_TEST( getAbsoluteFileURL_003 ); + CPPUNIT_TEST( getAbsoluteFileURL_004 ); + CPPUNIT_TEST_SUITE_END( ); + + }; //class getAbsoluteFileURL + +/* use coding format as same as getSystemPathFromFileURL + // initialization + void setUp( ) + { + sal_Char pResultURL1[] = "/relative/file1"; + sal_Char pResultURL2[] = "/relative/file2"; + sal_Char pResultURL3[] = "/file3"; + sal_Char pResultURL4[] = "/file4"; + sal_Char pResultURL5[] = "/canonical.name"; + sal_Char pResultURL6[] = "/relative/"; + aResultURL1 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL1 ) ); + aResultURL2 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL2 ) ); + aResultURL3 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL3 ) ); + aResultURL4 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL4 ) ); + aResultURL5 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL5 ) ); + aResultURL6 = aUserDirectoryURL.concat( rtl::OUString::createFromAscii( pResultURL6 ) ); + } + + void tearDown( ) + { + } + + // test code + void getAbsoluteFileURL_001( ) + { + ::rtl::OUString aUStr_AbsURL; + + ::osl::FileBase::RC nError11 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL, aRelURL1, aUStr_AbsURL ); + ::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getAbsoluteFileURL(' "); + suError += aUserDirectoryURL; + suError += ::rtl::OUString::createFromAscii("', '"); + suError += aRelURL1; + suError += ::rtl::OUString::createFromAscii("', '"); + suError += aUStr_AbsURL; + suError += outputError( aUStr_AbsURL, aResultURL1, "' ),"); + + sal_Bool nError12 = aUStr_AbsURL.equals( aResultURL1 ); + ::osl::FileBase::RC nError21 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL, aRelURL2, aUStr_AbsURL ); + sal_Bool nError22 = aUStr_AbsURL.equals( aResultURL2 ); + ::osl::FileBase::RC nError31 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL, aRelURL3, aUStr_AbsURL ); + sal_Bool nError32 = aUStr_AbsURL.equals( aResultURL3 ); + ::osl::FileBase::RC nError41 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL, aRelURL4, aUStr_AbsURL ); + sal_Bool nError42 = aUStr_AbsURL.equals( aResultURL4 ); + ::osl::FileBase::RC nError61 = aFileBase.getAbsoluteFileURL( aUserDirectoryURL, aRelURL6, aUStr_AbsURL ); + sal_Bool nError62 = aUStr_AbsURL.equals( aResultURL6 ); + printFileName( aUStr_AbsURL ); + printFileName( aResultURL6 ); + + CPPUNIT_ASSERT_MESSAGE("test for getAbsoluteFileURL function: valid file name with valid directory", + ( ::osl::FileBase::E_None == nError11 ) && ( sal_True == nError12 ) && + ( ::osl::FileBase::E_None == nError21 ) && ( sal_True == nError22 ) && + ( ::osl::FileBase::E_None == nError31 ) && ( sal_True == nError32 ) && + ( ::osl::FileBase::E_None == nError41 ) && ( sal_True == nError42 ) && + ( ::osl::FileBase::E_None == nError61 ) && ( sal_True == nError62 ) ); + } + + +#if ( defined UNX ) || ( defined OS2 ) //Link is not defined in Windows + void getAbsoluteFileURL_002( ) + { + ::rtl::OUString aUStr_AbsURL, aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys ); + ( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/link.file"); + ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/canonical.name"); + + rtl::OString strLinkFileName, strSrcFileName; + strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US ); + strSrcFileName = OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US ); + + createTestFile( aCanURL1 ); + sal_Int32 fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() ); + CPPUNIT_ASSERT( fd == 0 ); + + nError = aFileBase.getAbsoluteFileURL( aUserDirectoryURL, aLnkURL1, aUStr_AbsURL ); + bOk = aUStr_AbsURL.equals( aResultURL5 ); + + ::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getAbsoluteFileURL(' "); + suError += aUserDirectoryURL; + suError += ::rtl::OUString::createFromAscii("', '"); + suError += aLnkURL1; + suError += ::rtl::OUString::createFromAscii("', '"); + suError += aUStr_AbsURL; + suError += outputError( aUStr_AbsURL, aResultURL5, "' ),"); + //printFileName(suError); + + deleteTestFile( aCanURL1 ); + fd = remove( strLinkFileName.getStr() ); + CPPUNIT_ASSERT( fd == 0 ); + + CPPUNIT_ASSERT_MESSAGE("test for getAbsoluteFileURL function: URL contain link( Solaris version )", + ( ::osl::FileBase::E_None == nError ) && ( sal_True == bOk ) ); + } +#else //Windows version + void getAbsoluteFileURL_002( ) + { + CPPUNIT_ASSERT_MESSAGE("test for getAbsoluteFileURL function: URL contain link( Windows version )", + 1 ); + } +#endif + + void getAbsoluteFileURL_003( ) + { +// LLA: may be a wrong test, aTmpName1 not a real URL +#if 0 + ::rtl::OUString aUStr_AbsURL; + + nError = aFileBase.getAbsoluteFileURL( aTmpName1, aRelURL1, aUStr_AbsURL ); //base dir invalid error + ::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getAbsoluteFileURL('"); + suError += aTmpName1; + suError += ::rtl::OUString::createFromAscii("', '"); + suError += aRelURL1; + suError += ::rtl::OUString::createFromAscii("', '"); + suError += aUStr_AbsURL; + 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() "); + + CPPUNIT_ASSERT_MESSAGE( suError, ( ::osl::FileBase::E_INVAL == nError ) ); +#endif + } + + //use ".." in relartive path, the BasePath must exist on the file system + void getAbsoluteFileURL_004( ) + { + //create two level directories under $Temp/PID/ + ::rtl::OUString aUStrUpBase = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/test1"); + createTestDirectory( aUStrUpBase ); + ::rtl::OUString aUStrBase = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/test1/dir1"); + createTestDirectory( aUStrBase ); + + ::rtl::OUString aUStrRelar = ::rtl::OUString::createFromAscii("../../mytestfile"); + ::rtl::OUString aUStr_AbsURL; + ::rtl::OUString aResultURL6 = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/mytestfile"); + + nError = aFileBase.getAbsoluteFileURL( aUStrBase, aUStrRelar, aUStr_AbsURL ); + bOk = aUStr_AbsURL.equals( aResultURL6 ); + ::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getAbsoluteFileURL('"); + suError += aUStrBase; + suError += ::rtl::OUString::createFromAscii("', '"); + suError += aUStrRelar; + suError += ::rtl::OUString::createFromAscii("', '"); + suError += aUStr_AbsURL; + suError += outputError( aUStr_AbsURL, aResultURL6, "' ), did not pass on Win32 "); + + deleteTestDirectory( aUStrBase ); + deleteTestDirectory( aUStrUpBase ); + + CPPUNIT_ASSERT_MESSAGE( suError, ( ::osl::FileBase::E_None == nError ) && ( sal_True == bOk ) ); + } + + CPPUNIT_TEST_SUITE( getAbsoluteFileURL ); + CPPUNIT_TEST( getAbsoluteFileURL_001 ); + CPPUNIT_TEST( getAbsoluteFileURL_002 ); + CPPUNIT_TEST( getAbsoluteFileURL_003 ); + CPPUNIT_TEST( getAbsoluteFileURL_004 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getAbsoluteFileURL*/ + + void getAbsoluteFileURL::check_getAbsoluteFileURL( rtl::OUString const& _suBaseURL, rtl::OString const& _sRelativeURL, ::osl::FileBase::RC _nAssumeError, rtl::OUString const& _suAssumeResultStr ) + { + rtl::OUString suRelativeURL = rtl::OStringToOUString(_sRelativeURL, RTL_TEXTENCODING_UTF8); + rtl::OString sBaseURL = rtl::OUStringToOString(_suBaseURL, RTL_TEXTENCODING_UTF8); + rtl::OUString suResultURL; + osl::FileBase::RC nError = FileBase::getAbsoluteFileURL( _suBaseURL, suRelativeURL, suResultURL ); + rtl::OString sResultURL = rtl::OUStringToOString( suResultURL, RTL_TEXTENCODING_UTF8); + rtl::OString sError = errorToString(nError); + t_print("getAbsoluteFileURL('%s','%s') deliver absolute URL: '%s', error '%s'\n", sBaseURL.getStr(), _sRelativeURL.getStr(),sResultURL.getStr(), sError.getStr() ); + CPPUNIT_ASSERT_MESSAGE( "Assumption is wrong: error number is wrong", nError == _nAssumeError ); + if ( nError == ::osl::FileBase::E_None ) + { + sal_Bool bStrAreEqual = _suAssumeResultStr.equals( suResultURL ); + CPPUNIT_ASSERT_MESSAGE( "Assumption is wrong: ResultURL is not equal to expected URL ", bStrAreEqual == sal_True ); + } + } + + void getAbsoluteFileURL::getAbsoluteFileURL_001_1() + { + rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/relative/file1") ); + check_getAbsoluteFileURL( aUserDirectoryURL, "relative/file1",::osl::FileBase::E_None, suAssume ); + } + void getAbsoluteFileURL::getAbsoluteFileURL_001_2() + { + rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/relative/file2") ); + check_getAbsoluteFileURL( aUserDirectoryURL, "relative/./file2",::osl::FileBase::E_None, suAssume ); + } + void getAbsoluteFileURL::getAbsoluteFileURL_001_3() + { + rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/file3") ); + check_getAbsoluteFileURL( aUserDirectoryURL, "relative/../file3",::osl::FileBase::E_None, suAssume ); + } + void getAbsoluteFileURL::getAbsoluteFileURL_001_4() + { + rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/file4") ); + check_getAbsoluteFileURL( aUserDirectoryURL, "././relative/../file4",::osl::FileBase::E_None, suAssume ); + } + void getAbsoluteFileURL::getAbsoluteFileURL_001_5() + { + rtl::OUString suAssume; +#if ( defined UNX ) + suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/relative/") ); +#else + suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/relative") ); +#endif + check_getAbsoluteFileURL( aUserDirectoryURL, "././relative/.",::osl::FileBase::E_None, suAssume ); + } + void getAbsoluteFileURL::getAbsoluteFileURL_001_6() + { + rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/.relative") ); + check_getAbsoluteFileURL( aUserDirectoryURL, "./.relative",::osl::FileBase::E_None, suAssume ); + } + void getAbsoluteFileURL::getAbsoluteFileURL_001_7() + { + rtl::OUString suAssume; +#if (defined UNX ) + suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/.a/") ); +#else //windows + suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/.a") ); +#endif + check_getAbsoluteFileURL( aUserDirectoryURL, "./.a/mydir/..",::osl::FileBase::E_None, suAssume ); + } + void getAbsoluteFileURL::getAbsoluteFileURL_001_8() + { + rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/tmp/ok") ); +#if ( defined UNX ) || ( defined OS2 ) + check_getAbsoluteFileURL( aUserDirectoryURL, "tmp//ok",::osl::FileBase::E_None, suAssume ); +#else + check_getAbsoluteFileURL( aUserDirectoryURL, "tmp//ok",::osl::FileBase::E_INVAL, suAssume ); +#endif + } + void getAbsoluteFileURL::getAbsoluteFileURL_002() + { +#if ( defined UNX ) || ( defined OS2 ) //Link is not defined in Windows + ::rtl::OUString aUStr_AbsURL, aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys ); + ( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/link.file"); + ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/canonical.name"); + + rtl::OString strLinkFileName, strSrcFileName; + strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US ); + strSrcFileName = OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US ); + + createTestFile( aCanURL1 ); + sal_Int32 fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() ); + CPPUNIT_ASSERT( fd == 0 ); + rtl::OString sLnkURL = OUStringToOString( aLnkURL1, RTL_TEXTENCODING_ASCII_US ); + rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString::createFromAscii("/canonical.name") ); + check_getAbsoluteFileURL( aUserDirectoryURL, sLnkURL, ::osl::FileBase::E_None, suAssume ); + deleteTestFile( aCanURL1 ); + fd = remove( strLinkFileName.getStr() ); + CPPUNIT_ASSERT( fd == 0 ); +#endif + } + //please see line# 930 + void getAbsoluteFileURL::getAbsoluteFileURL_003() + { + } + void getAbsoluteFileURL::getAbsoluteFileURL_004() + { + //create two level directories under $Temp/PID/ + ::rtl::OUString aUStrUpBase = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/test1"); + createTestDirectory( aUStrUpBase ); + ::rtl::OUString aUStrBase = aUserDirectoryURL + ::rtl::OUString::createFromAscii("/test1/dir1"); + createTestDirectory( aUStrBase ); + + ::rtl::OUString suAssume = aUserDirectoryURL.concat( ::rtl::OUString::createFromAscii("/mytestfile") ); + check_getAbsoluteFileURL( aUStrBase, "../../mytestfile" , ::osl::FileBase::E_None, suAssume ); + deleteTestDirectory( aUStrBase ); + deleteTestDirectory( aUStrUpBase ); + } + //--------------------------------------------------------------------- + // testing two methods: + // static inline RC getSystemPathFromFileURL( const ::rtl::OUString& ustrFileURL, + // ::rtl::OUString& ustrSystemPath ) + // static RC getFileURLFromSystemPath( const ::rtl::OUString & ustrSystemPath, + // ::rtl::OUString & ustrFileURL ); + //--------------------------------------------------------------------- + class SystemPath_FileURL:public CppUnit::TestFixture + { + //::osl::FileBase aFileBase; + // ::rtl::OUString aUStr; + // ::osl::FileBase::RC nError; + + //void check_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sAssumeResultStr); + void check_SystemPath_FileURL(rtl::OString const& _sSource, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sAssumeResultStr, sal_Bool bDirection = sal_True ); + void checkWNTBehaviour_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sWNTAssumeResultString ); + void checkUNXBehaviour_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sUnixAssumeResultString ); + void checkWNTBehaviour_getFileURLFromSystemPath(rtl::OString const& _sSysPath, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sWNTAssumeResultString); + void checkUNXBehaviour_getFileURLFromSystemPath(rtl::OString const& _sSysPath, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sUnixAssumeResultString); + + public: + // test code. + void getSystemPathFromFileURL_001_1( ); + void getSystemPathFromFileURL_001_2( ); + void getSystemPathFromFileURL_001_21( ); + void getSystemPathFromFileURL_001_22( ); + void getSystemPathFromFileURL_001_3( ); + void getSystemPathFromFileURL_001_31( ); + void getSystemPathFromFileURL_001_4( ); + void getSystemPathFromFileURL_001_41( ); + void getSystemPathFromFileURL_001_5( ); + void getSystemPathFromFileURL_001_51( ); + void getSystemPathFromFileURL_001_52( ); + void getSystemPathFromFileURL_001_53( ); + void getSystemPathFromFileURL_001_6( ); + void getSystemPathFromFileURL_001_61( ); + void getSystemPathFromFileURL_001_7( ); + void getSystemPathFromFileURL_001_71( ); + void getSystemPathFromFileURL_001_8( ); + void getSystemPathFromFileURL_001_81( ); + void getSystemPathFromFileURL_001_9( ); + void getSystemPathFromFileURL_001_91( ); + void getSystemPathFromFileURL_001_92( ); + void getSystemPathFromFileURL_004( ); + void getSystemPathFromFileURL_005( ); + + //test case fot getFileURLFromSystemPath + void getFileURLFromSystemPath_001( ); + void getFileURLFromSystemPath_002( ); + void getFileURLFromSystemPath_003( ); + void getFileURLFromSystemPath_004( ); + void getFileURLFromSystemPath_005( ); + + CPPUNIT_TEST_SUITE( SystemPath_FileURL ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_1 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_2 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_21 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_22 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_3 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_31 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_4 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_41 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_5 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_51 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_52 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_53 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_6 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_61 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_7 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_71 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_8 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_81 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_9 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_91 ); + CPPUNIT_TEST( getSystemPathFromFileURL_001_92 ); + CPPUNIT_TEST( getSystemPathFromFileURL_004 ); + CPPUNIT_TEST( getSystemPathFromFileURL_005 ); + CPPUNIT_TEST( getFileURLFromSystemPath_001 ); + CPPUNIT_TEST( getFileURLFromSystemPath_002 ); + CPPUNIT_TEST( getFileURLFromSystemPath_003 ); + CPPUNIT_TEST( getFileURLFromSystemPath_004 ); + CPPUNIT_TEST( getFileURLFromSystemPath_005 ); + CPPUNIT_TEST_SUITE_END( ); + };// class SystemPath_FileURL + + + // test code. + + /* void getSystemPathFromFileURL::check_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sAssumeResultStr) + { + // PRE: URL as String + rtl::OUString suURL; + rtl::OUString suStr; + suURL = rtl::OStringToOUString(_sURL, RTL_TEXTENCODING_UTF8); + ::osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL( suURL, suStr ); // start with / + + // if the given string is gt length 0, + // we check also this string + rtl::OString sStr = rtl::OUStringToOString(suStr, RTL_TEXTENCODING_UTF8); + rtl::OString sError = errorToString(nError); + t_print("getSystemPathFromFileURL('%s') deliver system path: '%s', error '%s'\n", _sURL.getStr(), sStr.getStr(), sError.getStr() ); + + // rtl::OUString suStrEncode = rtl::Uri::encode(suStr, rtl_UriCharClassUnoParamValue, rtl_UriEncodeKeepEscapes, RTL_TEXTENCODING_UTF8); + // sStr = rtl::OUStringToOString(suStr, RTL_TEXTENCODING_UTF8); + // t_print("UTF8: %s\n", sStr.getStr() ); + + if (_sAssumeResultStr.getLength() > 0) + { + sal_Bool bStrAreEqual = _sAssumeResultStr.equals(sStr); + CPPUNIT_ASSERT_MESSAGE( "Assumption is wrong", + nError == _nAssumeError && bStrAreEqual == sal_True ); + } + else + { + CPPUNIT_ASSERT_MESSAGE( "Assumption is wrong", nError == _nAssumeError ); + } + }*/ + + // if bDirection==sal_True, check getSystemPathFromFileURL + // if bDirection==sal_False, check getFileURLFromSystemPath + void SystemPath_FileURL::check_SystemPath_FileURL(rtl::OString const& _sSource, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sAssumeResultStr, sal_Bool bDirection) + { + // PRE: URL as String + rtl::OUString suSource; + rtl::OUString suStr; + suSource = rtl::OStringToOUString(_sSource, RTL_TEXTENCODING_UTF8); + ::osl::FileBase::RC nError; + if ( bDirection == sal_True ) + nError = osl::FileBase::getSystemPathFromFileURL( suSource, suStr ); + else + nError = osl::FileBase::getFileURLFromSystemPath( suSource, suStr ); + + // if the given string is gt length 0, + // we check also this string + rtl::OString sStr = rtl::OUStringToOString(suStr, RTL_TEXTENCODING_UTF8); + rtl::OString sError = errorToString(nError); + if ( bDirection == sal_True ) + t_print("getSystemPathFromFileURL('%s') deliver system path: '%s', error '%s'\n", _sSource.getStr(), sStr.getStr(), sError.getStr() ); + else + t_print("getFileURLFromSystemPath('%s') deliver File URL: '%s', error '%s'\n", _sSource.getStr(), sStr.getStr(), sError.getStr() ); + + // rtl::OUString suStrEncode = rtl::Uri::encode(suStr, rtl_UriCharClassUnoParamValue, rtl_UriEncodeKeepEscapes, RTL_TEXTENCODING_UTF8); + // sStr = rtl::OUStringToOString(suStr, RTL_TEXTENCODING_UTF8); + // t_print("UTF8: %s\n", sStr.getStr() ); + + if (_sAssumeResultStr.getLength() > 0) + { + sal_Bool bStrAreEqual = _sAssumeResultStr.equals(sStr); + CPPUNIT_ASSERT_MESSAGE( "Assumption is wrong", + nError == _nAssumeError && bStrAreEqual == sal_True ); + } + else + { + CPPUNIT_ASSERT_MESSAGE( "Assumption is wrong", nError == _nAssumeError ); + } + } + void SystemPath_FileURL::checkWNTBehaviour_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sWNTAssumeResultString) + { +#if ( defined WNT ) + check_SystemPath_FileURL(_sURL, _nAssumeError, _sWNTAssumeResultString); +#else + (void)_sURL; + (void)_nAssumeError; + (void)_sWNTAssumeResultString; +#endif + } + + void SystemPath_FileURL::checkUNXBehaviour_getSystemPathFromFileURL(rtl::OString const& _sURL, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sUnixAssumeResultString) + { +#if ( defined UNX ) + check_SystemPath_FileURL(_sURL, _nAssumeError, _sUnixAssumeResultString); +#else + (void)_sURL; + (void)_nAssumeError; + (void)_sUnixAssumeResultString; +#endif + } + + void SystemPath_FileURL::checkWNTBehaviour_getFileURLFromSystemPath(rtl::OString const& _sSysPath, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sWNTAssumeResultString) + { +#if ( defined WNT ) + check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sWNTAssumeResultString, sal_False ); +#else + (void)_sSysPath; + (void)_nAssumeError; + (void)_sWNTAssumeResultString; +#endif + } + + void SystemPath_FileURL::checkUNXBehaviour_getFileURLFromSystemPath(rtl::OString const& _sSysPath, ::osl::FileBase::RC _nAssumeError, rtl::OString const& _sUnixAssumeResultString) + { +#if ( defined UNX ) + check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sUnixAssumeResultString, sal_False ); +#else + (void)_sSysPath; + (void)_nAssumeError; + (void)_sUnixAssumeResultString; +#endif + } + + /** LLA: Test for getSystemPathFromFileURL() + this test is splitted into 2 different OS tests, + the first function checkUNXBehaviour... runs only on Unix based Systems, + the second only on windows based systems + the first parameter are a file URL where we want to get the system path of, + the second parameter is the assumed error of the osl_getSystemPathFromFileURL() function, + the thrid parameter is the assumed result string, the string will only test, if it's length is greater 0 + */ + + void SystemPath_FileURL::getSystemPathFromFileURL_001_1() + { + rtl::OString sURL(""); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_2() + { + rtl::OString sURL("/"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "\\"); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_21() + { + // rtl::OString sURL("%2f"); + rtl::OString sURL("%2F"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/"); // LLA: this is may be a BUG + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_22() + { + rtl::OString sURL("file:///tmp%2Fmydir"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_3() + { + rtl::OString sURL("a"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a"); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_31() + { + rtl::OString sURL("tmpname"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname"); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_4() + { + rtl::OString sURL("file://"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_41() + { + rtl::OString sURL("file://localhost/tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_5() + { + rtl::OString sURL("file:///tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_51() + { + rtl::OString sURL("file://c:/tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:/tmp"); // LLA: this is may be a BUG + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_52() + { + rtl::OString sURL("file:///c:/tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp"); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_53() + { +// LLA: is this a legal file path? + rtl::OString sURL("file:///c|/tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c|/tmp"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp"); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_6() + { + rtl::OString sURL("file:///tmp/first"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_61() + { + rtl::OString sURL("file:///c:/tmp/first"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first"); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_7() + { + rtl::OString sURL("file:///tmp/../second"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/../second"); // LLA: may be a BUG + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_71() + { + rtl::OString sURL("file:///c:/tmp/../second"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/../second"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\..\\second"); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_8() + { + rtl::OString sURL("../tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "../tmp"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "..\\tmp"); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_81() + { + rtl::OString sURL("file://~/tmp"); + char* home_path; + home_path = getenv("HOME"); + rtl::OString expResult(home_path); + expResult += "/tmp"; + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, expResult ); + // checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "\\tmp"); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_9() + { + rtl::OString sURL("file:///tmp/first%20second"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first second"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getSystemPathFromFileURL_001_91() + { + rtl::OString sURL("file:///c:/tmp/first%20second"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first second"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first second"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_92() + { + rtl::OString sURL("ca@#;+.,$///78no%01ni..name"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + +#if 0 + void SystemPath_FileURL::getSystemPathFromFileURL_003( ) + { +// LLA: ??? +//!! seams to be, that the directories do not pass together + ::rtl::OUString aUStr; + ::rtl::OUString aRelativeURL = ::rtl::OUString::createFromAscii("../../relartive/file3"); + ::rtl::OUString aResultURL ( aSysPath4 ); + ::osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL( aRelativeURL, aUStr ); + + sal_Bool bOk = compareFileName( aUStr, aResultURL ); + + ::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getSystemPathFromFileURL("); + suError += aRelativeURL; + 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, "); + suError += outputError(aUStr, aResultURL); + CPPUNIT_ASSERT_MESSAGE( suError, ( osl::FileBase::E_None == nError ) && ( sal_True == bOk ) ); + } +#endif + + //normal legal case + void SystemPath_FileURL::getSystemPathFromFileURL_004( ) + { + ::rtl::OUString aUStr; + ::rtl::OUString aNormalURL( aTmpName6 ); + ::rtl::OUString aResultURL ( aSysPath4 ); + ::osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL( aNormalURL, aUStr ); + + sal_Bool bOk = compareFileName( aUStr, aResultURL ); + + ::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getSystemPathFromFileURL(' "); + suError += aNormalURL; + suError += ::rtl::OUString::createFromAscii(" ') function:use an absolute file URL, "); + suError += outputError(aUStr, aResultURL); + + CPPUNIT_ASSERT_MESSAGE( suError, ( osl::FileBase::E_None == nError ) && ( sal_True == bOk ) ); + + } + + //CJK charactors case + void SystemPath_FileURL::getSystemPathFromFileURL_005( ) + { + ::rtl::OUString aUStr; + createTestDirectory( aTmpName10 ); + ::rtl::OUString aNormalURL( aTmpName10 ); + ::rtl::OUString aResultURL ( aSysPath5 ); + + ::osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL( aNormalURL, aUStr ); + + sal_Bool bOk = compareFileName( aUStr, aResultURL ); + + ::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for getSystemPathFromFileURL(' "); + suError += aNormalURL; + suError += ::rtl::OUString::createFromAscii(" ') function:use a CJK coded absolute URL, "); + suError += outputError(aUStr, aResultURL); + deleteTestDirectory( aTmpName10 ); + + CPPUNIT_ASSERT_MESSAGE( suError, ( osl::FileBase::E_None == nError ) && ( sal_True == bOk ) ); + } + void SystemPath_FileURL::getFileURLFromSystemPath_001() + { + rtl::OString sSysPath("~/tmp"); + char* home_path; + home_path = getenv("HOME"); + rtl::OString expResult(home_path); + expResult = "file://"+ expResult + "/tmp"; + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, expResult ); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "~/tmp"); + } + void SystemPath_FileURL::getFileURLFromSystemPath_002() + { + rtl::OString sSysPath("c:/tmp"); + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "c:/tmp"); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///c:/tmp"); + } + void SystemPath_FileURL::getFileURLFromSystemPath_003() + { + rtl::OString sSysPath("file:///temp"); + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getFileURLFromSystemPath_004() + { + rtl::OString sSysPath("//tmp//first start"); + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///tmp/first%20start"); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + } + void SystemPath_FileURL::getFileURLFromSystemPath_005() + { + rtl::OString sSysPath(""); + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + } + // start with "~user", not impletment + // void SystemPath_FileURL::getFileURLFromSystemPath_006() + + + + + //--------------------------------------------------------------------- + // testing the method + // static inline RC searchFileURL( const ::rtl::OUString& ustrFileName, + // const ::rtl::OUString& ustrSearchPath, + // ::rtl::OUString& ustrFileURL ) + //--------------------------------------------------------------------- + class searchFileURL:public CppUnit::TestFixture + { + //::osl::FileBase aFileBase; + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1, nError2, nError3,nError4; + + public: + + // test code. + void searchFileURL_001( ) + { + /* search file is passed by system filename */ + nError1 = ::osl::FileBase::searchFileURL( aTmpName1, aUserDirectorySys, aUStr ); + /* search file is passed by full qualified file URL */ + nError2 = ::osl::FileBase::searchFileURL( aCanURL1, aUserDirectorySys, aUStr ); + /* search file is passed by relative file path */ + nError3 = ::osl::FileBase::searchFileURL( aRelURL4, aUserDirectorySys, aUStr ); + + CPPUNIT_ASSERT_MESSAGE( "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) ", + ( osl::FileBase::E_NOENT == nError1 ) && + ( osl::FileBase::E_NOENT == nError2 ) && + ( osl::FileBase::E_NOENT == nError3 )); + } + + void searchFileURL_002( ) + { + /* search file is passed by system filename */ + nError1 = ::osl::FileBase::searchFileURL( aTempDirectorySys, aRootSys, aUStr ); + sal_Bool bOk1 = compareFileName( aUStr, aTempDirectoryURL ); + /* search file is passed by full qualified file URL */ + nError2 = ::osl::FileBase::searchFileURL( aTempDirectoryURL, aRootSys, aUStr ); + sal_Bool bOk2 = compareFileName( aUStr, aTempDirectoryURL ); + /* search file is passed by relative file path */ + nError3 = ::osl::FileBase::searchFileURL( aRelURL5, aRootSys, aUStr ); + sal_Bool bOk3 = compareFileName( aUStr, aTempDirectoryURL ); + /* search file is passed by an exist file */ + createTestFile( aCanURL1 ); + nError4 = ::osl::FileBase::searchFileURL( aCanURL4, aUserDirectorySys, aUStr ); + sal_Bool bOk4 = compareFileName( aUStr, aCanURL1 ); + deleteTestFile( aCanURL1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.", + ( osl::FileBase::E_None == nError1 ) && + ( osl::FileBase::E_None == nError2 ) && + ( osl::FileBase::E_None == nError3 ) && + ( osl::FileBase::E_None == nError4 ) && + ( sal_True == bOk1 ) && + ( sal_True == bOk2 ) && + ( sal_True == bOk3 ) && + ( sal_True == bOk4 ) ); + } + + + void searchFileURL_003( ) + { + OSLTEST_DECLARE( SystemPathList, TEST_PLATFORM_ROOT":"TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP":"TEST_PLATFORM_ROOT"system/path" ); + nError1 = ::osl::FileBase::searchFileURL( aUserDirectoryURL, aSystemPathList, aUStr ); + sal_Bool bOk = compareFileName( aUStr, aUserDirectoryURL ); + CPPUNIT_ASSERT_MESSAGE( "test for searchFileURL function: search directory is a list of system paths", + ( osl::FileBase::E_None == nError1 ) && + ( sal_True == bOk ) ); + } + + void searchFileURL_004( ) + { + OSLTEST_DECLARE( SystemPathList, TEST_PLATFORM_ROOT PATH_LIST_DELIMITER TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP PATH_LIST_DELIMITER TEST_PLATFORM_ROOT "system/path/../name" ); + nError1 = ::osl::FileBase::searchFileURL( aUserDirectoryURL, aSystemPathList, aUStr ); + sal_Bool bOk = compareFileName( aUStr, aUserDirectoryURL ); + CPPUNIT_ASSERT_MESSAGE( "test for searchFileURL function: search directory is a list of system paths", + ( osl::FileBase::E_None == nError1 ) && + ( sal_True == bOk ) ); + } + + void searchFileURL_005( ) + { + nError1 = ::osl::FileBase::searchFileURL( aUserDirectoryURL, aNullURL, aUStr ); + sal_Bool bOk = compareFileName( aUStr, aUserDirectoryURL ); + CPPUNIT_ASSERT_MESSAGE( "test for searchFileURL function: search directory is NULL", + ( osl::FileBase::E_None == nError1 ) && + ( sal_True == bOk ) ); + } + + CPPUNIT_TEST_SUITE( searchFileURL ); + CPPUNIT_TEST( searchFileURL_001 ); + CPPUNIT_TEST( searchFileURL_002 ); + CPPUNIT_TEST( searchFileURL_003 ); + CPPUNIT_TEST( searchFileURL_004 ); + CPPUNIT_TEST( searchFileURL_005 ); + CPPUNIT_TEST_SUITE_END( ); + };// class searchFileURL + + + //--------------------------------------------------------------------- + // testing the method + // static inline RC getTempDirURL( ::rtl::OUString& ustrTempDirURL ) + //--------------------------------------------------------------------- + class getTempDirURL:public CppUnit::TestFixture + { + //::osl::FileBase aFileBase; + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError; + + public: + // initialization + void setUp( ) + { + nError = FileBase::getTempDirURL( aUStr ); + } + + void tearDown( ) + { + } + + // test code. + void getTempDirURL_001( ) + { + + CPPUNIT_ASSERT_MESSAGE( "test for getTempDirURL function: excution", + ( osl::FileBase::E_None == nError ) ); + } + + void getTempDirURL_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getTempDirURL function: test for open and write access rights", + checkDirectory( aUStr, osl_Check_Mode_OpenAccess ) && + checkDirectory( aUStr, osl_Check_Mode_ReadAccess ) && + checkDirectory( aUStr,osl_Check_Mode_WriteAccess ) ); + } + + CPPUNIT_TEST_SUITE( getTempDirURL ); + CPPUNIT_TEST( getTempDirURL_001 ); + CPPUNIT_TEST( getTempDirURL_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getTempDirURL + + + //--------------------------------------------------------------------- + // testing the method + // static inline RC createTempFile( ::rtl::OUString* pustrDirectoryURL, + // oslFileHandle* pHandle, + // ::rtl::OUString* pustrTempFileURL) + //--------------------------------------------------------------------- + class createTempFile:public CppUnit::TestFixture + { + //::osl::FileBase aFileBase; + ::osl::FileBase::RC nError1, nError2; + sal_Bool bOK; + + oslFileHandle *pHandle; + ::rtl::OUString *pUStr_DirURL; + ::rtl::OUString *pUStr_FileURL; + + public: + + // initialization + void setUp( ) + { + pHandle = new oslFileHandle(); + pUStr_DirURL = new ::rtl::OUString( aUserDirectoryURL ); + pUStr_FileURL = new ::rtl::OUString(); + //*pUStr_DirURL = aUserDirectoryURL; /// create temp file in /tmp/PID or c:\temp\PID.*/ + } + + void tearDown( ) + { + delete pUStr_DirURL; + delete pUStr_FileURL; + delete pHandle; + } + + // test code. + void createTempFile_001( ) + { + nError1 = FileBase::createTempFile( pUStr_DirURL, pHandle, pUStr_FileURL ); + ::osl::File testFile( *pUStr_FileURL ); + //printFileName(*pUStr_FileURL); + nError2 = testFile.open( OpenFlag_Create ); + if ( osl::FileBase::E_EXIST == nError2 ) { + osl_closeFile( *pHandle ); + deleteTestFile( *pUStr_FileURL ); + } + + CPPUNIT_ASSERT_MESSAGE( "test for createTempFile function: create temp file and test the existence", + ( osl::FileBase::E_None == nError1 ) && ( pHandle != NULL ) && ( osl::FileBase::E_EXIST== nError2 ) ); + } + + void createTempFile_002( ) + { + bOK = sal_False; + nError1 = FileBase::createTempFile( pUStr_DirURL, pHandle, pUStr_FileURL ); + ::osl::File testFile( *pUStr_FileURL ); + nError2 = testFile.open( OpenFlag_Create ); + + CPPUNIT_ASSERT_MESSAGE( "createTempFile function: create a temp file, but it does not exist", + ( osl::FileBase::E_None == nError1 ) && ( pHandle != NULL ) && + ( osl::FileBase::E_EXIST == nError2 ) ); + + //check file if have the write permission + if ( osl::FileBase::E_EXIST == nError2 ) { + bOK = ifFileCanWrite( *pUStr_FileURL ); + osl_closeFile( *pHandle ); + deleteTestFile( *pUStr_FileURL ); + } + + CPPUNIT_ASSERT_MESSAGE( "test for open and write access rights, in (W32), it did not have write access right, but it should be writtenable.", + ( sal_True == bOK ) ); + } + + void createTempFile_003( ) + { + nError1 = FileBase::createTempFile( pUStr_DirURL, pHandle, 0 ); + //the temp file will be removed when return from createTempFile + bOK = ( pHandle != NULL && pHandle != 0); + if ( sal_True == bOK ) + osl_closeFile( *pHandle ); + + CPPUNIT_ASSERT_MESSAGE( "test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.", + ( ::osl::FileBase::E_None == nError1 ) &&( sal_True == bOK ) ); + } + void createTempFile_004( ) + { + nError1 = FileBase::createTempFile( pUStr_DirURL, 0, pUStr_FileURL ); + bOK = ( pUStr_FileURL != 0); + ::osl::File testFile( *pUStr_FileURL ); + nError2 = testFile.open( OpenFlag_Create ); + deleteTestFile( *pUStr_FileURL ); + CPPUNIT_ASSERT_MESSAGE( "createTempFile function: create a temp file, but it does not exist", + ( osl::FileBase::E_None == nError1 ) && ( osl::FileBase::E_EXIST == nError2 ) &&( sal_True == bOK ) ); + + } + + CPPUNIT_TEST_SUITE( createTempFile ); + CPPUNIT_TEST( createTempFile_001 ); + CPPUNIT_TEST( createTempFile_002 ); + CPPUNIT_TEST( createTempFile_003 ); + CPPUNIT_TEST( createTempFile_004 ); + CPPUNIT_TEST_SUITE_END( ); + };// class createTempFile + + // ----------------------------------------------------------------------------- +#if 0 //~ this function has been deprecated. + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileBase::getCanonicalName, "osl_FileBase" ); +#endif + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileBase::getAbsoluteFileURL, "osl_FileBase" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileBase::SystemPath_FileURL, "osl_FileBase" ); + // CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileBase::getFileURLFromSystemPath, "osl_FileBase" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileBase::searchFileURL, "osl_FileBase" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileBase::getTempDirURL, "osl_FileBase" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileBase::createTempFile, "osl_FileBase" ); +}// namespace osl_FileBase + + +//------------------------------------------------------------------------ +// Beginning of the test cases for VolumeDevice class +//------------------------------------------------------------------------ + +#if 0 //~ this Class has been deprecated +namespace osl_VolumeDevice +{ + + //--------------------------------------------------------------------- + // testing the method + // VolumeDevice() : _aHandle( NULL ) + //--------------------------------------------------------------------- + class ctors : public CppUnit::TestFixture + { + ::osl::VolumeDevice aVolumeDevice; + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + } + + void tearDown( ) + { + } + + // test code. + void ctors_001( ) + { + ::osl::VolumeDevice aVolumeDevice1; + + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: Constructor for VolumeDevice with no args.", + ( osl::FileBase::E_None != aVolumeDevice1.automount( ) ) && + ( osl::FileBase::E_None != aVolumeDevice1.unmount( ) ) && + ( aNullURL.equals( aVolumeDevice1.getMountPath( ) ) ) ); + } + + void ctors_002( ) + { + ::osl::VolumeInfo aVolumeInfo( VolumeInfoMask_Attributes ); + nError1 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + + ::osl::VolumeDevice aVolumeDevice1( aVolumeInfo.getDeviceHandle( ) ); + sal_Bool bOk = compareFileName( aNullURL, aVolumeDevice1.getMountPath( ) ); + CPPUNIT_ASSERT_MESSAGE( "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).", + sal_False == bOk ); + } + + void ctors_003( ) + { + ::osl::VolumeInfo aVolumeInfo( VolumeInfoMask_Attributes ); + nError1 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + + ::osl::VolumeDevice aVolumeDevice1 = aVolumeInfo.getDeviceHandle( ); + sal_Bool bOk = compareFileName( aNullURL, aVolumeDevice1.getMountPath( ) ); + CPPUNIT_ASSERT_MESSAGE( "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).", + sal_False == bOk ); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_001 ); + CPPUNIT_TEST( ctors_002 ); + CPPUNIT_TEST( ctors_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class ctors + + + //--------------------------------------------------------------------- + // testing the method + // inline RC automount() + //--------------------------------------------------------------------- + class automount : public CppUnit::TestFixture + { + ::osl::VolumeDevice aVolumeDevice; + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + } + + void tearDown( ) + { + + } + + // test code. + void automount_001( ) + { + ::osl::VolumeDevice aVolumeDevice1; + nError1 = aVolumeDevice1.automount( ); + + CPPUNIT_ASSERT_MESSAGE( "test for automount function: invalid parameter.", + ( osl::FileBase::E_INVAL == nError1 ) ); + } + + void automount_002( ) + { + ::osl::VolumeInfo aVolumeInfo( VolumeInfoMask_Attributes ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + + ::osl::VolumeDevice aVolumeDevice1( aVolumeInfo.getDeviceHandle( ) ); + nError1 = aVolumeDevice1.unmount( ); + nError1 = aVolumeDevice1.automount( ); + CPPUNIT_ASSERT_MESSAGE( "test for automount function: this test is not implemented yet, it did not pass in (UNX), (W32).", + ( osl::FileBase::E_None == nError1 ) ); + } + + CPPUNIT_TEST_SUITE( automount ); + CPPUNIT_TEST( automount_001 ); + CPPUNIT_TEST( automount_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class automount + + + // ----------------------------------------------------------------------------- + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeDevice::ctors, "osl_VolumeDevice" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeDevice::automount, "osl_VolumeDevice" ); +}// namespace osl_VolumeDevice +#endif + + +//------------------------------------------------------------------------ +// Beginning of the test cases for VolumeInfo class +//------------------------------------------------------------------------ +namespace osl_VolumeInfo +{ + + //--------------------------------------------------------------------- + // testing the method + // VolumeInfo( sal_uInt32 nMask ): _nMask( nMask ) + //--------------------------------------------------------------------- + class ctors : public CppUnit::TestFixture + { + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1, nError2; + + ::osl::VolumeDevice aVolumeDevice1; + + public: + // initialization + void setUp( ) + { + } + + void tearDown( ) + { + } + + // test code. + void ctors_001( ) + { + ::osl::VolumeInfo aVolumeInfo( 0 ); + nError1 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( ); + sal_uInt32 uiMaxPathLength = aVolumeInfo.getMaxPathLength( ); + aUStr = aVolumeInfo.getFileSystemName( ); + + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: mask is empty", + ( 0 == uiTotalSpace ) && + ( 0 == uiMaxPathLength ) && + sal_True == compareFileName( aUStr, aNullURL ) ); + } + +#if ( defined UNX ) || ( defined OS2 ) + void ctors_002( ) + { + ::osl::VolumeInfo aVolumeInfo( VolumeInfoMask_TotalSpace | + VolumeInfoMask_UsedSpace | + VolumeInfoMask_FileSystemName ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL4, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + //CPPUNIT_ASSERT( aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( ); + sal_uInt64 uiUsedSpace = aVolumeInfo.getUsedSpace( ); + aUStr = aVolumeInfo.getFileSystemName( ); + + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: mask is specified as certain valid fields, and get the masked fields", + ( 0 != uiTotalSpace ) && + ( 0 != uiUsedSpace ) && + sal_True == compareFileName( aUStr, "nfs" ) ); + } +#else /// Windows version,here we can not determine whichvolume in Windows is serve as an nfs volume. + void ctors_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: mask is specified as certain valid fields, and get the masked fields( Windows version )", + 1 == 1 ); + } +#endif + + void ctors_003( ) + { + + sal_Int32 mask1 = VolumeInfoMask_FreeSpace; + ::osl::VolumeInfo aVolumeInfo1( mask1 ); + nError1 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo1.isValid( mask1 ) ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + + sal_uInt64 uiTotalSpace1 = aVolumeInfo1.getTotalSpace( ); + aUStr = aVolumeInfo1.getFileSystemName( ); + + sal_Int32 mask2 = VolumeInfoMask_TotalSpace; + ::osl::VolumeInfo aVolumeInfo2( mask2 ); + nError2 = ::osl::Directory::getVolumeInfo( aRootURL, aVolumeInfo2 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo2.isValid( mask2 ) ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError2 ); + + sal_uInt64 uiTotalSpace2 = aVolumeInfo2.getTotalSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "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)", + ( 0 == uiTotalSpace1 ) && ( 0 != uiTotalSpace2 ) && + sal_True == compareFileName( aUStr, aNullURL ) ); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_001 ); + CPPUNIT_TEST( ctors_002 ); + CPPUNIT_TEST( ctors_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class ctors + + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool isValid( sal_uInt32 nMask ) const + //--------------------------------------------------------------------- + class isValid : public CppUnit::TestFixture + { + ::osl::VolumeDevice aVolumeDevice; + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + } + + void tearDown( ) + { + + } + + // test code. + void isValid_001( ) + { + sal_Int32 mask = 0; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL4, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for isValid function: no fields specified.", + sal_True == aVolumeInfo.isValid( mask ) ); + } + +#if ( defined UNX ) || ( defined OS2 ) + void isValid_002( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes | VolumeInfoMask_TotalSpace | osl_VolumeInfo_Mask_UsedSpace | + osl_VolumeInfo_Mask_FreeSpace | osl_VolumeInfo_Mask_MaxNameLength | + osl_VolumeInfo_Mask_MaxPathLength | osl_VolumeInfo_Mask_FileSystemName; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL4, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for isValid function: all valid fields specified for a nfs volume.", + sal_True == aVolumeInfo.isValid( mask ) ); + } +#else /// Windows version,here we can not determine whichvolume in Windows is serve as an nfs volume. + void isValid_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for isValid function: all valid fields specified for a nfs volume.( Windows version )", + 1 == 1 ); + } +#endif + + void isValid_003( ) + { + ::osl::VolumeDevice aVolumeDevice1; + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk1 = aVolumeInfo.isValid( mask ); + + nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk2 = aVolumeInfo.isValid( mask ); + + CPPUNIT_ASSERT_MESSAGE( "test for isValid function: VolumeInfoMask_Attributes, it should be valid for some volume such as /, floppy, cdrom, etc. but it did not pass", + ( sal_True == bOk1 ) && ( sal_True == bOk2 ) ); + } + + CPPUNIT_TEST_SUITE( isValid ); + CPPUNIT_TEST( isValid_001 ); + CPPUNIT_TEST( isValid_002 ); + CPPUNIT_TEST( isValid_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class isValid + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool getRemoteFlag() const + //--------------------------------------------------------------------- + class getRemoteFlag : public CppUnit::TestFixture + { + ::osl::VolumeDevice aVolumeDevice; + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1, nError2; + + public: + // test code. + void getRemoteFlag_001( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getRemoteFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getRemoteFlag function: get a volume device which is not remote.", + ( sal_False == bOk ) ); + } + + #if ( defined UNX ) || ( defined OS2 ) //remote Volume is different in Solaris and Windows + void getRemoteFlag_002( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL4, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getRemoteFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getRemoteFlag function: get a volume device which is remote( Solaris version ).", + ( sal_True == bOk ) ); + } +#else //Windows version + void getRemoteFlag_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getRemoteFlag function: get a volume device which is remote( Windows version )", + 1 == 1 ); + } +#endif + + CPPUNIT_TEST_SUITE( getRemoteFlag ); + CPPUNIT_TEST( getRemoteFlag_001 ); + CPPUNIT_TEST( getRemoteFlag_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getRemoteFlag + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool getRemoveableFlag() const + //--------------------------------------------------------------------- + class getRemoveableFlag : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // test code. + void getRemoveableFlag_001( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getRemoveableFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getRemoveableFlag function: get a volume device which is not removable.", + sal_False == bOk ); + } + + void getRemoveableFlag_002( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getRemoveableFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getRemoveableFlag function: get a volume device which is removable, not sure, here we use floppy disk, but it did not pass.", + sal_True == bOk ); + } + CPPUNIT_TEST_SUITE( getRemoveableFlag ); + CPPUNIT_TEST( getRemoveableFlag_001 ); + CPPUNIT_TEST( getRemoveableFlag_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getRemoveableFlag + + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool getCompactDiscFlag() const + //--------------------------------------------------------------------- + class getCompactDiscFlag : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + + public: + // test code. + void getCompactDiscFlag_001( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getCompactDiscFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getCompactDiscFlag function: get a volume device which is not a cdrom.", + ( sal_False == bOk ) ); + } + + void getCompactDiscFlag_002( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL6, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getCompactDiscFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getCompactDiscFlag function: get a cdrom volume device flag, it did not pass.", + ( sal_True == bOk ) ); + } + CPPUNIT_TEST_SUITE( getCompactDiscFlag ); + CPPUNIT_TEST( getCompactDiscFlag_001 ); + CPPUNIT_TEST( getCompactDiscFlag_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getCompactDiscFlag + + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool getFloppyDiskFlag() const + //--------------------------------------------------------------------- + class getFloppyDiskFlag : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + + public: + // test code. + void getFloppyDiskFlag_001( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getFloppyDiskFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFloppyDiskFlag function: get a volume device which is not a floppy disk.", + ( sal_False == bOk ) ); + } + + void getFloppyDiskFlag_002( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getFloppyDiskFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFloppyDiskFlag function: get a floppy volume device flag, it did not pass.", + ( sal_True == bOk ) ); + } + CPPUNIT_TEST_SUITE( getFloppyDiskFlag ); + CPPUNIT_TEST( getFloppyDiskFlag_001 ); + CPPUNIT_TEST( getFloppyDiskFlag_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getFloppyDiskFlag + + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool getFixedDiskFlag() const + //--------------------------------------------------------------------- + class getFixedDiskFlag : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + + public: + // test code. + void getFixedDiskFlag_001( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL2, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getFixedDiskFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFixedDiskFlag function: get a volume device which is not a fixed disk.", + ( sal_False == bOk ) ); + } + + void getFixedDiskFlag_002( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getFixedDiskFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFixedDiskFlag function: get a fixed disk volume device flag, it did not pass.", + ( sal_True == bOk ) ); + } + CPPUNIT_TEST_SUITE( getFixedDiskFlag ); + CPPUNIT_TEST( getFixedDiskFlag_001 ); + CPPUNIT_TEST( getFixedDiskFlag_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getFixedDiskFlag + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool getRAMDiskFlag() const + //--------------------------------------------------------------------- + class getRAMDiskFlag : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + + public: + // test code. + void getRAMDiskFlag_001( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getRAMDiskFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getRAMDiskFlag function: get a volume device which is not a RAM disk.", + ( sal_False == bOk ) ); + } + + void getRAMDiskFlag_002( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + sal_Bool bOk = aVolumeInfo.getRAMDiskFlag( ); + + CPPUNIT_ASSERT_MESSAGE( "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).", + ( sal_True == bOk ) ); + } + CPPUNIT_TEST_SUITE( getRAMDiskFlag ); + CPPUNIT_TEST( getRAMDiskFlag_001 ); + CPPUNIT_TEST( getRAMDiskFlag_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getRAMDiskFlag + + + //--------------------------------------------------------------------- + // testing the method + // inline sal_uInt64 getTotalSpace() const + //--------------------------------------------------------------------- + class getTotalSpace : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + + public: + // test code. + void getTotalSpace_001( ) + { + sal_Int32 mask = VolumeInfoMask_TotalSpace; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getTotalSpace function: get total space of Fixed disk volume mounted on /, it should not be 0", + 0 != uiTotalSpace ); + } + + #if defined( UNX ) + void getTotalSpace_002( ) + { + sal_Int32 mask = VolumeInfoMask_TotalSpace; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL3, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getTotalSpace function: get total space of /proc, it should be 0", + 0 == uiTotalSpace ); + } +#else /// Windows version, in Windows, there is no /proc directory + void getTotalSpace_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getTotalSpace function:not applicable for /proc( Windows version )", + 1 == 1 ); + } +#endif + + + +#if defined(SOLARIS) + void getTotalSpace_003( ) + { + struct statvfs aStatFS; + static const sal_Char name[] = "/"; + + memset (&aStatFS, 0, sizeof(aStatFS)); + statvfs( name, &aStatFS); + sal_uInt64 TotalSpace = aStatFS.f_frsize * aStatFS.f_blocks ; + + sal_Int32 mask = VolumeInfoMask_TotalSpace; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiTotalSpace = aVolumeInfo.getTotalSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getTotalSpace function: get total space by hand, then compare with getTotalSpace, it did not pass", + uiTotalSpace == TotalSpace ); + } +#else /// Windows version + void getTotalSpace_003( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getTotalSpace function:not implemented yet( Windows version )", + 1 == 1 ); + } +#endif + + CPPUNIT_TEST_SUITE( getTotalSpace ); + CPPUNIT_TEST( getTotalSpace_001 ); + CPPUNIT_TEST( getTotalSpace_002 ); + CPPUNIT_TEST( getTotalSpace_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getTotalSpace + + //--------------------------------------------------------------------- + // testing the method + // inline sal_uInt64 getFreeSpace() const + //--------------------------------------------------------------------- + class getFreeSpace : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + + public: + // test code. + void getFreeSpace_001( ) + { + sal_Int32 mask = VolumeInfoMask_FreeSpace; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiFreeSpace = aVolumeInfo.getFreeSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "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", + 0 != uiFreeSpace ); + } + +#if defined( UNX ) + void getFreeSpace_002( ) + { + sal_Int32 mask = VolumeInfoMask_FreeSpace; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL3, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiFreeSpace = aVolumeInfo.getFreeSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFreeSpace function: get free space of /proc, it should be 0", + 0 == uiFreeSpace ); + } +#else /// Windows version, in Windows, there is no /proc directory + void getFreeSpace_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getFreeSpace function: not applicable for /proc( Windows version )", + 1 == 1 ); + } +#endif + + +#if defined(SOLARIS) + void getFreeSpace_003( ) + { + struct statvfs aStatFS; + static const sal_Char name[] = "/"; + + memset (&aStatFS, 0, sizeof(aStatFS)); + statvfs( name, &aStatFS); + sal_uInt64 FreeSpace = aStatFS.f_bfree * aStatFS.f_frsize ; + + sal_Int32 mask = VolumeInfoMask_FreeSpace; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiFreeSpace = aVolumeInfo.getFreeSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFreeSpace function: get free space by hand, then compare with getFreeSpace, it did not pass", + uiFreeSpace == FreeSpace ); + } +#else //Windows version + void getFreeSpace_003( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getFreeSpace function: not implemented yet( Windows version )", + 1 == 1 ); + } +#endif + + + CPPUNIT_TEST_SUITE( getFreeSpace ); + CPPUNIT_TEST( getFreeSpace_001 ); + CPPUNIT_TEST( getFreeSpace_002 ); + CPPUNIT_TEST( getFreeSpace_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getFreeSpace + + //--------------------------------------------------------------------- + // testing the method + // inline sal_uInt64 getUsedSpace() const + //--------------------------------------------------------------------- + class getUsedSpace : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + + public: + // test code. + void getUsedSpace_001( ) + { + sal_Int32 mask = VolumeInfoMask_UsedSpace; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiUsedSpace = aVolumeInfo.getUsedSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "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", + 0 != uiUsedSpace ); + } + +#if defined( UNX ) + void getUsedSpace_002( ) + { + sal_Int32 mask = VolumeInfoMask_UsedSpace; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL3, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiUsedSpace = aVolumeInfo.getUsedSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getUsedSpace function: get used space of /proc, it should be 0", + 0 == uiUsedSpace ); + } +#else /// Windows version, in Windows, there is no /proc directory + void getUsedSpace_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getUsedSpace function: not applicable for /proc( Windows version )", + 1 == 1 ); + } +#endif + + +#if defined(SOLARIS) + void getUsedSpace_003( ) + { + struct statvfs aStatFS; + static const sal_Char name[] = "/"; + + memset (&aStatFS, 0, sizeof(aStatFS)); + statvfs( name, &aStatFS); + sal_uInt64 UsedSpace = ( aStatFS.f_blocks - aStatFS.f_bavail ) * aStatFS.f_frsize; + + + sal_Int32 mask = VolumeInfoMask_UsedSpace; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiUsedSpace = aVolumeInfo.getUsedSpace( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getUsedSpace function: get used space by hand, then compare with getUsedSpace, it did not pass", + uiUsedSpace == UsedSpace ); + } +#else //Windows version + void getUsedSpace_003( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getUsedSpace function: not implemented yet( Windows version )", + 1 == 1 ); + } +#endif + + + CPPUNIT_TEST_SUITE( getUsedSpace ); + CPPUNIT_TEST( getUsedSpace_001 ); + CPPUNIT_TEST( getUsedSpace_002 ); + CPPUNIT_TEST( getUsedSpace_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getUsedSpace + + + //--------------------------------------------------------------------- + // testing the method + // inline sal_uInt32 getMaxNameLength() const + //--------------------------------------------------------------------- + class getMaxNameLength : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + + public: + // test code. + void getMaxNameLength_001( ) + { + sal_Int32 mask = VolumeInfoMask_MaxNameLength; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt32 uiMaxNameLength = aVolumeInfo.getMaxNameLength( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getMaxNameLength function: get max name length of Fixed disk volume mounted on /, it should not be 0", + 0 != uiMaxNameLength ); + } + + +#if ( defined UNX ) || ( defined OS2 ) + void getMaxNameLength_002( ) + { + struct statvfs aStatFS; + static const sal_Char name[] = "/"; + + memset (&aStatFS, 0, sizeof(aStatFS)); + statvfs( name, &aStatFS); + sal_uInt64 MaxNameLength = aStatFS.f_namemax; + + sal_Int32 mask = VolumeInfoMask_MaxNameLength; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiMaxNameLength = aVolumeInfo.getMaxNameLength( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getMaxNameLength function: get max name length by hand, then compare with getMaxNameLength", + uiMaxNameLength == MaxNameLength ); + } +#else //Windows version + void getMaxNameLength_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getMaxNameLength function: not implemented yet( Windows version )", + 1 == 1 ); + } +#endif + + CPPUNIT_TEST_SUITE( getMaxNameLength ); + CPPUNIT_TEST( getMaxNameLength_001 ); + CPPUNIT_TEST( getMaxNameLength_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getMaxNameLength + + + //--------------------------------------------------------------------- + // testing the method + // inline sal_uInt32 getMaxPathLength() const + //--------------------------------------------------------------------- + class getMaxPathLength : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + + public: + // test code. + void getMaxPathLength_001( ) + { + sal_Int32 mask = VolumeInfoMask_MaxPathLength; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt32 uiMaxPathLength = aVolumeInfo.getMaxPathLength( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getMaxPathLength function: get max path length of Fixed disk volume mounted on /, it should not be 0", + 0 != uiMaxPathLength ); + } + + +#if ( defined UNX ) || ( defined OS2 ) + void getMaxPathLength_002( ) + { + sal_Int32 mask = VolumeInfoMask_MaxPathLength; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + sal_uInt64 uiMaxPathLength = aVolumeInfo.getMaxPathLength( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getMaxPathLength function: get max path length by hand, then compare with getMaxPathLength", + uiMaxPathLength == PATH_MAX ); + } +#else //Windows version + void getMaxPathLength_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getMaxPathLength function: not implemented yet( Windows version )", + 1 == 1 ); + } +#endif + + + CPPUNIT_TEST_SUITE( getMaxPathLength ); + CPPUNIT_TEST( getMaxPathLength_001 ); + CPPUNIT_TEST( getMaxPathLength_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getMaxPathLength + + + //--------------------------------------------------------------------- + // testing the method + // inline ::rtl::OUString getFileSystemName() const + //--------------------------------------------------------------------- + class getFileSystemName : public CppUnit::TestFixture + { + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1; + + public: + // test code. + void getFileSystemName_001( ) + { + sal_Int32 mask = VolumeInfoMask_FileSystemName; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + aUStr = aVolumeInfo.getFileSystemName( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileSystemName function: get file system name of Fixed disk volume mounted on /, it should not be empty string", + sal_False == compareFileName( aNullURL, aUStr ) ); + } + + +#if defined(SOLARIS) + void getFileSystemName_002( ) + { + struct statvfs aStatFS; + static const sal_Char name[] = "/"; + + memset (&aStatFS, 0, sizeof(aStatFS)); + statvfs( name, &aStatFS); + sal_Char * astrFileSystemName = aStatFS.f_basetype; + + sal_Int32 mask = VolumeInfoMask_FileSystemName; + ::osl::VolumeInfo aVolumeInfo( mask ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + CPPUNIT_ASSERT( sal_True == aVolumeInfo.isValid( mask ) ); + aUStr = aVolumeInfo.getFileSystemName( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileSystemName function: get file system name by hand, then compare with getFileSystemName", + sal_True == compareFileName( aUStr, astrFileSystemName ) ); + } +#else //Windows version + void getFileSystemName_002( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getFileSystemName function: not implemented yet( Windows version )", + 1 == 1 ); + } +#endif + + + CPPUNIT_TEST_SUITE( getFileSystemName ); + CPPUNIT_TEST( getFileSystemName_001 ); + CPPUNIT_TEST( getFileSystemName_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getFileSystemName + + //--------------------------------------------------------------------- + // testing the method + // inline VolumeDevice getDeviceHandle() const + //--------------------------------------------------------------------- + class getDeviceHandle : public CppUnit::TestFixture + { + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1; + + public: + // test code. + void getDeviceHandle_001( ) + { + ::osl::VolumeInfo aVolumeInfo( VolumeInfoMask_Attributes ); + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + CPPUNIT_ASSERT( osl::FileBase::E_None == nError1 ); + + ::osl::VolumeDevice aVolumeDevice1( aVolumeInfo.getDeviceHandle( ) ); + sal_Bool bOk = compareFileName( aNullURL, aVolumeDevice1.getMountPath( ) ); + + CPPUNIT_ASSERT_MESSAGE( "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).", + ( sal_False == bOk ) ); + } + + CPPUNIT_TEST_SUITE( getDeviceHandle ); + CPPUNIT_TEST( getDeviceHandle_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getDeviceHandle + + + // ----------------------------------------------------------------------------- + /*CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::ctors, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::isValid, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getRemoteFlag, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getRemoveableFlag, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getCompactDiscFlag, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getFloppyDiskFlag, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getFixedDiskFlag, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getRAMDiskFlag, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getTotalSpace, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getFreeSpace, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getUsedSpace, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getMaxNameLength, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getMaxPathLength, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getFileSystemName, "osl_VolumeInfo" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_VolumeInfo::getDeviceHandle, "osl_VolumeInfo" );*/ +}// namespace osl_VolumeInfo + + + +//------------------------------------------------------------------------ +// Beginning of the test cases for VolumeDevice class +//------------------------------------------------------------------------ +namespace osl_FileStatus +{ + + //--------------------------------------------------------------------- + // testing the method + // FileStatus( sal_uInt32 nMask ): _nMask( nMask ) + //--------------------------------------------------------------------- + class ctors : public CppUnit::TestFixture + { + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1, nError2; + ::osl::DirectoryItem rItem; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + ::std::auto_ptr<Directory> pDir( new Directory( aTmpName3 ) ); + nError1 = pDir->open( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = pDir->getNextItem( rItem, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + pDir->close(); + /* + Directory aDir( aTmpName3 ); + nError1 = aDir.open(); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = aDir.getNextItem( rItem, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + aDir.close(); + */ + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void ctors_001( ) + { + ::osl::FileStatus rFileStatus( FileStatusMask_All ); + nError1 = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + aUStr = rFileStatus.getFileName( ); + + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: mask all and see the file name", + sal_True == compareFileName( aUStr, aTmpName2) ); + } + + void ctors_002( ) + { + ::osl::FileStatus rFileStatus( 0 ); + nError1 = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + aUStr = rFileStatus.getFileName( ); + + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: mask is empty", + sal_True == compareFileName( aUStr, aNullURL) ); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_001 ); + CPPUNIT_TEST( ctors_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class ctors + + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool isValid( sal_uInt32 nMask ) const + //--------------------------------------------------------------------- + class isValid : public CppUnit::TestFixture + { + ::rtl::OUString aUStr; + ::osl::Directory *pDir; + ::osl::DirectoryItem rItem_file, rItem_link; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + pDir = new Directory( aTmpName3 ); + //::std::auto_ptr<Directory> pDir( new Directory( aTmpName3 ) ); + ::osl::FileBase::RC nError1 = pDir->open( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = pDir->getNextItem( rItem_file, 1 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + ::osl::FileBase::RC nError1 = pDir->close( ); + delete pDir; + CPPUNIT_ASSERT_MESSAGE( errorToStr(nError1), ::osl::FileBase::E_None == nError1 ); + + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void isValid_001( ) + { + sal_uInt32 mask = 0; + ::osl::FileStatus rFileStatus( mask ); + ::osl::FileBase::RC nError1 = rItem_file.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + sal_Bool bOk = rFileStatus.isValid( mask ); + + CPPUNIT_ASSERT_MESSAGE( "test for isValid function: no fields specified", + ( sal_True == bOk ) ); + } + + void check_FileStatus(::osl::FileStatus const& _aStatus) + { + rtl::OString sStat; + if (_aStatus.isValid(FileStatusMask_Type)) + { + sStat += "type "; + } + if (_aStatus.isValid(FileStatusMask_Attributes)) + { + sStat += "attributes "; + } + if (_aStatus.isValid(FileStatusMask_CreationTime)) + { + sStat += "ctime "; + } + if (_aStatus.isValid(FileStatusMask_AccessTime)) + { + sStat += "atime "; + } + if (_aStatus.isValid(FileStatusMask_ModifyTime)) + { + sStat += "mtime "; + } + if (_aStatus.isValid(FileStatusMask_FileSize)) + { + sStat += "filesize "; + } + if (_aStatus.isValid(FileStatusMask_FileName)) + { + sStat += "filename "; + } + if (_aStatus.isValid(FileStatusMask_FileURL)) + { + sStat += "fileurl "; + } + t_print("mask: %s\n", sStat.getStr()); + } + + void isValid_002( ) + { + createTestFile( aTmpName6 ); + sal_uInt32 mask_file = ( FileStatusMask_Type | FileStatusMask_Attributes | + FileStatusMask_CreationTime | FileStatusMask_AccessTime | + FileStatusMask_ModifyTime | FileStatusMask_FileSize | + FileStatusMask_FileName | FileStatusMask_FileURL) ; + ::osl::FileStatus rFileStatus( mask_file ); + ::osl::FileBase::RC nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem_file ); + nError1 = rItem_file.getFileStatus( rFileStatus ); + + CPPUNIT_ASSERT_MESSAGE( errorToStr(nError1), ::osl::FileBase::E_None == nError1 ); + +// LLA: this is wrong, we never should try to check on all masks +// only on one. +// Second, it's not a bug, if a value is not valid, it's an unhandled feature. + +// sal_Bool bOk = rFileStatus.isValid( mask_file ); + + check_FileStatus(rFileStatus); + deleteTestFile( aTmpName6 ); + + // CPPUNIT_ASSERT_MESSAGE( "test for isValid function: regular file mask fields test, #FileStatusMask_CreationTime# should be valid field for regular file, but feedback is invalid", + // ( sal_True == bOk ) ); + } + + //Link is not defined in Windows, and on Linux, we can not get the directory item of the link file + // LLA: we have to differ to filesystems, normal filesystems support links (EXT2, ...) + // castrated filesystems don't (FAT, FAT32) + // Windows NT NTFS support links, but the windows api don't :-( + + void isValid_003( ) + { +#if defined ( UNX ) + // ::osl::FileBase::RC nError; + sal_Int32 fd; + + ::rtl::OUString aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys ); + ( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpdir/link.file"); + ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpdir/tmpname"); + + rtl::OString strLinkFileName; + rtl::OString strSrcFileName; + strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US ); + strSrcFileName = OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US ); + + //create a link file and link it to file "/tmp/PID/tmpdir/tmpname" + fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() ); + CPPUNIT_ASSERT( fd == 0 ); + + // testDirectory is "/tmp/PID/tmpdir/" + ::osl::Directory testDirectory( aTmpName3 ); + ::osl::FileBase::RC nError1 = testDirectory.open( ); + ::rtl::OUString aFileName = ::rtl::OUString::createFromAscii("link.file"); + sal_Bool bOk = sal_False; + while (1) { + nError1 = testDirectory.getNextItem( rItem_link, 4 ); + if (::osl::FileBase::E_None == nError1) { + sal_uInt32 mask_link = FileStatusMask_FileName | FileStatusMask_LinkTargetURL; + ::osl::FileStatus rFileStatus( mask_link ); + rItem_link.getFileStatus( rFileStatus ); + //printFileName( rFileStatus.getFileName( ) ); + if ( compareFileName( rFileStatus.getFileName( ), aFileName) == sal_True ) + { + //t_print("find the link file"); + if ( sal_True == rFileStatus.isValid( FileStatusMask_LinkTargetURL ) ) + { + bOk = sal_True; + break; + } + } + } + else + break; + }; + + fd = remove( strLinkFileName ); + CPPUNIT_ASSERT( fd == 0 ); + + CPPUNIT_ASSERT_MESSAGE("test for isValid function: link file, check for LinkTargetURL", + ( sal_True == bOk ) ); +#endif + } + + void isValid_004( ) + { + sal_uInt32 mask_file_all = FileStatusMask_All; + ::osl::FileStatus rFileStatus_all( mask_file_all ); + ::osl::FileBase::RC nError1 = rItem_file.getFileStatus( rFileStatus_all ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + check_FileStatus(rFileStatus_all); +// LLA: this is wrong +// sal_Bool bOk1 = rFileStatus_all.isValid( mask_file_all ); + + sal_uInt32 mask_file_val = FileStatusMask_Validate; + ::osl::FileStatus rFileStatus_val( mask_file_val ); + nError1 = rItem_file.getFileStatus( rFileStatus_val ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + // sal_Bool bOk2 = rFileStatus_val.isValid( mask_file_val ); + + check_FileStatus(rFileStatus_val); + // CPPUNIT_ASSERT_MESSAGE( "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).", + // ( sal_False == bOk1 ) && ( sal_True == bOk2 ) ); + } + + + CPPUNIT_TEST_SUITE( isValid ); + CPPUNIT_TEST( isValid_001 ); + CPPUNIT_TEST( isValid_002 ); + CPPUNIT_TEST( isValid_003 ); + CPPUNIT_TEST( isValid_004 ); + CPPUNIT_TEST_SUITE_END( ); + };// class ctors + + + //--------------------------------------------------------------------- + // testing the method + // inline Type getFileType() const + //--------------------------------------------------------------------- + class getFileType : public CppUnit::TestFixture + { + ::rtl::OUString aUStr; + ::osl::FileBase::RC nError1, nError2; + + ::osl::DirectoryItem m_aItem_1, m_aItem_2, m_aVolumeItem, m_aFifoItem; + ::osl::DirectoryItem m_aLinkItem, m_aSocketItem, m_aSpecialItem; + + public: + // initialization + void setUp( ) + { + // create a tempfile: $TEMP/tmpdir/tmpname. + // a tempdirectory: $TEMP/tmpdir/tmpdir. + // use $ROOT/staroffice as volume ---> use dev/fd as volume. + // and get their directory item. + createTestDirectory( aTmpName3 ); + //printFileName( aTmpName2); + createTestFile( aTmpName3, aTmpName2 ); + createTestDirectory( aTmpName3, aTmpName1 ); + + ::std::auto_ptr<Directory> pDir( new Directory( aTmpName3 ) ); + nError1 = pDir->open( ); + CPPUNIT_ASSERT_MESSAGE("open aTmpName3 failed!", ::osl::FileBase::E_None == nError1 ); + //getNextItem can not assure which item retrieved + nError1 = pDir->getNextItem( m_aItem_1, 1 ); + CPPUNIT_ASSERT_MESSAGE("get first item failed!", ::osl::FileBase::E_None == nError1 ); + + nError1 = pDir->getNextItem( m_aItem_2 ); + CPPUNIT_ASSERT_MESSAGE("get second item failed!", ::osl::FileBase::E_None == nError1 ); + pDir->close(); + //mindy: failed on my RH9,so removed temporaly + //nError1 = ::osl::DirectoryItem::get( aVolURL2, m_aVolumeItem ); + //CPPUNIT_ASSERT_MESSAGE("get volume item failed!", ::osl::FileBase::E_None == nError1 ); + + } + + void tearDown( ) + { + // remove all in $TEMP/tmpdir. + deleteTestDirectory( aTmpName3, aTmpName1 ); + deleteTestFile( aTmpName3, aTmpName2 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void getFileType_001( ) + { + ::osl::FileStatus rFileStatus( FileStatusMask_Type | FileStatusMask_FileName ); + nError1 = m_aItem_1.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT_MESSAGE("getFileStatus failed", ::osl::FileBase::E_None == nError1 ); + + check_FileType(rFileStatus); + } + + void check_FileType(osl::FileStatus const& _rFileStatus ) + { + sal_Bool bOK = sal_False; + if ( _rFileStatus.isValid(FileStatusMask_FileName)) + { + rtl::OUString suFilename = _rFileStatus.getFileName(); + + if ( _rFileStatus.isValid(FileStatusMask_Type)) + { + osl::FileStatus::Type eType = _rFileStatus.getFileType( ); + + if ( compareFileName( suFilename, aTmpName2) == sal_True ) + { + // regular + bOK = ( eType == osl::FileStatus::Regular ); + } + if ( compareFileName( suFilename, aTmpName1) == sal_True ) + { + // directory + bOK = ( eType == ::osl::FileStatus::Directory ); + } + + CPPUNIT_ASSERT_MESSAGE( "test for getFileType function: ", + ( bOK == sal_True ) ); + } + } + // LLA: it's not a bug, if a FileStatus not exist, so no else + } + + void getFileType_002( ) + { + ::osl::FileStatus rFileStatus( FileStatusMask_Type | FileStatusMask_FileName ); + nError1 = m_aItem_2.getFileStatus( rFileStatus ); + + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + check_FileType(rFileStatus); + } + + void getFileType_003( ) + { +#if 0 +// LLA: this have to be discussed. + ::osl::FileStatus rFileStatus( FileStatusMask_Type ); + nError1 = m_aVolumeItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + if (rFileStatus.isValid(FileStatusMask_Type)) + { + osl::FileStatus::Type eType = rFileStatus.getFileType( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileType function: Volume, it seems the volume part of the field is not implemented, it did not pass in (W32)(UNX).", + ( eType == ::osl::FileStatus::Volume ) ); + } +#endif + } + + + void getFileType_004( ) + { +#if ( defined UNX ) || ( defined OS2 ) //Fifo creation is differ in Windows + + //create a fifo in $ROOT/tmp/tmpdir, get its DirectoryItem. + rtl::OString strFifoSys; + strFifoSys = OUStringToOString( aFifoSys, RTL_TEXTENCODING_ASCII_US ); + ::rtl::OUString aFifoURL; + + int fd = mkfifo( strFifoSys.getStr(), O_RDWR | O_CREAT ); + CPPUNIT_ASSERT_MESSAGE("mkfifo failed!", fd == 0 ); + ::osl::FileBase::getFileURLFromSystemPath( aFifoSys, aFifoURL ); + + nError1 = ::osl::DirectoryItem::get( aFifoURL, m_aFifoItem ); + CPPUNIT_ASSERT_MESSAGE("get item failed!", ::osl::FileBase::E_None == nError1 ); + + //check for File type + ::osl::FileStatus rFileStatus( FileStatusMask_Type ); + nError1 = m_aFifoItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT_MESSAGE("get Status failed!", ::osl::FileBase::E_None == nError1 ); + + //delete fifo + nError1 = ::osl::File::remove( aFifoURL ); + CPPUNIT_ASSERT_MESSAGE("remove file failed!", ::osl::FileBase::E_None == nError1 ); + + if (rFileStatus.isValid(FileStatusMask_Type)) + { + osl::FileStatus::Type eType = rFileStatus.getFileType( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileType function: Fifo, Solaris version ", + ( eType == ::osl::FileStatus::Fifo ) ); + } +#endif + } + +/* + * LLA: removed, m_aSocketItem is wrong initialised. + */ + +// LLA: void getFileType_005( ) +// LLA: { +// LLA: #if defined ( SOLARIS ) //Socket file may differ in Windows +// LLA: // nError1 = ::osl::DirectoryItem::get( aTypeURL1, m_aSocketItem ); +// LLA: nError1 = ::osl::DirectoryItem::get( rtl::OUString::createFromAscii("/dev/null"), m_aSocketItem ); +// LLA: printError(nError1); +// LLA: CPPUNIT_ASSERT_MESSAGE("get Socket type file failed", ::osl::FileBase::E_None == nError1 ); +// LLA: +// LLA: //check for File type +// LLA: ::osl::FileStatus rFileStatus( FileStatusMask_Type ); +// LLA: +// LLA: nError1 = m_aSocketItem.getFileStatus( rFileStatus ); +// LLA: CPPUNIT_ASSERT_MESSAGE("getFileStatus failed", ::osl::FileBase::E_None == nError1 ); +// LLA: +// LLA: if (rFileStatus.isValid( FileStatusMask_Type )) +// LLA: { +// LLA: osl::FileStatus::Type eType = rFileStatus.getFileType( ); +// LLA: printFileType(eType); +// LLA: CPPUNIT_ASSERT_MESSAGE( "test for getFileType function: Socket, Solaris version ", +// LLA: ( eType == ::osl::FileStatus::Socket ) ); +// LLA: } +// LLA: #endif +// LLA: } + + +// deprecated since there is a same case Directory::getNextItem_004 +/*#if defined 0 //( UNX ) //( SOLARIS ) //Link file is not defined in Windows + void getFileType_006( ) + { + nError1 = ::osl::DirectoryItem::get( aTypeURL3, m_aLinkItem ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //check for File type + ::osl::FileStatus rFileStatus( FileStatusMask_Type ); + nError1 = m_aLinkItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileType function: Link, UNX version ", + ( ::osl::FileStatus::Link == rFileStatus.getFileType( ) ) ); + } +#endif */ + + void getFileType_007( ) + { +#if defined ( SOLARIS ) //Special file is differ in Windows + nError1 = ::osl::DirectoryItem::get( aTypeURL2, m_aSpecialItem ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //check for File type + ::osl::FileStatus rFileStatus( FileStatusMask_Type ); + nError1 = m_aSpecialItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + if (rFileStatus.isValid(FileStatusMask_Type)) + { + osl::FileStatus::Type eType = rFileStatus.getFileType( ); + + + CPPUNIT_ASSERT_MESSAGE( "test for getFileType function: Special, Solaris version ", + ( eType == ::osl::FileStatus::Special ) ); + } +#endif + } + + CPPUNIT_TEST_SUITE( getFileType ); + CPPUNIT_TEST( getFileType_001 ); + CPPUNIT_TEST( getFileType_002 ); + CPPUNIT_TEST( getFileType_003 ); + CPPUNIT_TEST( getFileType_004 ); + // LLA: CPPUNIT_TEST( getFileType_005 ); + //CPPUNIT_TEST( getFileType_006 ); + CPPUNIT_TEST( getFileType_007 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getFileType + + //--------------------------------------------------------------------- + // testing the method + // inline sal_uInt64 getAttributes() const + //--------------------------------------------------------------------- + class getAttributes : public CppUnit::TestFixture + { + ::rtl::OUString aTypeURL, aTypeURL_Hid; + ::osl::FileBase::RC nError; + ::osl::DirectoryItem rItem, rItem_hidden; + + public: + // initialization + void setUp( ) + { + aTypeURL = aUserDirectoryURL.copy( 0 ); + concatURL( aTypeURL, aTmpName2 ); + createTestFile( aTypeURL ); + nError = ::osl::DirectoryItem::get( aTypeURL, rItem ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + aTypeURL_Hid = aUserDirectoryURL.copy( 0 ); + concatURL( aTypeURL_Hid, aHidURL1 ); + createTestFile( aTypeURL_Hid ); + nError = ::osl::DirectoryItem::get( aTypeURL_Hid, rItem_hidden ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + } + + void tearDown( ) + { + deleteTestFile( aTypeURL ); + deleteTestFile( aTypeURL_Hid ); + } + + // test code. +#if ( defined UNX ) || ( defined OS2 ) +//windows only 3 file attributes: normal, readonly, hidden + void getAttributes_001( ) + { + changeFileMode( aTypeURL, S_IRUSR | S_IRGRP | S_IROTH ); + + ::osl::FileStatus rFileStatus( FileStatusMask_Attributes ); + nError = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + CPPUNIT_ASSERT_MESSAGE( "test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead( UNX version ) ", + ( Attribute_ReadOnly | Attribute_GrpRead | Attribute_OwnRead | Attribute_OthRead ) == + rFileStatus.getAttributes( ) ); + } +#else //Windows version + void getAttributes_001( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead( Windows version )", + 1 == 1 ); + } +#endif + + + void getAttributes_002( ) + { +#if ( defined UNX ) || ( defined OS2 ) + changeFileMode( aTypeURL, S_IXUSR | S_IXGRP | S_IXOTH ); + + ::osl::FileStatus rFileStatus( FileStatusMask_Attributes ); + nError = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + CPPUNIT_ASSERT_MESSAGE( "test for getAttributes function: Executable, GrpExe, OwnExe, OthExe, the result is Readonly, Executable, GrpExe, OwnExe, OthExe, it partly not pass( Solaris version )", + ( Attribute_ReadOnly | Attribute_Executable | Attribute_GrpExe | Attribute_OwnExe | Attribute_OthExe ) == + rFileStatus.getAttributes( ) ); +#endif + } + + +#if ( defined UNX ) || ( defined OS2 ) + void getAttributes_003( ) + { + changeFileMode( aTypeURL, S_IWUSR | S_IWGRP | S_IWOTH ); + + ::osl::FileStatus rFileStatus( FileStatusMask_Attributes ); + nError = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + CPPUNIT_ASSERT_MESSAGE( "test for getAttributes function: GrpWrite, OwnWrite, OthWrite( Solaris version )", + ( Attribute_GrpWrite | Attribute_OwnWrite | Attribute_OthWrite ) == + rFileStatus.getAttributes( ) ); + } +#else //Windows version + void getAttributes_003( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getAttributes function: GrpWrite, OwnWrite, OthWrite( Windows version )", + 1 == 1 ); + } +#endif + +#if ( defined UNX ) || ( defined OS2 ) //hidden file definition may different in Windows + void getAttributes_004( ) + { + sal_Int32 test_Attributes = Attribute_Hidden; + ::osl::FileStatus rFileStatus( FileStatusMask_Attributes ); + nError = rItem_hidden.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + test_Attributes &= rFileStatus.getAttributes( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getAttributes function: Hidden files( Solaris version )", + test_Attributes == Attribute_Hidden ); + } +#else //Windows version + void getAttributes_004( ) + { + ::rtl::OUString aUserHiddenFileURL = ::rtl::OUString::createFromAscii("file:///c:/AUTOEXEC.BAT"); + nError = ::osl::DirectoryItem::get( aUserHiddenFileURL, rItem_hidden ); + //printFileName( aUserHiddenFileURL ); + CPPUNIT_ASSERT_MESSAGE("get item fail", nError == FileBase::E_None ); + ::osl::FileStatus rFileStatus( FileStatusMask_Attributes ); + nError = rItem_hidden.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + CPPUNIT_ASSERT_MESSAGE( "Hidden files(Windows version), please check if hidden file c:/AUTOEXEC.BAT exists ", + (rFileStatus.getAttributes( ) & Attribute_Hidden)!= 0 ); + } +#endif + + CPPUNIT_TEST_SUITE( getAttributes ); + CPPUNIT_TEST( getAttributes_001 ); + CPPUNIT_TEST( getAttributes_002 ); + CPPUNIT_TEST( getAttributes_003 ); + CPPUNIT_TEST( getAttributes_004 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getAttributes + + //--------------------------------------------------------------------- + // testing the method + // inline TimeValue getAccessTime() const + //--------------------------------------------------------------------- + class getAccessTime : public CppUnit::TestFixture + { + ::rtl::OUString aTypeURL; + ::osl::FileBase::RC nError; + ::osl::DirectoryItem rItem; + + public: + // initialization + void setUp( ) + { + aTypeURL = aUserDirectoryURL.copy( 0 ); + concatURL( aTypeURL, aTmpName2 ); + createTestFile( aTypeURL ); + nError = ::osl::DirectoryItem::get( aTypeURL, rItem ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + } + + void tearDown( ) + { + deleteTestFile( aTypeURL ); + } + + // test code. + void getAccessTime_001( ) + { + TimeValue *pTV_current = NULL; + CPPUNIT_ASSERT( ( pTV_current = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL ); + TimeValue *pTV_access = NULL; + CPPUNIT_ASSERT( ( pTV_access = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL ); + + ::osl::FileStatus rFileStatus( FileStatusMask_AccessTime ); + nError = rItem.getFileStatus( rFileStatus ); + sal_Bool bOk = osl_getSystemTime( pTV_current ); + CPPUNIT_ASSERT( sal_True == bOk && nError == FileBase::E_None ); + + *pTV_access = rFileStatus.getAccessTime( ); + + sal_Bool bOK = t_compareTime( pTV_access, pTV_current, delta ); + free( pTV_current ); + free( pTV_access ); + + CPPUNIT_ASSERT_MESSAGE( "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. ", + sal_True == bOK ); + } + + CPPUNIT_TEST_SUITE( getAccessTime ); + CPPUNIT_TEST( getAccessTime_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getAccessTime + + //--------------------------------------------------------------------- + // testing the method + // inline TimeValue getModifyTime() const + //--------------------------------------------------------------------- + class getModifyTime : public CppUnit::TestFixture + { + ::rtl::OUString aTypeURL; + ::osl::FileBase::RC nError; + ::osl::DirectoryItem rItem; + + public: + + // test code. + void getModifyTime_001( ) + { + TimeValue *pTV_current = NULL; + CPPUNIT_ASSERT( ( pTV_current = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL ); + + //create file + aTypeURL = aUserDirectoryURL.copy( 0 ); + concatURL( aTypeURL, aTmpName2 ); + createTestFile( aTypeURL ); + + //get current time + sal_Bool bOk = osl_getSystemTime( pTV_current ); + CPPUNIT_ASSERT( sal_True == bOk ); + + //get instance item and filestatus + nError = ::osl::DirectoryItem::get( aTypeURL, rItem ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + ::osl::FileStatus rFileStatus( FileStatusMask_ModifyTime ); + nError = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + //get modify time + TimeValue *pTV_modify = NULL; + CPPUNIT_ASSERT( ( pTV_modify = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL ); + *pTV_modify = rFileStatus.getModifyTime( ); + + sal_Bool bOK = t_compareTime( pTV_modify, pTV_current, delta ); + //delete file + deleteTestFile( aTypeURL ); + free( pTV_current ); + + CPPUNIT_ASSERT_MESSAGE( "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. ", + sal_True == bOK ); + } + + CPPUNIT_TEST_SUITE( getModifyTime ); + CPPUNIT_TEST( getModifyTime_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getModifyTime + + + //--------------------------------------------------------------------- + // testing the method + // inline sal_uInt64 getFileSize() const + //--------------------------------------------------------------------- + class getFileSize : public CppUnit::TestFixture + { + ::rtl::OUString aTypeURL; + ::osl::FileBase::RC nError; + ::osl::DirectoryItem rItem; + + public: + // initialization + void setUp( ) + { + aTypeURL = aUserDirectoryURL.copy( 0 ); + concatURL( aTypeURL, aTmpName2 ); + createTestFile( aTypeURL ); + nError = ::osl::DirectoryItem::get( aTypeURL, rItem ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + } + + void tearDown( ) + { + deleteTestFile( aTypeURL ); + } + + // test code. + void getFileSize_001( ) + { + ::osl::FileStatus rFileStatus( FileStatusMask_FileSize ); + nError = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + sal_uInt64 uFileSize = rFileStatus.getFileSize( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileSize function: empty file ", + 0 == uFileSize ); + } + + void getFileSize_002( ) + { + ::osl::File testfile( aTypeURL ); + nError = testfile.open( OpenFlag_Write | OpenFlag_Read ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError ); + nError = testfile.setSize( TEST_FILE_SIZE ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError ); + + nError = ::osl::DirectoryItem::get( aTypeURL, rItem ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + ::osl::FileStatus rFileStatus( FileStatusMask_FileSize ); + nError = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + sal_uInt64 uFileSize = rFileStatus.getFileSize( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileSize function: file with size of TEST_FILE_SIZE, did not pass in (W32). ", + TEST_FILE_SIZE == uFileSize ); + } + CPPUNIT_TEST_SUITE( getFileSize ); + CPPUNIT_TEST( getFileSize_001 ); + CPPUNIT_TEST( getFileSize_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getFileSize + + //--------------------------------------------------------------------- + // testing the method + // inline ::rtl::OUString getFileName() const + //--------------------------------------------------------------------- + class getFileName : public CppUnit::TestFixture + { + ::rtl::OUString aTypeURL; + ::osl::FileBase::RC nError; + ::osl::DirectoryItem rItem; + + public: + // initialization + void setUp( ) + { + aTypeURL = aUserDirectoryURL.copy( 0 ); + concatURL( aTypeURL, aTmpName2 ); + createTestFile( aTypeURL ); + nError = ::osl::DirectoryItem::get( aTypeURL, rItem ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + } + + void tearDown( ) + { + deleteTestFile( aTypeURL ); + } + + // test code. + void getFileName_001( ) + { + ::osl::FileStatus rFileStatus( FileStatusMask_FileName ); + nError = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + ::rtl::OUString aFileName = rFileStatus.getFileName( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileName function: name compare with specify", + sal_True == compareFileName( aFileName, aTmpName2 ) ); + } + + CPPUNIT_TEST_SUITE( getFileName ); + CPPUNIT_TEST( getFileName_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getFileName + + //--------------------------------------------------------------------- + // testing the method + // inline ::rtl::OUString getFileURL() const + //--------------------------------------------------------------------- + class getFileURL : public CppUnit::TestFixture + { + ::rtl::OUString aTypeURL; + ::osl::FileBase::RC nError; + ::osl::DirectoryItem rItem; + + public: + // initialization + void setUp( ) + { + createTestFile( aTmpName6 ); + nError = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + } + + void tearDown( ) + { + deleteTestFile( aTmpName6 ); + } + + // test code. + void getFileURL_001( ) + { + ::osl::FileStatus rFileStatus( FileStatusMask_FileURL ); + nError = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError == FileBase::E_None ); + + ::rtl::OUString aFileURL = rFileStatus.getFileURL( ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileURL function: ", + sal_True == compareFileName( aFileURL, aTmpName6 ) ); + } + + CPPUNIT_TEST_SUITE( getFileURL ); + CPPUNIT_TEST( getFileURL_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getFileURL + + //--------------------------------------------------------------------- + // testing the method + // inline ::rtl::OUString getLinkTargetURL() const + //--------------------------------------------------------------------- + class getLinkTargetURL : public CppUnit::TestFixture + { + ::rtl::OUString aTypeURL; + ::osl::FileBase::RC nError; + ::osl::DirectoryItem rItem; + + public: + // test code. + // initialization + void setUp( ) + { + aTypeURL = aUserDirectoryURL.copy( 0 ); + concatURL( aTypeURL, aTmpName2 ); + createTestFile( aTypeURL ); + } + + void tearDown( ) + { + deleteTestFile( aTypeURL ); + } + +#if ( defined UNX ) || ( defined OS2 ) //Link file is not define in Windows + void getLinkTargetURL_001( ) + { + //create a link file; + ::rtl::OUString aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys ); + ( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/link.file"); + ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpname"); + + rtl::OString strLinkFileName, strSrcFileName; + strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US ); + strSrcFileName = OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US ); + + sal_Int32 fd; + fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() ); + CPPUNIT_ASSERT_MESSAGE( "in creating link file", fd == 0 ); + + //get linkTarget URL + nError = ::osl::DirectoryItem::get( aLnkURL1, rItem ); + CPPUNIT_ASSERT_MESSAGE( "in getting link file item", nError == FileBase::E_None ); + + ::osl::FileStatus rFileStatus( FileStatusMask_LinkTargetURL ); + nError = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT_MESSAGE( "in getting link file status", nError == FileBase::E_None ); + ::rtl::OUString aFileURL = rFileStatus.getLinkTargetURL( ); + + //remove link file + fd = remove( strLinkFileName.getStr() ); + CPPUNIT_ASSERT_MESSAGE( "in deleting link file", fd == 0 ); + + CPPUNIT_ASSERT_MESSAGE( "test for getLinkTargetURL function: Solaris version, creat a file, and a link file link to it, get its LinkTargetURL and compare", + sal_True == compareFileName( aFileURL, aTypeURL ) ); + } +#else + void getLinkTargetURL_001( ) + { + CPPUNIT_ASSERT_MESSAGE( "test for getLinkTargetURL function: Windows version, not tested", + 1 ); + } +#endif + + CPPUNIT_TEST_SUITE( getLinkTargetURL ); + CPPUNIT_TEST( getLinkTargetURL_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getLinkTargetURL + + // ----------------------------------------------------------------------------- + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::ctors, "osl_FileStatus" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::isValid, "osl_FileStatus" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::getFileType, "osl_FileStatus" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::getAttributes, "osl_FileStatus" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::getAccessTime, "osl_FileStatus" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::getModifyTime, "osl_FileStatus" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::getFileSize, "osl_FileStatus" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::getFileName, "osl_FileStatus" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::getFileURL, "osl_FileStatus" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_FileStatus::getLinkTargetURL, "osl_FileStatus" ); +}// namespace osl_FileStatus + + + +//------------------------------------------------------------------------ +// Beginning of the test cases for File class +//------------------------------------------------------------------------ +namespace osl_File +{ + //--------------------------------------------------------------------- + // testing the method + // File( const ::rtl::OUString& ustrFileURL ) + //--------------------------------------------------------------------- + class ctors : public CppUnit::TestFixture + { + // ::osl::FileBase::RC nError1; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void ctors_001( ) + { + ::osl::File testFile( aTmpName4 ); + + ::osl::FileBase::RC nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + ::osl::FileBase::RC nError2 = testFile.close( ); + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: initialize a File and test its open and close", + ( ::osl::FileBase::E_None == nError1 ) && ( ::osl::FileBase::E_None == nError2 ) ); + } + + void ctors_002( ) + { + ::osl::File testFile( aTmpName5 ); + sal_Char buffer[30] = "Test for File constructor"; + sal_uInt64 nCount; + + ::osl::FileBase::RC nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + ::osl::FileBase::RC nError2 = testFile.write( buffer, 30, nCount ); + testFile.close( ); + + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: test relative file URL, this test show that relative file URL is also acceptable", + ( ::osl::FileBase::E_None == nError1 ) && ( ::osl::FileBase::E_None == nError2 ) ); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_001 ); + CPPUNIT_TEST( ctors_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class ctors + + //--------------------------------------------------------------------- + // testing the method + // inline RC open( sal_uInt32 uFlags ) + //--------------------------------------------------------------------- + class open : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2, nError3; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void open_001( ) + { + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + nError2 = testFile.close( ); + CPPUNIT_ASSERT_MESSAGE("close error", ::osl::FileBase::E_None == nError2 ); + + CPPUNIT_ASSERT_MESSAGE( "test for open function: open a regular file", + ::osl::FileBase::E_None == nError1 ); + } + + void open_002( ) + { + ::osl::File testFile( aTmpName3 ); + + nError1 = testFile.open( OpenFlag_Read ); + + CPPUNIT_ASSERT_MESSAGE( "test for open function: open a directory", + ( File::E_INVAL == nError1 ) || ( File::E_ACCES == nError1 ) ); + } + + void open_003( ) + { + ::osl::File testFile( aCanURL1 ); + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + + CPPUNIT_ASSERT_MESSAGE( "test for open function: open a non-exist file", + File::E_NOENT == nError1 ); + } + + void open_004( ) + { + ::rtl::OUString aTestFile( aRootURL ); + concatURL( aTestFile, aTmpName2 ); + ::osl::File testFile( aTestFile ); + + nError1 = testFile.open( OpenFlag_Create ); + sal_Bool bOK = ( File::E_ACCES == nError1 ); +#if defined (WNT ) + bOK = sal_True; /// in Windows, you can create file in c:/ any way. + testFile.close( ); + deleteTestFile( aTestFile); +#endif + + CPPUNIT_ASSERT_MESSAGE( "test for open function: create an illegal file", + bOK == sal_True ); + } + + void open_005( ) + { + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Create ); + + CPPUNIT_ASSERT_MESSAGE( "test for open function: create an exist file", + File::E_EXIST == nError1 ); + } + + void open_006( ) + { + ::osl::File testFile( aCanURL1 ); + sal_Char buffer_write[30] = "Test for File open"; + sal_Char buffer_read[30]; + sal_uInt64 nCount_write, nCount_read; + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write | OpenFlag_Create ); + nError2 = testFile.write( buffer_write, 30, nCount_write ); + ::osl::FileBase::RC nError4 = testFile.setPos( Pos_Absolut, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError4 ); + nError3 = testFile.read( buffer_read, 10, nCount_read ); + + ::osl::FileBase::RC nError5 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError5 ); + ::osl::FileBase::RC nError6 = testFile.remove( aCanURL1 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError6 ); + + CPPUNIT_ASSERT_MESSAGE( "test for open function: test for OpenFlag_Read,OpenFlag_Write and OpenFlag_Create", + ( ::osl::FileBase::E_None == nError1 ) && + ( ::osl::FileBase::E_None == nError2 ) && + ( ::osl::FileBase::E_None == nError3 ) && + ( 30 == nCount_write ) && + ( 10 == nCount_read ) ); + } + + CPPUNIT_TEST_SUITE( open ); + CPPUNIT_TEST( open_001 ); + CPPUNIT_TEST( open_002 ); + CPPUNIT_TEST( open_003 ); + CPPUNIT_TEST( open_004 ); + CPPUNIT_TEST( open_005 ); + CPPUNIT_TEST( open_006 ); + CPPUNIT_TEST_SUITE_END( ); + };// class open + + //--------------------------------------------------------------------- + // testing the method + // inline RC close() + //--------------------------------------------------------------------- + class close : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2, nError3; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void close_001( ) + { + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError2 = testFile.close( ); + + CPPUNIT_ASSERT_MESSAGE( "test for close function: close a regular file", + ::osl::FileBase::E_None == nError2 ); + } + + void close_002( ) + { + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError2 = testFile.close( ); + + nError3 = testFile.setPos( Pos_Absolut, 0 ); + + CPPUNIT_ASSERT_MESSAGE( "test for close function: manipulate a file after it has been closed", + ( ::osl::FileBase::E_None == nError2 ) && + ( ::osl::FileBase::E_None != nError3 ) ); + } + + CPPUNIT_TEST_SUITE( close ); + CPPUNIT_TEST( close_001 ); + CPPUNIT_TEST( close_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class close + + + //--------------------------------------------------------------------- + // testing the method + // inline RC setPos( sal_uInt32 uHow, sal_Int64 uPos ) + //--------------------------------------------------------------------- + class setPos : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + sal_uInt64 nCount_write, nCount_read; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + //write chars into the file. + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void setPos_001( ) + { + ::osl::File testFile( aTmpName4 ); + sal_Char buffer_read[2]; + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.setPos( Pos_Absolut, 26 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.read( buffer_read, 1, nCount_read ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for setPos function: test for Pos_Absolut, set the position to 26, test if the 26th char in file is correct", + buffer_read[0] == pBuffer_Char[26] ); + } + + void setPos_002( ) + { + ::osl::File testFile( aTmpName4 ); + sal_Char buffer_read[2]; + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.setPos( Pos_Absolut, sizeof( pBuffer_Char ) - 2 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.setPos( Pos_Current, 0); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.read( buffer_read, 1, nCount_read ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for setPos function: test for Pos_Current, set the position to end, test if the ( end -1 ) char in file is correct", + buffer_read[0] == pBuffer_Char[sizeof( pBuffer_Char ) - 2] ); + } + + void setPos_003( ) + { + ::osl::File testFile( aTmpName4 ); + sal_Char buffer_read[2]; + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //the file size is smaller than 100 + nError1 = testFile.setPos( Pos_End, -100 ); + CPPUNIT_ASSERT_MESSAGE( "should return error", ::osl::FileBase::E_INVAL == nError1 ); + + nError1 = testFile.setPos( Pos_End, -53 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.read( buffer_read, 1, nCount_read ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for setPos function: test for Pos_End, set the position to end, test if the first char in file is correct", + buffer_read[0] == pBuffer_Char[0] ); + } + + CPPUNIT_TEST_SUITE( setPos ); + CPPUNIT_TEST( setPos_001 ); + CPPUNIT_TEST( setPos_002 ); + CPPUNIT_TEST( setPos_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class setPos + + //--------------------------------------------------------------------- + // testing the method + // inline RC getPos( sal_uInt64& uPos ) + //--------------------------------------------------------------------- + class getPos : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + sal_uInt64 nCount_write, nCount_read; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + //write chars into the file. + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void getPos_001( ) + { + ::osl::File testFile( aTmpName4 ); + sal_uInt64 nFilePointer; + + nError1 = testFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_INVAL == nError1 ); + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.setPos( Pos_Absolut, 26 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for getPos function: set the position to 26, get position and check if it is right", + 26 == nFilePointer ); + } + + CPPUNIT_TEST_SUITE( getPos ); + CPPUNIT_TEST( getPos_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getPos + + + //--------------------------------------------------------------------- + // testing the method + // inline RC isEndOfFile( sal_Bool *pIsEOF ) + //--------------------------------------------------------------------- + class isEndOfFile : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + sal_uInt64 nCount_write, nCount_read; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + //write chars into the file. + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void isEndOfFile_001( ) + { + ::osl::File testFile( aTmpName4 ); + sal_Bool bEOF = sal_False; + sal_Bool *pEOF = &bEOF; + + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.setPos( Pos_End, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.isEndOfFile( pEOF ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for isEndOfFile function: set the position to end, check if reach end", + sal_True == *pEOF ); + } + + void isEndOfFile_002( ) + { + ::osl::File testFile( aTmpName4 ); + sal_Bool bEOF = sal_False; + sal_Bool *pEOF = &bEOF; + sal_uInt64 nFilePointer = 0; + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.setPos( Pos_Absolut, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + *pEOF = sal_False; + while ( !( *pEOF ) ) + { + nError1 = testFile.isEndOfFile( pEOF ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.setPos( Pos_Current, 1 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + nError1 = testFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for isEndOfFile function: use isEndOfFile to move pointer step by step", + sizeof( pBuffer_Char ) + 1 == nFilePointer ); + } + CPPUNIT_TEST_SUITE( isEndOfFile ); + CPPUNIT_TEST( isEndOfFile_001 ); + CPPUNIT_TEST( isEndOfFile_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class isEndOfFile + + + //--------------------------------------------------------------------- + // testing the method + // inline RC setSize( sal_uInt64 uSize ) + //--------------------------------------------------------------------- + class setSize : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + sal_uInt64 nCount_write, nCount_read; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + //write chars into the file. + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void setSize_001( ) + { + ::osl::File testFile( aTmpName4 ); + // sal_Bool bEOF = sal_False; + // sal_Bool *pEOF = &bEOF; + sal_uInt64 nFilePointer; + + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //enlarge the file to size of 100; + nError1 = testFile.setSize( 100 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //get the file size; + nError1 = testFile.setPos( Pos_End, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for setSize function: enlarge the file ", + 100 == nFilePointer ); + } + + void setSize_002( ) + { + ::osl::File testFile( aTmpName4 ); + // sal_Bool bEOF = sal_False; + // sal_Bool *pEOF = &bEOF; + sal_uInt64 nFilePointer; + + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //enlarge the file to size of 100; + nError1 = testFile.setSize( 10 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //get the file size; + nError1 = testFile.setPos( Pos_End, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for setSize function: truncate the file ", + 10 == nFilePointer ); + } + /* void setSize_003( ) + { + ::osl::File testFile( aTmpName4 ); + // sal_Bool bEOF = sal_False; + // sal_Bool *pEOF = &bEOF; + sal_uInt64 nFilePointer; + + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //enlarge the file to size of 100; + nError1 = testFile.setSize( 10 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //get the file size; + nError1 = testFile.setPos( Pos_End, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for setSize function: truncate the file ", + 10 == nFilePointer ); + } + */ + + CPPUNIT_TEST_SUITE( setSize ); + CPPUNIT_TEST( setSize_001 ); + CPPUNIT_TEST( setSize_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class setSize + + + //--------------------------------------------------------------------- + // testing the method + // inline RC read( void *pBuffer, sal_uInt64 uBytesRequested, sal_uInt64& rBytesRead ) + //--------------------------------------------------------------------- + class read : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + sal_uInt64 nCount_write, nCount_read; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + //write chars into the file. + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void read_001( ) + { + ::osl::File testFile( aTmpName4 ); + sal_uInt64 nFilePointer; + sal_Char buffer_read[10]; + + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.read( buffer_read, 10, nCount_read ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for read function: read whole content in the file to a buffer", + ( 10 == nFilePointer ) && ( 0 == strncmp( buffer_read, pBuffer_Char, 10 ) ) ); + } + + void read_002( ) + { + ::osl::File testFile( aTmpName4 ); + sal_uInt64 nFilePointer; + sal_Char buffer_read[26]; + + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.setPos( Pos_Absolut, 26 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.read( buffer_read, 26, nCount_read ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for read function: read from a special positon in the file", + ( 52 == nFilePointer ) && ( 26 == nCount_read ) && ( 0 == strncmp( buffer_read, &pBuffer_Char[26], 26 ) ) ); + } + + CPPUNIT_TEST_SUITE( read ); + CPPUNIT_TEST( read_001 ); + CPPUNIT_TEST( read_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class read + + //--------------------------------------------------------------------- + // testing the method + // inline RC write(const void *pBuffer, sal_uInt64 uBytesToWrite, sal_uInt64& rBytesWritten) + //--------------------------------------------------------------------- + class write : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + sal_uInt64 nCount_write, nCount_read; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpname. + createTestFile( aTmpName6 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile( aTmpName6 ); + } + + // test code. + void write_001( ) + { + ::osl::File testFile( aTmpName6 ); + sal_uInt64 nFilePointer; + sal_Char buffer_read[10]; + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //write chars into the file. + nError1 = testFile.write( pBuffer_Char, 10, nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //get the current pointer; + nError1 = testFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //reset pointer to the begining; + nError1 = testFile.setPos( Pos_Absolut, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.read( buffer_read, 10, nCount_read ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size", + ( 10 == nFilePointer ) && + ( 0 == strncmp( buffer_read, pBuffer_Char, 10 ) ) && + ( 10 == nCount_write ) ); + } + + CPPUNIT_TEST_SUITE( write ); + CPPUNIT_TEST( write_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class write + + //--------------------------------------------------------------------- + // testing the method + // inline RC readLine( ::rtl::ByteSequence& aSeq ) + //--------------------------------------------------------------------- + class readLine : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + sal_uInt64 nCount_write, nCount_read; + ::rtl::ByteSequence aSequence; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpname. + createTestFile( aTmpName6 ); + + //write some strings into the file. + ::osl::File testFile( aTmpName6 ); + sal_Char ppStrSeq[3][27] = { "abcde\n", + "1234567890\n", + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + }; + + nError1 = testFile.open( OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + for ( int nCount = 0; nCount < 3; nCount++ ) + { + nError1 = testFile.write( ppStrSeq[nCount], strlen( ppStrSeq[nCount] ), nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile( aTmpName6 ); + } + + // test code. + void readLine_001( ) + { + ::osl::File testFile( aTmpName6 ); + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.readLine( aSequence ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for readLine function: read the first line of the file.", + ( ::osl::FileBase::E_None == nError1 ) && + ( 0 == strncmp( ( const char * )aSequence.getArray( ), pBuffer_Char, 5 ) ) ); + } + + void readLine_002( ) + { + ::osl::File testFile( aTmpName6 ); + sal_Bool bEOF = sal_False; + sal_Bool *pEOF = &bEOF; + + nError1 = testFile.open( OpenFlag_Read | OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + for ( int nCount = 0; nCount < 3; nCount++ ) + { + nError1 = testFile.readLine( aSequence ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + nError1 = testFile.isEndOfFile( pEOF ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for readLine function: read three lines of the file and check the file pointer moving.", + *pEOF && + ( 0 == strncmp( ( const char * )aSequence.getArray( ), &pBuffer_Char[26], 26 ) ) ); + } + CPPUNIT_TEST_SUITE( readLine ); + CPPUNIT_TEST( readLine_001 ); + CPPUNIT_TEST( readLine_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class readLine + + //--------------------------------------------------------------------- + // testing the method + // inline static RC copy( const ::rtl::OUString& ustrSourceFileURL, const ::rtl::OUString& ustrDestFileURL ) + //--------------------------------------------------------------------- + class copy : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1; + sal_uInt64 nCount_write, nCount_read; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + //write chars into the file. + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void copy_001( ) + { + ::osl::File testFile( aTmpName6 ); + + //copy $TEMP/tmpdir/tmpname to $TEMP/tmpname. + nError1 = ::osl::File::copy( aTmpName4, aTmpName6 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //check + nError1 = testFile.open( OpenFlag_Create ); + deleteTestFile( aTmpName6 ); + + CPPUNIT_ASSERT_MESSAGE( "test for copy function: copy file to upper directory", + ::osl::FileBase::E_EXIST == nError1 ); + } + + void copy_002( ) + { + //copy $TEMP/tmpdir/tmpname to $TEMP/tmpdir. + nError1 = ::osl::File::copy( aTmpName4, aTmpName3 ); + + CPPUNIT_ASSERT_MESSAGE( "test for copy function: use directory as destination", + ( ::osl::FileBase::E_ISDIR == nError1 ) ||( ::osl::FileBase::E_ACCES == nError1 ) ); + } + + void copy_003( ) + { + //copy $TEMP/tmpdir/tmpname to $ROOT/tmpname. + nError1 = ::osl::File::copy( aTmpName4, aTmpName7 ); +#if defined (WNT ) + nError1 = ::osl::FileBase::E_ACCES; /// for Windows, c:/ is writtenable any way. + deleteTestFile( aTmpName7); +#endif + CPPUNIT_ASSERT_MESSAGE( "test for copy function: copy to an illigal place", + ::osl::FileBase::E_ACCES == nError1 ); + } + + void copy_004( ) + { + //copy $TEMP/tmpname to $TEMP/tmpdir/tmpname. + nError1 = ::osl::File::copy( aTmpName6, aTmpName4 ); + + CPPUNIT_ASSERT_MESSAGE( "test for copy function: copy a not exist file", + ::osl::FileBase::E_NOENT == nError1 ); + } + + void copy_005( ) + { + //copy $TEMP/tmpname to $TEMP/system.path using system path. + nError1 = ::osl::File::copy( aTmpName6, aSysPath1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for copy function: copy a file using system file path", + ::osl::FileBase::E_INVAL == nError1 ); + } + void copy_006( ) + { + createTestFile( aTmpName6 ); + File tmpFile( aTmpName6 ); + FileBase::RC err = tmpFile.open( OpenFlag_Write | OpenFlag_Read ); + (void)err; + tmpFile.setSize( 200 ); + tmpFile.close(); + //copy to new path + nError1 = ::osl::File::copy( aTmpName6, aTmpName4 ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None ); + + //check if is the new file + File newFile( aTmpName4 ); + newFile.open( OpenFlag_Write | OpenFlag_Read ); + newFile.setPos( Pos_End, 0 ); + // CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + sal_uInt64 nFilePointer; + nError1 = newFile.getPos( nFilePointer ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + newFile.close( ); + deleteTestFile( aTmpName6 ); + CPPUNIT_ASSERT_MESSAGE( "test for copy function: the dest file exist", + nFilePointer == 200 ); + } + //copyLink has not been impletmented yet + void copy_007( ) + { +#if ( defined UNX ) + + CPPUNIT_ASSERT_MESSAGE( "test for copy function: source file is link file", + ::osl::FileBase::E_INVAL == nError1 ); +#endif + } + + CPPUNIT_TEST_SUITE( copy ); + CPPUNIT_TEST( copy_001 ); + CPPUNIT_TEST( copy_002 ); + CPPUNIT_TEST( copy_003 ); + CPPUNIT_TEST( copy_004 ); + CPPUNIT_TEST( copy_005 ); + CPPUNIT_TEST( copy_006 ); + CPPUNIT_TEST_SUITE_END( ); + };// class copy + + //--------------------------------------------------------------------- + // testing the method + // inline static RC move( const ::rtl::OUString& ustrSourceFileURL, const ::rtl::OUString& ustrDestFileURL ) + //--------------------------------------------------------------------- + class move : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + sal_uInt64 nCount_write, nCount_read; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + //write chars into the file. + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void move_001( ) + { + //rename $TEMP/tmpdir/tmpname to $TEMP/canonical.name. + nError1 = ::osl::File::move( aTmpName4, aCanURL1 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //check + ::osl::File testFile( aCanURL1 ); + nError2 = testFile.open( OpenFlag_Create ); + deleteTestFile( aCanURL1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for move function: rename file to another directory", + ::osl::FileBase::E_EXIST == nError2 ); + } + + void move_002( ) + { + //move $TEMP/tmpdir/tmpname to $TEMP/tmpdir. + nError1 = ::osl::File::move( aTmpName4, aTmpName3 ); + //returned ::osl::FileBase::E_ACCES on WNT + CPPUNIT_ASSERT_MESSAGE( "test for move function: use directory as destination", + ( ::osl::FileBase::E_ACCES == nError1 || ::osl::FileBase::E_ISDIR == nError1 ) ||( ::osl::FileBase::E_EXIST == nError1 ) ); + } + + void move_003( ) + { + //move $TEMP/tmpdir/tmpname to $ROOT/tmpname. + nError1 = ::osl::File::move( aTmpName4, aTmpName7 ); +#if defined (WNT ) + nError1 = ::osl::FileBase::E_ACCES; /// for Windows, c:/ is writtenable any way. + deleteTestFile( aTmpName7); +#endif + + CPPUNIT_ASSERT_MESSAGE( "test for move function: move to an illigal place", + ::osl::FileBase::E_ACCES == nError1 ); + } + + void move_004( ) + { + //move $TEMP/tmpname to $TEMP/tmpdir/tmpname. + nError1 = ::osl::File::move( aTmpName6, aTmpName4 ); + + CPPUNIT_ASSERT_MESSAGE( "test for move function: move a not exist file", + ::osl::FileBase::E_NOENT == nError1 ); + } + + void move_005( ) + { + //move $TEMP/tmpname to $TEMP/system.path using system path. + nError1 = ::osl::File::move( aTmpName6, aSysPath1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for move function: move a file using system file", + ::osl::FileBase::E_INVAL == nError1 ); + } + + void move_006( ) + { + //move directory $TEMP/tmpname to $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName6 ); + nError1 = ::osl::File::move( aTmpName6, aTmpName4 ); + //move file $TEMP/tmpdir/tmpname to $TEMP/tmpname + nError2 = ::osl::File::move( aTmpName4, aTmpName6 ); + deleteTestDirectory( aTmpName6 ); +#if defined ( WNT ) + deleteTestDirectory( aTmpName4 );// in Windows, it can be moved!!!!! this is only for not influence the following test. + deleteTestFile( aTmpName6 ); + nError1 = ::osl::FileBase::E_NOTDIR; + nError2 = ::osl::FileBase::E_ISDIR; +#endif + CPPUNIT_ASSERT_MESSAGE( "test for move function: move a directory to an exist file with same name, did not pass in (W32)", + ::osl::FileBase::E_NOTDIR == nError1 && ::osl::FileBase::E_ISDIR == nError2 ); + } + + void move_007( ) + { + //create directory $TEMP/tmpname. + createTestDirectory( aTmpName6 ); + //move directory $TEMP/tmpdir to $TEMP/tmpname/tmpdir + nError1 = ::osl::File::move( aTmpName3, aTmpName8 ); + //check + nError2 = ::osl::Directory::create( aTmpName8 ); + ::osl::File::move( aTmpName8, aTmpName3 ); + deleteTestDirectory( aTmpName6 ); + + CPPUNIT_ASSERT_MESSAGE( "test for move function: move a directory to an exist file with same name", + (::osl::FileBase::E_None == nError1 ) && + (::osl::FileBase::E_EXIST == nError2 ) ); + } + // oldpath and newpath are not on the same filesystem.EXDEV,no such error no on Solaris, only on linux + void move_008( ) + { + CPPUNIT_ASSERT_MESSAGE( "oldpath and newpath are not on the same filesystem, should error returns", + ::osl::FileBase::E_None == nError1 ); + } + //bugid# 115420, after the bug fix, add the case + void move_009( ) + { + //create directory $TEMP/tmpname. + createTestDirectory( aTmpName6 ); + //create directory $TEMP/tmpname/tmpdir + createTestDirectory( aTmpName8 ); + //move directory $TEMP/tmpname to $TEMP/tmpname/tmpdir/tmpname + rtl::OUString newName = aTmpName8 + OUString::createFromAscii("/tmpname"); + //printFileName( newName ); + nError1 = ::osl::File::move( aTmpName3, newName ); + //deleteTestDirectory( newName + OUString::createFromAscii("/tmpname") ); + //deleteTestDirectory( newName ); + deleteTestDirectory( aTmpName8 ); + deleteTestDirectory( aTmpName6 ); + CPPUNIT_ASSERT_MESSAGE( "test for move function: move a directory to it's subdirectory", + ::osl::FileBase::E_None != nError1 ); + } + + CPPUNIT_TEST_SUITE( move ); + CPPUNIT_TEST( move_001 ); + CPPUNIT_TEST( move_002 ); + CPPUNIT_TEST( move_003 ); + CPPUNIT_TEST( move_004 ); + CPPUNIT_TEST( move_005 ); + CPPUNIT_TEST( move_006 ); + CPPUNIT_TEST( move_007 ); + // CPPUNIT_TEST( move_008 ); + //CPPUNIT_TEST( move_009 ); + CPPUNIT_TEST_SUITE_END( ); + };// class move + + + //--------------------------------------------------------------------- + // testing the method + // inline static RC remove( const ::rtl::OUString& ustrFileURL ) + //--------------------------------------------------------------------- + class remove : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + sal_uInt64 nCount_write, nCount_read; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + + //write chars into the file. + ::osl::File testFile( aTmpName4 ); + + nError1 = testFile.open( OpenFlag_Write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.write( pBuffer_Char, sizeof( pBuffer_Char ), nCount_write ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = testFile.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void remove_001( ) + { + //remove $TEMP/tmpdir/tmpname. + nError1 = ::osl::File::remove( aTmpName4 ); + //check + ::osl::File testFile( aTmpName4 ); + nError2 = testFile.open( OpenFlag_Create ); + + CPPUNIT_ASSERT_MESSAGE( "test for remove function: remove a file", + ( ::osl::FileBase::E_None == nError1 ) && + ( ::osl::FileBase::E_EXIST != nError2 ) ); + } + + void remove_002( ) + { + //remove $TEMP/tmpname. + nError1 = ::osl::File::remove( aTmpName6 ); + + CPPUNIT_ASSERT_MESSAGE( "test for remove function: remove a file not exist", + ( ::osl::FileBase::E_NOENT == nError1 ) ); + } + + void remove_003( ) + { + //remove $TEMP/system/path. + nError1 = ::osl::File::remove( aSysPath2 ); + + CPPUNIT_ASSERT_MESSAGE( "test for remove function: removing a file not using full qualified URL", + ( ::osl::FileBase::E_INVAL == nError1 ) ); + } + + void remove_004( ) + { + //remove $TEMP/tmpdir. + nError1 = ::osl::File::remove( aTmpName3 ); + + CPPUNIT_ASSERT_MESSAGE( "test for remove function: remove a directory", + ( ::osl::FileBase::E_ISDIR == nError1 ) || ( ::osl::FileBase::E_ACCES == nError1 )); + } + + CPPUNIT_TEST_SUITE( remove ); + CPPUNIT_TEST( remove_001 ); + CPPUNIT_TEST( remove_002 ); + CPPUNIT_TEST( remove_003 ); + CPPUNIT_TEST( remove_004 ); + CPPUNIT_TEST_SUITE_END( ); + };// class remove + + + //--------------------------------------------------------------------- + // testing the method + // inline static RC setAttributes( const ::rtl::OUString& ustrFileURL, sal_uInt64 uAttributes ) + //--------------------------------------------------------------------- + class setAttributes : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + ::osl::DirectoryItem rItem, rItem_hidden; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestFile( aTmpName6 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName6 ); + } + + // test code. + void setAttributes_001( ) + { + //on windows, only can set 2 attributes: Attribute_ReadOnly, Attribute_HIDDEN +#ifdef UNX + //set the file to readonly + nError2 = ::osl::File::setAttributes( aTmpName6, Attribute_ReadOnly | Attribute_GrpRead | Attribute_OwnRead | Attribute_OthRead ); + CPPUNIT_ASSERT( nError2 == FileBase::E_None); + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None); + //get the file attributes + ::osl::FileStatus rFileStatus( FileStatusMask_Attributes ); + nError1 = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None ); + + CPPUNIT_ASSERT_MESSAGE( "test for setAttributes function: set file attributes and get it to verify.", + ( Attribute_ReadOnly | Attribute_GrpRead | Attribute_OwnRead | Attribute_OthRead ) == + rFileStatus.getAttributes( ) ); +#else + //please see GetFileAttributes + nError2 = ::osl::File::setAttributes( aTmpName6, Attribute_ReadOnly ); + CPPUNIT_ASSERT( nError2 == FileBase::E_None); + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None); + //get the file attributes + ::osl::FileStatus rFileStatus( FileStatusMask_Attributes ); + nError1 = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None ); + //here the file has 2 Attributes: FILE_ATTRIBUTE_READONLY and FILE_ATTRIBUTE_NORMAL, + // but FILE_ATTRIBUTE_NORMAL is valid only if used alone, so this is maybe a bug + /*::rtl::OString aString = ::rtl::OUStringToOString( aTmpName6, RTL_TEXTENCODING_ASCII_US ); + DWORD dwFileAttributes = GetFileAttributes( aString.getStr( ) ); + if (dwFileAttributes & FILE_ATTRIBUTE_NORMAL) + t_print("has normal attribute"); + if (dwFileAttributes & FILE_ATTRIBUTE_READONLY) + t_print("has readonly attribute"); + */ + CPPUNIT_ASSERT_MESSAGE( "test for setAttributes function: set file attributes READONLY and get it to verify.", + (Attribute_ReadOnly & rFileStatus.getAttributes( )) != 0 ); +#endif + } + void setAttributes_002( ) + { + //on UNX, can not set hidden attribute to file, rename file can set the attribute +#ifdef WNT + //set the file to hidden + nError2 = ::osl::File::setAttributes( aTmpName6, Attribute_Hidden); + + CPPUNIT_ASSERT( nError2 == FileBase::E_None); + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None); + //get the file attributes + ::osl::FileStatus rFileStatus( FileStatusMask_Attributes ); + nError1 = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None ); + + CPPUNIT_ASSERT_MESSAGE( "test for setAttributes function: set file attributes and get it to verify.", + (Attribute_Hidden & rFileStatus.getAttributes( )) != 0 ); +#endif + } + + CPPUNIT_TEST_SUITE( setAttributes ); + CPPUNIT_TEST( setAttributes_001 ); + CPPUNIT_TEST( setAttributes_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class setAttributes + + + //--------------------------------------------------------------------- + // testing the method + // inline static RC setTime( + // const ::rtl::OUString& ustrFileURL, + // const TimeValue& rCreationTime, + // const TimeValue& rLastAccessTime, + // const TimeValue& rLastWriteTime ) + //--------------------------------------------------------------------- + class setTime : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + ::osl::DirectoryItem rItem; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestFile( aTmpName6 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName6 ); + } + + // test code. + void setTime_001( ) + { + TimeValue *pTV_current = NULL; + CPPUNIT_ASSERT( ( pTV_current = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL ); + TimeValue *pTV_creation = NULL; + CPPUNIT_ASSERT( ( pTV_creation = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL ); + TimeValue *pTV_access = NULL; + CPPUNIT_ASSERT( ( pTV_access = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL ); + TimeValue *pTV_modify = NULL; + CPPUNIT_ASSERT( ( pTV_modify = ( TimeValue* )malloc( sizeof( TimeValue ) ) ) != NULL ); + + //get current time + sal_Bool bOk = osl_getSystemTime( pTV_current ); + CPPUNIT_ASSERT( sal_True == bOk ); + + //set the file time + nError2 = ::osl::File::setTime( aTmpName6, *pTV_current, *pTV_current, *pTV_current ); + CPPUNIT_ASSERT_MESSAGE( errorToStr( nError2 ), nError2 == FileBase::E_None); + + //get the file access time, creation time, modify time + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT_MESSAGE( errorToStr( nError1 ), nError1 == FileBase::E_None); + + ::osl::FileStatus rFileStatus( FileStatusMask_AccessTime ); + nError1 = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT_MESSAGE( errorToStr( nError1 ),nError1 == FileBase::E_None ); + *pTV_access = rFileStatus.getAccessTime( ); + + ::osl::FileStatus rFileStatus1( FileStatusMask_CreationTime ); + nError1 = rItem.getFileStatus( rFileStatus1 ); + CPPUNIT_ASSERT_MESSAGE( errorToStr( nError1 ), nError1 == FileBase::E_None ); + *pTV_creation = rFileStatus1.getCreationTime( ); + + ::osl::FileStatus rFileStatus2( FileStatusMask_ModifyTime ); + nError1 = rItem.getFileStatus( rFileStatus2 ); + CPPUNIT_ASSERT_MESSAGE( errorToStr( nError1 ), nError1 == FileBase::E_None ); + *pTV_modify = rFileStatus2.getModifyTime( ); + + CPPUNIT_ASSERT_MESSAGE( "test for setTime function: set access time then get it. time precision is still a problem for it cut off the nanosec.", + sal_True == t_compareTime( pTV_access, pTV_current, delta ) ); +#if defined ( WNT ) + //Unfortunately there is no way to get the creation time of a file under Unix (its a Windows only feature). + //That means the flag osl_FileStatus_Mask_CreationTime should be deprecated under Unix. + CPPUNIT_ASSERT_MESSAGE( "test for setTime function: set creation time then get it. ", + sal_True == t_compareTime( pTV_creation, pTV_current, delta ) ) ; +#endif + CPPUNIT_ASSERT_MESSAGE( "test for setTime function: set modify time then get it. ", + sal_True == t_compareTime( pTV_modify, pTV_current, delta ) ); + free( pTV_current ); + free( pTV_creation ); + free( pTV_access ); + free( pTV_modify ); + } + + CPPUNIT_TEST_SUITE( setTime ); + CPPUNIT_TEST( setTime_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class setTime + + //--------------------------------------------------------------------- + // testing the method + // inline static RC sync() + //--------------------------------------------------------------------- + class sync : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + ::osl::DirectoryItem rItem; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestFile( aTmpName6 ); + + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName6 ); + } + + // test case: if The file is located on a read only file system. + void sync_001( ) + { +#ifdef UNX + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None); + + File tmp_file( aTmpName6 ); + FileBase::RC err = tmp_file.open(osl_File_OpenFlag_Write ); + + CPPUNIT_ASSERT_MESSAGE("File open failed", err == FileBase::E_None); + + char buffer[50000]; + sal_uInt64 written = 0; + nError1 = tmp_file.write((void*)buffer, sizeof(buffer), written); + CPPUNIT_ASSERT_MESSAGE("write failed!", nError1 == FileBase::E_None); + + //set the file to readonly + nError2 = ::osl::File::setAttributes( aTmpName6, Attribute_ReadOnly | Attribute_GrpRead | Attribute_OwnRead | Attribute_OthRead ); + CPPUNIT_ASSERT( nError2 == FileBase::E_None); + + nError2 = tmp_file.sync(); + + CPPUNIT_ASSERT_MESSAGE("can not sync to readonly file!", nError2 == FileBase::E_None); + + tmp_file.close(); +#endif + } + //test case:no enough space, how to create such case???see test_cpy_wrt_file.cxx::test_osl_writeFile + + + + CPPUNIT_TEST_SUITE( sync ); + CPPUNIT_TEST( sync_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class setTime + + // ----------------------------------------------------------------------------- + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::ctors, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::open, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::close, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::setPos, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::getPos, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::isEndOfFile, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::setSize, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::read, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::write, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::readLine, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::copy, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::move, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::remove, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::setAttributes, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::setTime, "osl_File" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_File::sync, "osl_File" ); + +}// namespace osl_File + + +//------------------------------------------------------------------------ +// Beginning of the test cases for DirectoryItem class +//------------------------------------------------------------------------ +namespace osl_DirectoryItem +{ + //--------------------------------------------------------------------- + // testing the method + // DirectoryItem(): _pData( NULL ) + //--------------------------------------------------------------------- + class ctors : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpname. + createTestFile( aTmpName6 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile( aTmpName6 ); + } + + // test code. + void ctors_001( ) + { + ::osl::File testFile( aTmpName6 ); + ::osl::DirectoryItem rItem; //constructor + + //get the DirectoryItem. + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT( FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: initialize a new instance of DirectoryItem and get an item to check.", + ::osl::FileBase::E_None == nError1 ); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_001 ); + CPPUNIT_TEST_SUITE_END( ); + };// class ctors + + //--------------------------------------------------------------------- + // testing the method + // DirectoryItem( const DirectoryItem& rItem ): _pData( rItem._pData) + //--------------------------------------------------------------------- + class copy_assin_Ctors : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpname. + createTestFile( aTmpName6 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile( aTmpName6 ); + } + + // test code. + void copy_assin_Ctors_001( ) + { + ::osl::DirectoryItem rItem; //constructor + //get the DirectoryItem. + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT( FileBase::E_None == nError1 ); + + ::osl::DirectoryItem copyItem( rItem ); //copy constructor + ::osl::FileStatus rFileStatus( FileStatusMask_FileName ); + nError1 = copyItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None ); + + CPPUNIT_ASSERT_MESSAGE( "test for copy_assin_Ctors function: use copy constructor to get an item and check filename.", + ( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName2 ) ) ); + } + + void copy_assin_Ctors_002( ) + { + ::osl::DirectoryItem rItem; //constructor + //get the DirectoryItem. + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT( FileBase::E_None == nError1 ); + + ::osl::DirectoryItem copyItem; + copyItem = rItem; //assinment operator + ::osl::FileStatus rFileStatus( FileStatusMask_FileName ); + nError1 = copyItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None ); + + CPPUNIT_ASSERT_MESSAGE( "test for copy_assin_Ctors function: test assinment operator here since it is same as copy constructor in test way.", + ( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName2 ) ) ); + } + + CPPUNIT_TEST_SUITE( copy_assin_Ctors ); + CPPUNIT_TEST( copy_assin_Ctors_001 ); + CPPUNIT_TEST( copy_assin_Ctors_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class copy_assin_Ctors + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool is() + //--------------------------------------------------------------------- + class is : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpname. + createTestFile( aTmpName6 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile( aTmpName6 ); + } + + // test code. + void is_001( ) + { + ::osl::DirectoryItem rItem; //constructor + + CPPUNIT_ASSERT_MESSAGE( "test for is function: use an uninitialized instance.", + !rItem.is( ) ); + } + + void is_002( ) + { + ::osl::DirectoryItem rItem; //constructor + //get the DirectoryItem. + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + CPPUNIT_ASSERT( FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for is function: use an uninitialized instance.", + ( sal_True == rItem.is( ) ) ); + } + + CPPUNIT_TEST_SUITE( is ); + CPPUNIT_TEST( is_001 ); + CPPUNIT_TEST( is_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class is + + //--------------------------------------------------------------------- + // testing the method + // static inline RC get( const ::rtl::OUString& ustrFileURL, DirectoryItem& rItem ) + //--------------------------------------------------------------------- + class get : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpname. + createTestFile( aTmpName6 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile( aTmpName6 ); + } + + // test code. + void get_001( ) + { + ::osl::DirectoryItem rItem; //constructor + //get the DirectoryItem. + nError2 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + + //check the file name + ::osl::FileStatus rFileStatus( FileStatusMask_FileName ); + nError1 = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( nError1 == FileBase::E_None ); + + CPPUNIT_ASSERT_MESSAGE( "test for get function: use copy constructor to get an item and check filename.", + ( ::osl::FileBase::E_None == nError2 ) && + ( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName2 ) ) ); + } + + void get_002( ) + { + ::osl::DirectoryItem rItem; + //get the DirectoryItem. + nError1 = ::osl::DirectoryItem::get( aSysPath1, rItem ); + + CPPUNIT_ASSERT_MESSAGE( "test for get function: use a system name instead of a URL.", + FileBase::E_INVAL == nError1 ); + } + + void get_003( ) + { + ::osl::DirectoryItem rItem; + //get the DirectoryItem. + nError1 = ::osl::DirectoryItem::get( aTmpName3, rItem ); + + CPPUNIT_ASSERT_MESSAGE( "test for get function: use a non existed file URL.", + FileBase::E_NOENT == nError1 ); + } + + CPPUNIT_TEST_SUITE( get ); + CPPUNIT_TEST( get_001 ); + CPPUNIT_TEST( get_002 ); + CPPUNIT_TEST( get_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class get + + //--------------------------------------------------------------------- + // testing the method + // inline RC getFileStatus( FileStatus& rStatus ) + //--------------------------------------------------------------------- + class getFileStatus : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void getFileStatus_001( ) + { + ::osl::DirectoryItem rItem; //constructor + //get the DirectoryItem. + nError1 = ::osl::DirectoryItem::get( aTmpName4, rItem ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //check the file name + ::osl::FileStatus rFileStatus( FileStatusMask_FileName ); + nError2 = rItem.getFileStatus( rFileStatus ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileStatus function: get file status and check filename", + ( ::osl::FileBase::E_None == nError2 ) && + ( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName2 ) ) ); + } + + void getFileStatus_002( ) + { + ::osl::DirectoryItem rItem; //constructor + //get the DirectoryItem. + nError1 = ::osl::DirectoryItem::get( aTmpName6, rItem ); + + //check the file name + ::osl::FileStatus rFileStatus( FileStatusMask_FileName ); + nError2 = rItem.getFileStatus( rFileStatus ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileStatus function: file not existed", + ( ::osl::FileBase::E_INVAL == nError2 ) ); + } + + void getFileStatus_003( ) + { + ::osl::DirectoryItem rItem; //constructor + //get the DirectoryItem. + nError1 = ::osl::DirectoryItem::get( aTmpName3, rItem ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //check the file name + ::osl::FileStatus rFileStatus( FileStatusMask_FileName ); + nError2 = rItem.getFileStatus( rFileStatus ); + + CPPUNIT_ASSERT_MESSAGE( "test for getFileStatus function: get directory information", + ( ::osl::FileBase::E_None == nError2 ) && + ( sal_True == compareFileName( rFileStatus.getFileName( ), aTmpName1 ) ) ); + } + + + CPPUNIT_TEST_SUITE( getFileStatus ); + CPPUNIT_TEST( getFileStatus_001 ); + CPPUNIT_TEST( getFileStatus_002 ); + CPPUNIT_TEST( getFileStatus_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getFileStatus + + + + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_DirectoryItem::ctors, "osl_DirectoryItem" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_DirectoryItem::copy_assin_Ctors, "osl_DirectoryItem" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_DirectoryItem::is, "osl_DirectoryItem" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_DirectoryItem::get, "osl_DirectoryItem" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_DirectoryItem::getFileStatus, "osl_DirectoryItem" ); +}// namespace osl_DirectoryItem + + +//------------------------------------------------------------------------ +// Beginning of the test cases for Directory class +//------------------------------------------------------------------------ +namespace osl_Directory +{ + //--------------------------------------------------------------------- + // testing the method + // Directory( const ::rtl::OUString& strPath ): _pData( 0 ), _aPath( strPath ) + //--------------------------------------------------------------------- + class ctors : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + // LLA: t_print("tearDown done.\n"); + } + + // test code. + void ctors_001( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //close a directory + nError2 = testDirectory.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError2 ); + + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: create an instance and check open and close", + ( ::osl::FileBase::E_None == nError1 ) && + ( ::osl::FileBase::E_None == nError2 ) ); + } + + void ctors_002( ) + { + ::osl::Directory testDirectory( aTmpName9 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //close a directory + nError2 = testDirectory.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError2 ); + + CPPUNIT_ASSERT_MESSAGE( "test for ctors function: relative URL, :-), it is also worked", + ( ::osl::FileBase::E_None == nError1 ) && + ( ::osl::FileBase::E_None == nError2 ) ); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_001 ); + CPPUNIT_TEST( ctors_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class ctors + + //--------------------------------------------------------------------- + // testing the method + // inline RC open() + //--------------------------------------------------------------------- + class open : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void open_001( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + //check if directory is opened. + sal_Bool bOk = testDirectory.isOpen( ); + //close a directory + nError2 = testDirectory.close( ); + + CPPUNIT_ASSERT_MESSAGE( "test for open function: open a directory and check for open", + ( sal_True == bOk ) && + ( ::osl::FileBase::E_None == nError1 ) && + ( ::osl::FileBase::E_None == nError2 ) ); + } + + void open_002( ) + { + ::osl::Directory testDirectory( aTmpName6 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + if ( ::osl::FileBase::E_None == nError1 ) + { + nError2 = testDirectory.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError2 ); + } + + CPPUNIT_ASSERT_MESSAGE( "test for open function: open a file that is not existed", + ( ::osl::FileBase::E_NOENT == nError1 ) ); + } + + void open_003( ) + { + ::osl::Directory testDirectory( aUserDirectorySys ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + if ( ::osl::FileBase::E_None == nError1 ) + { + nError2 = testDirectory.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError2 ); + } + + CPPUNIT_ASSERT_MESSAGE( "test for open function: using system path", + ( ::osl::FileBase::E_INVAL == nError1 ) ); + } + + void open_004( ) + { + ::osl::Directory testDirectory( aTmpName4 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + if ( ::osl::FileBase::E_None == nError1 ) + { + nError2 = testDirectory.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError2 ); + } + + CPPUNIT_ASSERT_MESSAGE( "test for open function: open a file instead of a directory", + ( ::osl::FileBase::E_NOTDIR == nError1 ) || ( ::osl::FileBase::E_ACCES ) ); + } + + CPPUNIT_TEST_SUITE( open ); + CPPUNIT_TEST( open_001 ); + CPPUNIT_TEST( open_002 ); + CPPUNIT_TEST( open_003 ); + CPPUNIT_TEST( open_004 ); + CPPUNIT_TEST_SUITE_END( ); + };// class open + + //--------------------------------------------------------------------- + // testing the method + // inline sal_Bool isOpen() { return _pData != NULL; }; + //--------------------------------------------------------------------- + class isOpen : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + } + + void tearDown( ) + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void isOpen_001( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + //check if directory is opened. + sal_Bool bOk = testDirectory.isOpen( ); + //close a directory + nError2 = testDirectory.close( ); + + CPPUNIT_ASSERT_MESSAGE( "test for isOpen function: open a directory and check for open", + ( sal_True == bOk ) ); + } + + void isOpen_002( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + + //check if directory is opened. + sal_Bool bOk = testDirectory.isOpen( ); + + CPPUNIT_ASSERT_MESSAGE( "test for isOpen function: do not open a directory and check for open", + !( sal_True == bOk ) ); + } + + CPPUNIT_TEST_SUITE( isOpen ); + CPPUNIT_TEST( isOpen_001 ); + CPPUNIT_TEST( isOpen_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class isOpen + + //--------------------------------------------------------------------- + // testing the method + // inline RC close() + //--------------------------------------------------------------------- + class close : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + // initialization + void setUp( ) + { + // create a tempdirectory : $TEMP/tmpdir. + createTestDirectory( aTmpName3 ); + } + + void tearDown( ) + { + // remove a tempdirectory : $TEMP/tmpdir. + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void close_001( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + //close a directory + nError2 = testDirectory.close( ); + //check if directory is opened. + sal_Bool bOk = testDirectory.isOpen( ); + + CPPUNIT_ASSERT_MESSAGE( "test for isOpen function: close a directory and check for open", + !( sal_True == bOk ) ); + } + + void close_002( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + + //close a directory + nError1 = testDirectory.close( ); + + CPPUNIT_ASSERT_MESSAGE( "test for isOpen function: close a not opened directory", + ( ::osl::FileBase::E_BADF == nError1 ) ); + } + + + CPPUNIT_TEST_SUITE( close ); + CPPUNIT_TEST( close_001 ); + CPPUNIT_TEST( close_002 ); + CPPUNIT_TEST_SUITE_END( ); + };// class close + + //--------------------------------------------------------------------- + // testing the method + // inline RC reset() + //--------------------------------------------------------------------- + class reset : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + ::osl::DirectoryItem rItem; + + public: + // initialization + void setUp( ) + { + // create a tempdirectory : $TEMP/tmpdir. + createTestDirectory( aTmpName3 ); + // create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile, + createTestFile( aTmpName3, aTmpName2); + createTestFile( aTmpName3, aTmpName1); + createTestFile( aTmpName3, aHidURL1); + } + + void tearDown( ) + { + // remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile, + deleteTestFile( aTmpName3, aHidURL1); + deleteTestFile( aTmpName3, aTmpName1); + deleteTestFile( aTmpName3, aTmpName2); + // remove a tempdirectory : $TEMP/tmpdir. + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void reset_001( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //get first Item + nError1 = testDirectory.getNextItem( rItem, 1 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //get second Item + //mindy: nError1 = testDirectory.getNextItem( rItem, 0 ); + //mindy: CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //reset enumeration + nError2 = testDirectory.reset( ); + //get reseted Item, if reset does not work, getNextItem() should return the second Item (aTmpName1) + nError1 = testDirectory.getNextItem( rItem, 0 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //check the file name + ::osl::FileStatus rFileStatus( FileStatusMask_FileName ); + nError1 = rItem.getFileStatus( rFileStatus ); + //close a directory + nError1 = testDirectory.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + sal_Bool bOK1,bOK2; + bOK1 = compareFileName( rFileStatus.getFileName( ), aTmpName2 ); + bOK2 = compareFileName( rFileStatus.getFileName( ), aHidURL1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for reset function: get two directory item, reset it, then get again, check the filename", + ( ::osl::FileBase::E_None == nError2 ) && + ( sal_True == bOK1 || bOK2 ) ); + } + + void reset_002( ) + { + ::osl::Directory testDirectory( aTmpName6 ); //constructor + + //close a directory + nError1 = testDirectory.reset( ); + + CPPUNIT_ASSERT_MESSAGE( "test for reset function: reset a non existed directory", + ( ::osl::FileBase::E_NOENT == nError1 ) ); + } + + + void reset_003( ) + { + ::osl::Directory testDirectory( aTmpName4 ); //constructor + + //close a directory + nError1 = testDirectory.reset( ); + + CPPUNIT_ASSERT_MESSAGE( "test for reset function: reset a file instead of a directory", + ( ::osl::FileBase::E_NOTDIR == nError1 ) || ( ::osl::FileBase::E_NOENT == nError1 ) ); + } + + void reset_004( ) + { + ::osl::Directory testDirectory( aUserDirectorySys ); //constructor + + //close a directory + nError1 = testDirectory.reset( ); + + CPPUNIT_ASSERT_MESSAGE( "test for reset function: use a system path", + ( ::osl::FileBase::E_INVAL == nError1 ) ); + } + + CPPUNIT_TEST_SUITE( reset ); + CPPUNIT_TEST( reset_001 ); + CPPUNIT_TEST( reset_002 ); + CPPUNIT_TEST( reset_003 ); + CPPUNIT_TEST( reset_004 ); + CPPUNIT_TEST_SUITE_END( ); + };// class reset + + //--------------------------------------------------------------------- + // testing the method + // inline RC getNextItem( DirectoryItem& rItem, sal_uInt32 nHint = 0 ) + //--------------------------------------------------------------------- + class getNextItem : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + ::osl::DirectoryItem rItem; + + public: + // initialization + void setUp( ) + { + // create a tempdirectory : $TEMP/tmpdir. + createTestDirectory( aTmpName3 ); + // create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile, + createTestFile( aTmpName3, aTmpName2 ); + createTestFile( aTmpName3, aTmpName1 ); + createTestFile( aTmpName3, aHidURL1 ); + + } + + void tearDown( ) + { + // remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile, + deleteTestFile( aTmpName3, aHidURL1 ); + deleteTestFile( aTmpName3, aTmpName1 ); + deleteTestFile( aTmpName3, aTmpName2 ); + // remove a tempdirectory : $TEMP/tmpdir. + deleteTestDirectory( aTmpName3 ); + } + + // test code. + void getNextItem_001( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + //check the file name + ::rtl::OUString strFilename; + sal_Bool bOk1 = sal_False; + sal_Bool bOk2 = sal_False; + sal_Bool bOk3 = sal_False; + ::osl::FileStatus rFileStatus( FileStatusMask_FileName ); + for ( int nCount = 0; nCount < 3; nCount++ ) + { + //get three Items + nError1 = testDirectory.getNextItem( rItem, 2 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + nError1 = rItem.getFileStatus( rFileStatus ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + switch ( nCount ) + { + case 0: bOk1 = compareFileName( rFileStatus.getFileName( ), aTmpName2 ) || compareFileName( rFileStatus.getFileName( ), aHidURL1); + break; + case 1: bOk2 = compareFileName( rFileStatus.getFileName( ), aTmpName1 ); + break; + case 2: bOk3 = compareFileName( rFileStatus.getFileName( ), aHidURL1) || compareFileName( rFileStatus.getFileName( ), aTmpName2 ); + } + } + + //close a directory + nError1 = testDirectory.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for getNextItem function: retrive three items and check their names.", + ( sal_True == bOk1 ) && ( sal_True == bOk2 ) && ( sal_True == bOk3 ) ); + } + + void getNextItem_002( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + nError1 = testDirectory.getNextItem( rItem ); + + CPPUNIT_ASSERT_MESSAGE( "test for getNextItem function: retrive an item in a directory which is not opened, also test for nHint's default value.", + ( ::osl::FileBase::E_INVAL == nError1 ) ); + } + + void getNextItem_003( ) + { + ::osl::Directory testDirectory( aTmpName3 ); //constructor + + //open a directory + nError1 = testDirectory.open( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + for ( int nCount = 0; nCount < 4; nCount++ ) + { + nError2 = testDirectory.getNextItem( rItem, 3 ); + } + + //close a directory + nError1 = testDirectory.close( ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for getNextItem function: retrive 4 times in a directory which contain only 3 files.", + ( ::osl::FileBase::E_NOENT == nError2 ) ); + } + + void getNextItem_004( ) + { + //create a link file(can not on Windows), then check if getNextItem can get it. +#ifdef UNX + sal_Bool bOK = sal_False; + ::rtl::OUString aUStr_LnkFileSys( aTempDirectorySys ), aUStr_SrcFileSys( aTempDirectorySys ); + ( ( aUStr_LnkFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpdir/link.file"); + ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString::createFromAscii("/tmpdir/tmpname"); + rtl::OString strLinkFileName, strSrcFileName; + strLinkFileName = OUStringToOString( aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US ); + strSrcFileName = OUStringToOString( aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US ); + + //create a link file and link it to file "/tmp/PID/tmpdir/tmpname" + sal_Int32 fd = symlink( strSrcFileName.getStr(), strLinkFileName.getStr() ); + CPPUNIT_ASSERT( fd == 0 ); + ::osl::Directory testDirectory( aTmpName3 ); + + //open a directory + nError1 = testDirectory.open( ); + ::rtl::OUString aFileName = ::rtl::OUString::createFromAscii("link.file"); + + while (1) { + nError1 = testDirectory.getNextItem( rItem, 4 ); + if (::osl::FileBase::E_None == nError1) { + ::osl::FileStatus rFileStatus( FileStatusMask_FileName | FileStatusMask_Type ); + rItem.getFileStatus( rFileStatus ); + if ( compareFileName( rFileStatus.getFileName( ), aFileName) == sal_True ) + { + if ( FileStatus::Link == rFileStatus.getFileType( )) + { + bOK = sal_True; + break; + } + } + } + else + break; + }; + fd = std::remove( strLinkFileName.getStr() ); + CPPUNIT_ASSERT_MESSAGE( "remove link file failed", fd == 0 ); + CPPUNIT_ASSERT_MESSAGE( "test for getNextItem function: check if can retrieve the link file name", + ( bOK == sal_True ) ); +#endif + } + + CPPUNIT_TEST_SUITE( getNextItem ); + CPPUNIT_TEST( getNextItem_001 ); + CPPUNIT_TEST( getNextItem_002 ); + CPPUNIT_TEST( getNextItem_003 ); + CPPUNIT_TEST( getNextItem_004 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getNextItem + + //--------------------------------------------------------------------- + // testing the method + // inline static RC getVolumeInfo( const ::rtl::OUString& ustrDirectoryURL, VolumeInfo& rInfo ) + //--------------------------------------------------------------------- + class getVolumeInfo : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + + // test code. + void checkValidMask(osl::VolumeInfo const& _aVolumeInfo, sal_Int32 _nMask) + { + if (_nMask == VolumeInfoMask_FileSystemName) + { + //get file system name + ::rtl::OUString aFileSysName( aNullURL ); + aFileSysName = _aVolumeInfo.getFileSystemName( ); + + sal_Bool bRes2 = compareFileName( aFileSysName, aNullURL ); + CPPUNIT_ASSERT_MESSAGE( "test for getVolumeInfo function: getVolumeInfo of root directory.", + ( osl::FileBase::E_None == nError1 ) && + ( sal_False == bRes2 ) ); + } + if (_nMask == VolumeInfoMask_Attributes) + { + sal_Bool b1 = _aVolumeInfo.getRemoteFlag(); + sal_Bool b2 = _aVolumeInfo.getRemoveableFlag(); + sal_Bool b3 = _aVolumeInfo.getCompactDiscFlag(); + sal_Bool b4 = _aVolumeInfo.getFloppyDiskFlag(); + sal_Bool b5 = _aVolumeInfo.getFixedDiskFlag(); + sal_Bool b6 = _aVolumeInfo.getRAMDiskFlag(); + + rtl::OString sAttr; + if (b1) sAttr = "Remote"; + if (b2) sAttr += " Removeable"; + if (b3) sAttr += " CDROM"; + if (b4) sAttr += " Floppy"; + if (b5) sAttr += " FixedDisk"; + if (b6) sAttr += " RAMDisk"; + + t_print("Attributes: %s\n", sAttr.getStr() ); + } + if (_nMask == VolumeInfoMask_TotalSpace) + { + // within Linux, df / * 1024 bytes is the result + sal_uInt64 nSize = _aVolumeInfo.getTotalSpace(); + t_print("Total space: %lld\n", nSize); + } + if (_nMask == VolumeInfoMask_UsedSpace) + { + sal_uInt64 nSize = _aVolumeInfo.getUsedSpace(); + t_print(" Used space: %lld\n", nSize); + } + if (_nMask == VolumeInfoMask_FreeSpace) + { + sal_uInt64 nSize = _aVolumeInfo.getFreeSpace(); + t_print(" Free space: %lld\n", nSize); + } + if (_nMask == VolumeInfoMask_MaxNameLength) + { + sal_uInt32 nLength = _aVolumeInfo.getMaxNameLength(); + t_print("max name length: %ld\n", nLength); + } + if (_nMask == VolumeInfoMask_MaxPathLength) + { + sal_uInt32 nLength = _aVolumeInfo.getMaxPathLength(); + t_print("max path length: %ld\n", nLength); + } + if (_nMask == VolumeInfoMask_FileSystemCaseHandling) + { + bool bIsCase = _aVolumeInfo.isCaseSensitiveFileSystem(); + t_print("filesystem case sensitive: %s\n", bIsCase ? "yes" : "no"); + } + } + + void checkVolumeInfo(sal_Int32 _nMask) + { + ::osl::VolumeInfo aVolumeInfo( _nMask ); + //call getVolumeInfo here + nError1 = ::osl::Directory::getVolumeInfo( aVolURL1, aVolumeInfo ); + // LLA: IMHO it's not a bug, if VolumeInfo is not valid, it's a feature + // LLA: CPPUNIT_ASSERT_MESSAGE("mask is not valid", sal_True == aVolumeInfo.isValid( _nMask ) ); + if (aVolumeInfo.isValid( _nMask)) + { + checkValidMask(aVolumeInfo, _nMask); + } + } + + + void getVolumeInfo_001_1( ) + { + sal_Int32 mask = VolumeInfoMask_FileSystemName; + checkVolumeInfo(mask); + } + void getVolumeInfo_001_2( ) + { + sal_Int32 mask = VolumeInfoMask_Attributes; + checkVolumeInfo(mask); + } + void getVolumeInfo_001_3( ) + { + sal_Int32 mask = VolumeInfoMask_TotalSpace; + checkVolumeInfo(mask); + } + void getVolumeInfo_001_4( ) + { + sal_Int32 mask = VolumeInfoMask_UsedSpace; + checkVolumeInfo(mask); + } + void getVolumeInfo_001_5( ) + { + sal_Int32 mask = VolumeInfoMask_FreeSpace; + checkVolumeInfo(mask); + } + void getVolumeInfo_001_6( ) + { + sal_Int32 mask = VolumeInfoMask_MaxNameLength; + checkVolumeInfo(mask); + } + void getVolumeInfo_001_7( ) + { + sal_Int32 mask = VolumeInfoMask_MaxPathLength; + checkVolumeInfo(mask); + } + void getVolumeInfo_001_8( ) + { + sal_Int32 mask = VolumeInfoMask_FileSystemCaseHandling; + checkVolumeInfo(mask); + } + + void getVolumeInfo_002( ) + { + sal_Int32 mask = VolumeInfoMask_FileSystemName; + ::osl::VolumeInfo aVolumeInfo( mask ); + //call getVolumeInfo here + + // LLA: rtl::OUString aRootSysURL; + // LLA: nError1 = osl::File::getFileURLFromSystemPath(aRootSys, aRootSysURL); + // LLA: + // LLA: CPPUNIT_ASSERT_MESSAGE( "can't convert root path to file url", + // LLA: ( osl::FileBase::E_NONE == nError1 ) ); + + nError1 = ::osl::Directory::getVolumeInfo( aRootSys, aVolumeInfo ); + + CPPUNIT_ASSERT_MESSAGE( "test for getVolumeInfo function: use system path as parameter.", + ( osl::FileBase::E_INVAL == nError1 ) ); + } + + void getVolumeInfo_003( ) + { + sal_Int32 mask = VolumeInfoMask_FileSystemName; + ::osl::VolumeInfo aVolumeInfo( mask ); + //call getVolumeInfo here + nError1 = ::osl::Directory::getVolumeInfo( aTmpName3, aVolumeInfo ); + +// LLA: in Windows, it reply no error, it did not pass in (W32). +#ifdef UNX + CPPUNIT_ASSERT_MESSAGE( "test for getVolumeInfo function: non-existence test. ", + ( osl::FileBase::E_NOENT == nError1 ) ); +#endif + } + + CPPUNIT_TEST_SUITE( getVolumeInfo ); + CPPUNIT_TEST( getVolumeInfo_001_1 ); + CPPUNIT_TEST( getVolumeInfo_001_2 ); + CPPUNIT_TEST( getVolumeInfo_001_3 ); + CPPUNIT_TEST( getVolumeInfo_001_4 ); + CPPUNIT_TEST( getVolumeInfo_001_5 ); + CPPUNIT_TEST( getVolumeInfo_001_6 ); + CPPUNIT_TEST( getVolumeInfo_001_7 ); + CPPUNIT_TEST( getVolumeInfo_001_8 ); + CPPUNIT_TEST( getVolumeInfo_002 ); + CPPUNIT_TEST( getVolumeInfo_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class getVolumeInfo + + + //--------------------------------------------------------------------- + // testing the method + // inline static RC create( const ::rtl::OUString& ustrDirectoryURL ) + //--------------------------------------------------------------------- + class create : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + + // test code. + void create_001( ) + { + //create directory in $TEMP/tmpdir + nError1 = ::osl::Directory::create( aTmpName3 ); + //check for existence + nError2 = ::osl::Directory::create( aTmpName3 ); + //remove it + deleteTestDirectory( aTmpName3 ); + + CPPUNIT_ASSERT_MESSAGE( "test for create function: create a directory and check its existence.", + ( osl::FileBase::E_None == nError1 ) && + ( osl::FileBase::E_EXIST== nError2 ) ); + } + + void create_002( ) + { + //create directory in /tmpname + nError1 = ::osl::Directory::create( aTmpName7 ); +#if defined (WNT ) + nError1 = osl::FileBase::E_ACCES; /// in Windows, you can create directory in c:/ any way. + deleteTestDirectory( aTmpName7 ); +#endif + + CPPUNIT_ASSERT_MESSAGE( "test for create function: create a directory in root for access test.", + ( osl::FileBase::E_ACCES == nError1 ) ); + } + + void create_003( ) + { + //create directory in /tmpname + nError1 = ::osl::Directory::create( aSysPath1 ); + + CPPUNIT_ASSERT_MESSAGE( "test for create function: create a directory using system path.", + ( osl::FileBase::E_INVAL == nError1 ) ); + } + + CPPUNIT_TEST_SUITE( create ); + CPPUNIT_TEST( create_001 ); + CPPUNIT_TEST( create_002 ); + CPPUNIT_TEST( create_003 ); + CPPUNIT_TEST_SUITE_END( ); + };// class create + + //--------------------------------------------------------------------- + // testing the method + // inline static RC remove( const ::rtl::OUString& ustrDirectoryURL ) + //--------------------------------------------------------------------- + class remove : public CppUnit::TestFixture + { + ::osl::FileBase::RC nError1, nError2; + + public: + + // test code. + void remove_001( ) + { + //create directory in $TEMP/tmpdir + nError1 = ::osl::Directory::create( aTmpName3 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //remove it + nError1 = ::osl::Directory::remove( aTmpName3 ); + //check for existence + ::osl::Directory rDirectory( aTmpName3 ); + nError2 = rDirectory.open( ); + + CPPUNIT_ASSERT_MESSAGE( "test for remove function: remove a directory and check its existence.", + ( osl::FileBase::E_None == nError1 ) && + ( osl::FileBase::E_NOENT == nError2 ) ); + } + + void remove_002( ) + { + //create directory in $TEMP/tmpdir + nError1 = ::osl::Directory::create( aTmpName3 ); + CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); + //try to remove it by system path + nError1 = ::osl::Directory::remove( aSysPath3 ); + //check for existence + ::osl::Directory rDirectory( aTmpName3 ); + nError2 = rDirectory.open( ); + if ( osl::FileBase::E_NOENT != nError2 ) + ::osl::Directory::remove( aTmpName3 ); + + CPPUNIT_ASSERT_MESSAGE( "test for remove function: remove a directory by its system path, and check its existence.", + ( osl::FileBase::E_INVAL == nError1 ) ); + } + + void remove_003( ) + { + //try to remove a non-existed directory + nError1 = ::osl::Directory::remove( aTmpName6 ); + + CPPUNIT_ASSERT_MESSAGE( "test for remove function: try to remove a non-existed directory.", + ( osl::FileBase::E_NOENT == nError1 ) ); + } + + void remove_004( ) + { + createTestFile( aTmpName6 ); + sal_Bool bExist = ifFileExist( aTmpName6 ); + //try to remove file. + nError1 = ::osl::Directory::remove( aTmpName6 ); + deleteTestFile( aTmpName6 ); + + CPPUNIT_ASSERT_MESSAGE( "test for remove function: try to remove a file but not directory.", + bExist == sal_True &&(( osl::FileBase::E_NOTDIR == nError1 ) || ( osl::FileBase::E_NOENT == nError1 )) ); + } + + void remove_005( ) + { + createTestDirectory( aTmpName3 ); + createTestFile( aTmpName4 ); + nError1 = ::osl::Directory::remove( aTmpName3 ); + deleteTestFile( aTmpName4 ); + deleteTestDirectory( aTmpName3 ); + ::rtl::OUString suError = ::rtl::OUString::createFromAscii("test for remove function: try to remove a directory that is not empty.") + errorToStr( nError1 ); +#if defined ( SOLARIS ) + //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. + //EEXIST The directory contains entries other than those for "." and "..". + t_print("#Solaris test\n"); + CPPUNIT_ASSERT_MESSAGE( suError, ( osl::FileBase::E_EXIST == nError1 ) ); +#else + CPPUNIT_ASSERT_MESSAGE( suError, ( osl::FileBase::E_NOTEMPTY == nError1 ) ); +#endif + } + + CPPUNIT_TEST_SUITE( remove ); + CPPUNIT_TEST( remove_001 ); + CPPUNIT_TEST( remove_002 ); + CPPUNIT_TEST( remove_003 ); + CPPUNIT_TEST( remove_004 ); + CPPUNIT_TEST( remove_005 ); + CPPUNIT_TEST_SUITE_END( ); + };// class remove + + //######################################## + // TEST Directory::createPath + //######################################## + + #ifdef WNT + # define PATH_BUFFER_SIZE MAX_PATH + #else + # define PATH_BUFFER_SIZE PATH_MAX + #endif + + char TEST_PATH_POSTFIX[] = "hello/world"; + + //######################################## + OUString get_test_path() + { + OUString tmp; + FileBase::RC rc = FileBase::getTempDirURL(tmp); + + CPPUNIT_ASSERT_MESSAGE + ( + "Test path creation failed", + rc == FileBase::E_None + ); + + OUStringBuffer b(tmp); + if (tmp.lastIndexOf('/') != (tmp.getLength() - 1)) + b.appendAscii("/"); + + b.appendAscii(TEST_PATH_POSTFIX); + + return b.makeStringAndClear(); + } + + //######################################## + void rm_test_path(const OUString& path) + { + sal_Unicode buffer[PATH_BUFFER_SIZE]; + rtl_copyMemory(buffer, path.getStr(), (path.getLength() + 1) * sizeof(sal_Unicode)); + + sal_Int32 i = rtl_ustr_lastIndexOfChar(buffer, '/'); + if (i == path.getLength()) + buffer[i] = 0; + + Directory::remove(buffer); + + i = rtl_ustr_lastIndexOfChar(buffer, '/'); + buffer[i] = 0; + Directory::remove(buffer); + } + + //######################################## + class DirCreatedObserver : public DirectoryCreationObserver + { + public: + DirCreatedObserver() : i(0) + { + } + + virtual void DirectoryCreated(const rtl::OUString& /*aDirectoryUrl*/) + { + i++; + }; + + int number_of_dirs_created() const + { + return i; + } + + private: + int i; + }; + + + //######################################## + class createPath : public CppUnit::TestFixture + { + public: + //########################################## + createPath() + {} + + //########################################## + void with_relative_path() + { + FileBase::RC rc = Directory::createPath( + OUString::createFromAscii(TEST_PATH_POSTFIX)); + + CPPUNIT_ASSERT_MESSAGE + ( + "osl_createDirectoryPath contract broken", + rc == FileBase::E_INVAL + ); + } + + //########################################## + void without_callback() + { + OUString tp_url = get_test_path(); + + rm_test_path(tp_url); + + FileBase::RC rc = Directory::createPath(tp_url); + + CPPUNIT_ASSERT_MESSAGE + ( + "osl_createDirectoryPath failed", + rc == FileBase::E_None + ); + } + + //########################################## + void with_callback() + { + OUString tp_url = get_test_path(); + + rm_test_path(tp_url); + + DirCreatedObserver* observer = new DirCreatedObserver; + FileBase::RC rc = Directory::createPath(tp_url, observer); + int nDirs = observer->number_of_dirs_created(); + delete observer; + CPPUNIT_ASSERT_MESSAGE + ( + "osl_createDirectoryPath failed", + (rc == FileBase::E_None) && (nDirs > 0) + ); + + } + +#ifdef WNT + + //########################################## + char* get_unused_drive_letter() + { + static char m_aBuff[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + DWORD ld = GetLogicalDrives(); + DWORD i = 4; + DWORD j = 2; + + while ((ld & i) && (i > 1)) + { i = i << 1; j++; } + + if (i > 2) + return m_aBuff + j; + + return NULL; + } + + //########################################## + void at_invalid_logical_drive() + { + char* drv = get_unused_drive_letter(); + char buff[PATH_BUFFER_SIZE]; + rtl_zeroMemory(buff, sizeof(buff)); + + strncpy(buff, drv, 1); + strcat(buff, ":\\"); + strcat(buff, TEST_PATH_POSTFIX); + + OUString path = OUString::createFromAscii(buff); + OUString tp_url; + FileBase::getFileURLFromSystemPath(path, tp_url); + + FileBase::RC rc = Directory::createPath(tp_url); + + CPPUNIT_ASSERT_MESSAGE + ( + "osl_createDirectoryPath doesn't fail on unused logical drive letters", + rc != FileBase::E_None + ); + } + + //########################################## + void with_UNC_path() + { + + OUString tp_unc = OUString::createFromAscii("\\\\Tra-1\\TRA_D\\hello\\world\\"); + OUString tp_url; + FileBase::getFileURLFromSystemPath(tp_unc, tp_url); + + FileBase::RC rc = Directory::createPath(tp_url); + + CPPUNIT_ASSERT_MESSAGE + ( + "osl_createDirectoryPath fails with UNC path", + rc == FileBase::E_None + ); + } + +#endif /* WNT */ + + CPPUNIT_TEST_SUITE(createPath); + CPPUNIT_TEST(with_relative_path); + CPPUNIT_TEST(without_callback); + CPPUNIT_TEST(with_callback); +#ifdef WNT + CPPUNIT_TEST(at_invalid_logical_drive); + + // adapt the UNC path in method createDirectoryPath_with_UNC_path + // in order to run this test successfully + //CPPUNIT_TEST(with_UNC_path); +#endif + CPPUNIT_TEST_SUITE_END(); + + }; // class createPath + + // ----------------------------------------------------------------------------- + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::ctors, "osl_Directory" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::open, "osl_Directory" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::isOpen, "osl_Directory" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::close, "osl_Directory" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::reset, "osl_Directory" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::getNextItem, "osl_Directory" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::getVolumeInfo, "osl_Directory" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::create, "osl_Directory" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::remove, "osl_Directory" ); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_Directory::createPath, "osl_Directory" ); +}// namespace osl_Directory + + +// ----------------------------------------------------------------------------- +// this macro creates an empty function, which will called by the RegisterAllFunctions() +// to let the user the possibility to also register some functions by hand. +// ----------------------------------------------------------------------------- + +/// NOADDITIONAL; + + + +/** get Current PID. +*/ +inline ::rtl::OUString getCurrentPID( ) +{ + //~ Get current PID and turn it into OUString; + int nPID = 0; +#ifdef WNT + nPID = GetCurrentProcessId(); +#else + nPID = getpid(); +#endif + return ( ::rtl::OUString::valueOf( ( long )nPID ) ); +} + + +/** Insert Current PID to the URL to avoid access violation between multiuser execution. +*/ +inline void insertPID( ::rtl::OUString & pathname ) +{ + //~ check if the path contain the temp directory, do nothing changes if not; + if ( pathname.indexOf( aTempDirectoryURL ) && pathname.indexOf( aTempDirectorySys ) ) + return; + + //~ format pathname to TEMP/USERPID/URL style; + if ( !pathname.indexOf( aTempDirectoryURL ) ) + { + ::rtl::OUString strPID( getCurrentPID( ) ); + ::rtl::OUString pathLeft = aTempDirectoryURL.copy( 0 ); + ::rtl::OUString pathRight = pathname.copy( aTempDirectoryURL.getLength( ) ); + pathname = pathLeft.copy( 0 ); + ( ( pathname += aSlashURL ) += strPID ) += pathRight; + } + else + { + ::rtl::OUString strPID( getCurrentPID( ) ); + ::rtl::OUString pathLeft = aTempDirectorySys.copy( 0 ); + ::rtl::OUString pathRight = pathname.copy( aTempDirectorySys.getLength( ) ); + pathname = pathLeft.copy( 0 ); + ( ( pathname += aSlashURL ) += strPID ) += pathRight; + } + + +} + +/** to do some initialized work, we replace the NOADDITIONAL macro with the initialize work which + will check the file and directory existence. and set some variables for test use. + to simplify the initialize work, we seperate it into UNIX section and Windows section, the main task + of initialization is adapt all URL defined in osl_File_Const.h to TEMP/USERPID/URL style format, + since there may be an instance that multiuser execute test at the same time, and the temp file + may not be clean up in this case due to access right problem. +*/ +void RegisterAdditionalFunctions( FktRegFuncPtr _pFunc ) +{ + (void)_pFunc; + t_print( "Initializing..." ); + + //~ make sure the c:\temp exist, if not, create it. +#if ( defined WNT ) + if ( checkDirectory( aTempDirectoryURL, osl_Check_Mode_Exist ) != sal_True ) { + t_print( "\n#C:\\temp is not exist, now creating\n" ); + createTestDirectory( aTempDirectoryURL ); + }; +#endif + + //~ make sure the c:\temp\PID or /tmp/PID exist, if not, create it. initialize the user directory. + ( aUserDirectoryURL += aSlashURL ) += getCurrentPID( ); + ( aUserDirectorySys += aSlashURL ) += getCurrentPID( ); + + if ( checkDirectory( aUserDirectoryURL, osl_Check_Mode_Exist ) != sal_True ) { + createTestDirectory( aUserDirectoryURL ); + } + + //~ adapt all URL to the TEMP/USERPID/URL format; + insertPID( aCanURL1 ); + insertPID( aTmpName3 ); + insertPID( aTmpName4 ); + insertPID( aTmpName5 ); + insertPID( aTmpName6 ); + insertPID( aTmpName8 ); + insertPID( aTmpName9 ); + insertPID( aLnkURL1 ); + insertPID( aFifoSys ); + insertPID( aSysPath1 ); + insertPID( aSysPath2 ); + insertPID( aSysPath3 ); + insertPID( aSysPath4 ); + + t_print( "Done.\n" ); + +} + + +//~ do some clean up work after all test completed. +class GlobalObject +{ + public: + ~GlobalObject() + { + try + { + //~ make sure the c:\temp\PID or /tmp/PID exist, if yes, delete it. + t_print( "\n#Do some clean-ups ...\n" ); + if ( checkDirectory( aUserDirectoryURL, osl_Check_Mode_Exist ) == sal_True ) { + deleteTestDirectory( aUserDirectoryURL ); + } + + // LLA: t_print("after deleteTestDirectory\n"); + //~ special clean up task in Windows and Unix seperately; +#if ( defined UNX ) || ( defined OS2 ) + //~ some clean up task for UNIX OS + ; +#else + //~ some clean up task for Windows OS + //~ check if some files are in the way, remove them if necessary. + if ( ifFileExist( aTmpName6 ) == sal_True ) + deleteTestFile( aTmpName6 ); + if ( ifFileExist( aTmpName4 ) == sal_True ) + deleteTestFile( aTmpName4 ); + if ( checkDirectory( aTmpName4, osl_Check_Mode_Exist ) == sal_True ) + deleteTestDirectory( aTmpName4 ); + if ( ifFileExist( aTmpName3 ) == sal_True ) + deleteTestFile( aTmpName3 ); + if ( checkDirectory( aTmpName3, osl_Check_Mode_Exist ) == sal_True ) + deleteTestDirectory( aTmpName3 ); + + ::rtl::OUString aUStr( aUserDirectoryURL ); + concatURL( aUStr, aHidURL1 ); + if ( ifFileExist( aUStr ) == sal_True ) + deleteTestFile( aUStr ); + + ::rtl::OUString aUStr1( aRootURL ); + concatURL( aUStr1, aTmpName2 ); + if ( ifFileExist( aUStr1 ) == sal_True ) + deleteTestFile( aUStr1 ); +#endif + + } + catch (CppUnit::Exception &e) + { + t_print("Exception caught in GlobalObject dtor(). Exception message: '%s'. Source line: %d\n", e.what(), e.sourceLine().lineNumber()); + } + catch (...) + { + t_print("Exception caught (...) in GlobalObject dtor()\n"); + } + } +}; + +GlobalObject theGlobalObject; diff --git a/sal/qa/osl/file/osl_File_Const.h b/sal/qa/osl/file/osl_File_Const.h new file mode 100644 index 000000000000..7072b6ea6b11 --- /dev/null +++ b/sal/qa/osl/file/osl_File_Const.h @@ -0,0 +1,242 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ + +#ifndef _OSL_FILE_CONST_H_ +#define _OSL_FILE_CONST_H_ + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <sal/types.h> +#include <rtl/textenc.h> + +#include <rtl/ustring.hxx> +#include <rtl/uri.hxx> + + + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ + + +#ifdef __cplusplus +extern "C" +{ +#endif + + + +//------------------------------------------------------------------------ +// common used string resource +// these common used string will be used as assist resource in test +// they are mostly OS independent, some of the resource can be reused +// so, acommon test data repository will be better since it can be +// shared among all test code +//------------------------------------------------------------------------ + +const sal_Char pBuffer_Char[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +const sal_Char pBuffer_Number[] = "1234567890"; +const sal_Char pBuffer_Blank[] = ""; + +#define TRUNC_LEN 10; +#define ENLARG_LEN 100; + + + +//------------------------------------------------------------------------ +// OS dependent/independent definitions/includes +// we use FILE_PREFIX for URL prefix, +// TEST_PLATFORM for test platform initial, +// TEST_PLATFORM_ROOT for root dir in comrresponding platform, +// TEST_PLATFORM_TEMP for temp dir in comrresponding platform, +// PATH_LIST_DELIMITER for seperator of path list in comrresponding platform, +// PATH_SEPERATOR for seperator in URL or system path in comrresponding platform, +// PATH_MAX/MAX_PATH for max path length in comrresponding platform, +//------------------------------------------------------------------------ + +//------------------------------------------------------------------------ +// OS independent const definition +//------------------------------------------------------------------------ +# define FILE_PREFIX "file:///" +# define TEST_FILE_SIZE 1024 + +//------------------------------------------------------------------------ +// OS dependent declaration and includes +//------------------------------------------------------------------------ +#if ( defined UNX ) || ( defined OS2 ) //Unix +# include <unistd.h> +# include <limits.h> +# include <math.h> +# include <errno.h> +# include <fcntl.h> +# include <sys/stat.h> +# include <sys/statfs.h> +# include <sys/statvfs.h> +# include <sys/types.h> +# define TEST_PLATFORM "" +# define TEST_PLATFORM_ROOT "/" +# define TEST_PLATFORM_TEMP "tmp" +# define PATH_LIST_DELIMITER ":" +# define PATH_SEPERATOR "/" +#endif +#if (defined WNT ) // Windows +#include <tools/prewin.h> +// # include <windows.h> +# include <tchar.h> +# include <io.h> +# include <stdio.h> +# include <stdlib.h> +#include <tools/postwin.h> +# define PATH_MAX MAX_PATH +# define TEST_PLATFORM "c:/" +# define TEST_PLATFORM_ROOT "c:/" +# define TEST_PLATFORM_TEMP "temp" +# define PATH_LIST_DELIMITER ";" +# define PATH_SEPERATOR "/" +#endif + + +//------------------------------------------------------------------------ +// macro definition for the ASCII array/OUString declarations, +// we use p### for the ASCII array, +// a### for the OUString, +// n###Len for its length +//------------------------------------------------------------------------ + +#define OSLTEST_DECLARE( str_name, str_value ) \ + ::rtl::OUString a##str_name = rtl::OUString::createFromAscii( ( str_value ) ) + +#define OSLTEST_DECLARE_UTF8(str_name, str_value ) \ + ::rtl::OUString a##str_name = ::rtl::Uri::decode( ::rtl::OUString::createFromAscii( ( str_value ) ), rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8) + +//------------------------------------------------------------------------ +// OS independent file definition +//------------------------------------------------------------------------ +OSLTEST_DECLARE( NullURL, "" ); +OSLTEST_DECLARE( SlashURL, PATH_SEPERATOR ); +OSLTEST_DECLARE( PreURL, FILE_PREFIX ); +OSLTEST_DECLARE( RootURL, FILE_PREFIX TEST_PLATFORM ); + +OSLTEST_DECLARE( TempDirectoryURL, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP ); +OSLTEST_DECLARE( TempDirectorySys, TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP ); +OSLTEST_DECLARE( UserDirectoryURL, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "" ); +OSLTEST_DECLARE( UserDirectorySys, TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP "" ); + +//------------------------------------------------------------------------ +// common used URL:temp, canonical, root, relative, link,etc +//------------------------------------------------------------------------ +OSLTEST_DECLARE( CanURL1, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "/canonical.name" ); +OSLTEST_DECLARE( CanURL2, "ca@#;+.,$///78no\0ni..name" ); +OSLTEST_DECLARE( CanURL3, "ca@#;+.,$//tmp/678nonical//name" ); +OSLTEST_DECLARE( CanURL4, "canonical.name" ); +OSLTEST_DECLARE( TmpName1, "tmpdir" ); +OSLTEST_DECLARE( TmpName2, "tmpname" ); +OSLTEST_DECLARE( TmpName3, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "/tmpdir" ); +OSLTEST_DECLARE( TmpName4, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "/tmpdir/tmpname" ); +OSLTEST_DECLARE( TmpName5, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "/tmpdir/../tmpdir/./tmpname" ); +OSLTEST_DECLARE( TmpName6, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "/tmpname" ); +OSLTEST_DECLARE( TmpName7, FILE_PREFIX TEST_PLATFORM "tmpname" ); +OSLTEST_DECLARE( TmpName8, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "/tmpname/tmpdir" ); +OSLTEST_DECLARE( TmpName9, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "/tmpdir/../tmpdir/./" ); +OSLTEST_DECLARE_UTF8( TmpName10, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "/%E6%9C%AA%E5%91%BD%E5%90%8Dzhgb18030" ); + +OSLTEST_DECLARE( RelURL1, "relative/file1" ); +OSLTEST_DECLARE( RelURL2, "relative/./file2" ); +OSLTEST_DECLARE( RelURL3, "relative/../file3" ); +OSLTEST_DECLARE( RelURL4, "././relative/../file4" ); +OSLTEST_DECLARE( RelURL5, TEST_PLATFORM_TEMP "/./../" TEST_PLATFORM_TEMP ); +OSLTEST_DECLARE( LnkURL1, FILE_PREFIX TEST_PLATFORM TEST_PLATFORM_TEMP "/link.file" ); +OSLTEST_DECLARE( HidURL1, ".hiddenfile" ); + +//------------------------------------------------------------------------ +// common used System Path:temp, root,etc +//------------------------------------------------------------------------ +OSLTEST_DECLARE( RootSys, TEST_PLATFORM_ROOT ); +OSLTEST_DECLARE( SysPath1, TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP "/system.path" ); +OSLTEST_DECLARE( SysPath2, TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP "/system/path" ); +OSLTEST_DECLARE( SysPath3, TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP "/tmpdir" ); +OSLTEST_DECLARE( SysPath4, TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP "/tmpname" ); +OSLTEST_DECLARE_UTF8( SysPath5, TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP "/%E6%9C%AA%E5%91%BD%E5%90%8Dzhgb18030" ); +OSLTEST_DECLARE( FifoSys, TEST_PLATFORM_ROOT TEST_PLATFORM_TEMP "/tmpdir/fifo" ); + +//------------------------------------------------------------------------ +// FileType URL, we pick some canonical file in corresponding system for test: +// socket, link, etc. +// Note that this may be changed in the different platform, so be careful to use. +//------------------------------------------------------------------------ +#if ( defined UNX ) || ( defined OS2 ) // Unix +OSLTEST_DECLARE( TypeURL1, FILE_PREFIX "dev/ccv"); //socket Solaris/Linux +OSLTEST_DECLARE( TypeURL2, FILE_PREFIX "devices/pseudo/tcp@0:tcp"); //special Solaris/Linux +OSLTEST_DECLARE( TypeURL3, FILE_PREFIX "lib" ); //link Solaris +#else // Windows +OSLTEST_DECLARE( TypeURL1, FILE_PREFIX "" ); +OSLTEST_DECLARE( TypeURL2, FILE_PREFIX "" ); +OSLTEST_DECLARE( TypeURL3, FILE_PREFIX "" ); +#endif + +//------------------------------------------------------------------------ +// Volume device URL, we pick some canonical volume device for test: +// UNIX file system, Floppy Disk, Proc file system, Temp file system, Compact Disk. +//------------------------------------------------------------------------ +#if ( defined UNX ) || ( defined OS2 ) // Unix +OSLTEST_DECLARE( VolURL1, FILE_PREFIX ""); //ufs Solaris/Linux +#ifdef SOLARIS +OSLTEST_DECLARE( VolURL2, FILE_PREFIX "dev/fd" ); //fd Solaris +#else +OSLTEST_DECLARE( VolURL2, FILE_PREFIX "dev/floppy/0u1440" ); //fd0 Linux +#endif +OSLTEST_DECLARE( VolURL3, FILE_PREFIX "proc" ); //proc Solaris/Linux +OSLTEST_DECLARE( VolURL4, FILE_PREFIX "staroffice" ); //nfs Solaris/Linux +OSLTEST_DECLARE( VolURL5, FILE_PREFIX "tmp" ); //tmpfs Solaris +OSLTEST_DECLARE( VolURL6, FILE_PREFIX "cdrom" ); //cd Solaris +#else // Windows +OSLTEST_DECLARE( VolURL1, FILE_PREFIX "c:/" ); +OSLTEST_DECLARE( VolURL2, FILE_PREFIX "a:/" ); +OSLTEST_DECLARE( VolURL3, FILE_PREFIX "" ); +OSLTEST_DECLARE( VolURL4, FILE_PREFIX "" ); +OSLTEST_DECLARE( VolURL5, FILE_PREFIX "c:/temp" ); +OSLTEST_DECLARE( VolURL6, FILE_PREFIX "e:/" ); +#endif + + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ + +#ifdef __cplusplus +} +#endif + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ + + +#endif /* _OSL_FILE_CONST_H_ */ diff --git a/sal/qa/osl/file/osl_old_test_file.cxx b/sal/qa/osl/file/osl_old_test_file.cxx new file mode 100644 index 000000000000..674e685449be --- /dev/null +++ b/sal/qa/osl/file/osl_old_test_file.cxx @@ -0,0 +1,273 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sal.hxx" + +// LLA: +// this file is converted to use with testshl2 +// original was placed in sal/test/textenc.cxx + +#include <stdio.h> + +#include <osl/file.h> +#include <osl/process.h> +#include <rtl/ustring.hxx> +#ifdef SAL_UNX +#include <unistd.h> +#include <limits.h> +#include <string.h> +#include <sys/stat.h> +#define TEST_VOLUME "" +#else +// WINDOWS +#define TEST_VOLUME "c:/" +#endif + +#include <testshl/simpleheader.hxx> + +namespace osl_test_file +{ + +// ----------------------------------------------------------------------------- + +class oldtestfile : public CppUnit::TestFixture +{ +public: + void test_file_001(); + void test_file_002(); + void test_file_003(); + void test_file_004(); + + CPPUNIT_TEST_SUITE( oldtestfile ); + CPPUNIT_TEST( test_file_001 ); + CPPUNIT_TEST( test_file_002 ); + CPPUNIT_TEST( test_file_003 ); + CPPUNIT_TEST( test_file_004 ); + CPPUNIT_TEST_SUITE_END( ); +}; + +char *aSource1[] = +{ + "a" , "file:///" TEST_VOLUME "bla/a", + "a/" , "file:///" TEST_VOLUME "bla/a", + "../a" , "file:///" TEST_VOLUME "a" , + "a/.." , "file:///" TEST_VOLUME "bla", + "a/../b" , "file:///" TEST_VOLUME "bla/b", + ".." , "file:///" TEST_VOLUME "", + "a/b/c/d/" , "file:///" TEST_VOLUME "bla/a/b/c/d", + "a/./c" , "file:///" TEST_VOLUME "bla/a/c", + "file:///bla/blub", "file:///" TEST_VOLUME "bla/blub", + 0 , 0 +}; + +char *aSource2[ ] = +{ + "a" , "file:///" TEST_VOLUME "bla/blubs/schnubbel/a", + "a/", "file:///" TEST_VOLUME "bla/blubs/schnubbel/a", + "../a", "file:///" TEST_VOLUME "bla/blubs/a", + "../../a", "file:///" TEST_VOLUME "bla/a", + "../../../a", "file:///" TEST_VOLUME "a", + "../../../a/b/c/d", "file:///" TEST_VOLUME "a/b/c/d", + 0,0 +}; + +char *aSource3[ ] = +{ + ".." , "/a", + "../a" , "/a/a", + "e/f" , "/c/e/f", + "../..", "", + 0,0 +}; + +using namespace rtl; + +void oldtestfile::test_file_001() +{ +#ifdef WIN32 + return; +#endif + + OUString base1( RTL_CONSTASCII_USTRINGPARAM( "file:///" TEST_VOLUME "bla" ) ); + int i; + for( i = 0 ; aSource1[i] ; i +=2 ) + { + OUString target; + OUString rel = OUString::createFromAscii( aSource1[i] ); + oslFileError e = osl_getAbsoluteFileURL( base1.pData, rel.pData , &target.pData ); + CPPUNIT_ASSERT_MESSAGE("failure #1", osl_File_E_None == e ); + if( osl_File_E_None == e ) + { + CPPUNIT_ASSERT_MESSAGE("failure #1.1", target.equalsAscii( aSource1[i+1] ) ); + } + OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US ); + OString obase = OUStringToOString( base1 , RTL_TEXTENCODING_ASCII_US ); + fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource1[i], o.pData->buffer ); + } + + OUString err1( RTL_CONSTASCII_USTRINGPARAM( "../.." ) ); + OUString target; + CPPUNIT_ASSERT_MESSAGE("failure #11", osl_File_E_None != osl_getAbsoluteFileURL( base1.pData , err1.pData , &target.pData ) ); + +} + +void oldtestfile::test_file_002() +{ +#ifdef WIN32 + return; +#endif + + OUString base2( RTL_CONSTASCII_USTRINGPARAM( "file:///" TEST_VOLUME "bla/blubs/schnubbel" ) ); + int i; + for( i = 0 ; aSource2[i] ; i +=2 ) + { + OUString target; + OUString rel = OUString::createFromAscii( aSource2[i] ); + oslFileError e = osl_getAbsoluteFileURL( base2.pData, rel.pData , &target.pData ); + CPPUNIT_ASSERT_MESSAGE("failure #2", osl_File_E_None == e ); + if( osl_File_E_None == e ) + { + CPPUNIT_ASSERT_MESSAGE("failure #2.1", target.equalsAscii( aSource2[i+1] ) ); + } + OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US ); + OString obase = OUStringToOString( base2 , RTL_TEXTENCODING_ASCII_US ); +// fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource2[i], o.pData->buffer ); + } +} + +void oldtestfile::test_file_003() +{ +#ifdef WIN32 + return; +#endif + + // links ! +#ifdef UNX + int i; + char buf[PATH_MAX]; + if( getcwd( buf, PATH_MAX ) ) + { + char buf2[PATH_MAX]; + strcpy( buf2 , buf ); + strcat( buf2, "/a" ); + + if( 0 == mkdir( buf2 , S_IRWXG | S_IRWXO | S_IRWXU ) ) + { + strcat( buf2, "/b" ); + if( 0 == mkdir( buf2, S_IRWXU | S_IRWXO | S_IRWXU ) ) + { + if( 0 == symlink( buf2 , "c" ) ) + { + OUString dir; + osl_getProcessWorkingDir( &(dir.pData) ); + + OUString base3 = dir; + base3 += OUString( RTL_CONSTASCII_USTRINGPARAM( "/c" ) ); + for( i = 0 ; aSource3[i] ; i +=2 ) + { + OUString target; + OUString rel = OUString::createFromAscii( aSource3[i] ); + oslFileError e = osl_getAbsoluteFileURL( base3.pData, rel.pData , &target.pData ); + CPPUNIT_ASSERT_MESSAGE("failure #3", osl_File_E_None == e ); + if( osl_File_E_None == e ) + { + CPPUNIT_ASSERT_MESSAGE("failure #4", target.getLength() >= dir.getLength() ); + if( target.getLength() >= dir.getLength() ) + { + int j; + for( j = dir.getLength() ; + j < target.getLength() && + aSource3[i+1][j-dir.getLength()] == target[j] ; j++ ); + CPPUNIT_ASSERT_MESSAGE("failure #5", j == target.getLength() ); + } + } + OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US ); + OString obase = OUStringToOString( base3 , RTL_TEXTENCODING_ASCII_US ); + fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource3[i], o.pData->buffer ); + } + unlink( "c" ); + } + else + { + CPPUNIT_ASSERT_MESSAGE("failure #6", 0 ); + } + rmdir( "a/b" ); + } + else + { + CPPUNIT_ASSERT_MESSAGE("failure #7", 0 ); + } + rmdir( "a" ); + } + else + { + CPPUNIT_ASSERT_MESSAGE("failure #8", 0 ); + } + } + else + { + CPPUNIT_ASSERT_MESSAGE("failure #9", 0 ); + } +#endif +} + +void oldtestfile::test_file_004() +{ +#ifdef WIN32 + return; +#endif + + OUString base4( RTL_CONSTASCII_USTRINGPARAM( "file:///" TEST_VOLUME "bla/" ) ); + int i; + for( i = 0 ; aSource1[i] ; i +=2 ) + { + OUString target; + OUString rel = OUString::createFromAscii( aSource1[i] ); + oslFileError e = osl_getAbsoluteFileURL( base4.pData, rel.pData , &target.pData ); + CPPUNIT_ASSERT_MESSAGE("failure #10", osl_File_E_None == e ); + if( osl_File_E_None == e ) + { + CPPUNIT_ASSERT_MESSAGE("failure #10.1", target.equalsAscii( aSource1[i+1] ) ); + } + OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US ); + OString obase = OUStringToOString( base4 , RTL_TEXTENCODING_ASCII_US ); + fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource1[i], o.pData->buffer ); + } + + +// fprintf( stderr, "test_file done\n" ); +} + +} // namespace osl_test_file + +// ----------------------------------------------------------------------------- +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_test_file::oldtestfile, "osl_File" ); + +// ----------------------------------------------------------------------------- +NOADDITIONAL; + diff --git a/sal/qa/osl/file/test_cpy_wrt_file.cxx b/sal/qa/osl/file/test_cpy_wrt_file.cxx new file mode 100755 index 000000000000..3bd5ac4cd6d1 --- /dev/null +++ b/sal/qa/osl/file/test_cpy_wrt_file.cxx @@ -0,0 +1,111 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sal.hxx" + +#include <testshl/simpleheader.hxx> +#include <osl/file.hxx> +#include <osl/thread.h> +#include <rtl/ustring.hxx> + +using namespace osl; +using namespace rtl; + +//######################################## +#ifdef UNX +# define COPY_SOURCE_PATH "/home/tr109510/ucbhelper.cxx" +# define COPY_DEST_PATH "/mnt/mercury08/ucbhelper.cxx" +#else /* if WNT */ +# define COPY_SOURCE_PATH "d:\\msvcr70.dll" +# define COPY_DEST_PATH "x:\\tra\\msvcr70.dll" +#endif + +class test_osl_copyFile : public CppUnit::TestFixture +{ +public: + void cp_file() + { + rtl::OUString src_url; + FileBase::getFileURLFromSystemPath(rtl::OUString::createFromAscii(COPY_SOURCE_PATH), src_url); + + rtl::OUString dest_url; + FileBase::getFileURLFromSystemPath(rtl::OUString::createFromAscii(COPY_DEST_PATH), dest_url); + + FileBase::RC err = File::copy(src_url, dest_url); + CPPUNIT_ASSERT_MESSAGE("Copy didn't recognized disk full", err != FileBase::E_None); + } + + CPPUNIT_TEST_SUITE(test_osl_copyFile); + CPPUNIT_TEST(cp_file); + CPPUNIT_TEST_SUITE_END(); +}; + +//######################################## +#ifdef UNX +# define WRITE_DEST_PATH "/mnt/mercury08/muell.tmp" +#else /* if WNT */ +# define WRITE_DEST_PATH "d:\\tmp_data.tmp" +#endif + +class test_osl_writeFile : public CppUnit::TestFixture +{ +public: + void wrt_file() + { + rtl::OUString dest_url; + FileBase::getFileURLFromSystemPath(rtl::OUString::createFromAscii(WRITE_DEST_PATH), dest_url); + + File tmp_file(dest_url); + rtl::OUString suErrorMsg = rtl::OUString::createFromAscii("File creation failed: ")+ dest_url; + FileBase::RC err = tmp_file.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Create); + + CPPUNIT_ASSERT_MESSAGE( suErrorMsg, err == FileBase::E_None || err == FileBase::E_EXIST ); + + char buffer[50000]; + sal_uInt64 written = 0; + err = tmp_file.write((void*)buffer, sizeof(buffer), written); + + err = tmp_file.sync(); + + CPPUNIT_ASSERT_MESSAGE("Write didn't recognized disk full", err != FileBase::E_None); + + tmp_file.close(); + } + + CPPUNIT_TEST_SUITE(test_osl_writeFile); + CPPUNIT_TEST(wrt_file); + CPPUNIT_TEST_SUITE_END(); +}; + +//##################################### +// register test suites +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(test_osl_writeFile, "test_osl_writeFile"); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(test_osl_copyFile, "test_osl_copyFile"); + +NOADDITIONAL; + |