/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
 *
 * 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(RTL_CONSTASCII_USTRINGPARAM("The returned error is: ")) );
    suBuf.append( rtl::OStringToOUString(errorToString(nError), RTL_TEXTENCODING_ASCII_US) );
    suBuf.append( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("!\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

    File aFile(aPathURL);
    nError = aFile.open( osl_File_OpenFlag_Read | osl_File_OpenFlag_Write | osl_File_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_CONSTASCII_USTRINGPARAM("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 ( osl_File_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 written.
                /// write chars into the file.
                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( osl_File_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 osl_File_OpenFlag_Write
#else
    ::osl::File testFile( str );
    bCheckResult = (osl::FileBase::E_None == testFile.open( osl_File_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(RTL_CONSTASCII_USTRINGPARAM(": the returned value is '"));
    aUString += returnVal;
    aUString += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("', but the value should be '"));
    aUString += rightVal;
    aUString += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("'."));
    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
{

    //---------------------------------------------------------------------
    // 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

    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(RTL_CONSTASCII_USTRINGPARAM("/relative/file1")) );
    check_getAbsoluteFileURL( aUserDirectoryURL, "relative/file1",::osl::FileBase::E_None, suAssume );
  }
  void getAbsoluteFileURL::getAbsoluteFileURL_001_2()
  {
    rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/relative/file2")) );
    check_getAbsoluteFileURL( aUserDirectoryURL, "relative/./file2",::osl::FileBase::E_None, suAssume );
  }
  void getAbsoluteFileURL::getAbsoluteFileURL_001_3()
  {
    rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/file3")) );
    check_getAbsoluteFileURL( aUserDirectoryURL, "relative/../file3",::osl::FileBase::E_None, suAssume );
  }
  void getAbsoluteFileURL::getAbsoluteFileURL_001_4()
  {
    rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/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(RTL_CONSTASCII_USTRINGPARAM("/relative/")) );
#else
    suAssume = aUserDirectoryURL.concat( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/relative")) );
#endif
    check_getAbsoluteFileURL( aUserDirectoryURL, "././relative/.",::osl::FileBase::E_None, suAssume );
  }
  void getAbsoluteFileURL::getAbsoluteFileURL_001_6()
  {
    rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/.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(RTL_CONSTASCII_USTRINGPARAM("/.a/")) );
#else //windows
    suAssume = aUserDirectoryURL.concat( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/.a")) );
#endif
    check_getAbsoluteFileURL( aUserDirectoryURL, "./.a/mydir/..",::osl::FileBase::E_None, suAssume );
  }
  void getAbsoluteFileURL::getAbsoluteFileURL_001_8()
  {
    rtl::OUString suAssume = aUserDirectoryURL.concat( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/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(RTL_CONSTASCII_USTRINGPARAM("/link.file"));
        ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/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(RTL_CONSTASCII_USTRINGPARAM("/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(RTL_CONSTASCII_USTRINGPARAM("/test1"));
        createTestDirectory( aUStrUpBase );
        ::rtl::OUString aUStrBase = aUserDirectoryURL + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/test1/dir1"));
        createTestDirectory( aUStrBase );

        ::rtl::OUString suAssume = aUserDirectoryURL.concat( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/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, "");
    }

        //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_CONSTASCII_USTRINGPARAM("test for getSystemPathFromFileURL(' "));
            suError += aNormalURL;
            suError += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" ') 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_CONSTASCII_USTRINGPARAM("test for getSystemPathFromFileURL(' "));
            suError += aNormalURL;
            suError += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" ') 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( osl_File_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( osl_File_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( osl_File_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

    // -----------------------------------------------------------------------------
    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 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(RTL_CONSTASCII_USTRINGPARAM("/tmpdir/link.file"));
            ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/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_CONSTASCII_USTRINGPARAM("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( )
        {
        }

/*
 * 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(RTL_CONSTASCII_USTRINGPARAM("/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_CONSTASCII_USTRINGPARAM("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( osl_File_OpenFlag_Write | osl_File_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(RTL_CONSTASCII_USTRINGPARAM("/link.file"));
            ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_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( osl_File_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( osl_File_OpenFlag_Read | osl_File_OpenFlag_Write | osl_File_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 osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_OpenFlag_Read | osl_File_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( osl_File_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( osl_File_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( osl_File_OpenFlag_Write | osl_File_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( osl_File_OpenFlag_Write | osl_File_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( osl_File_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( osl_File_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(RTL_CONSTASCII_USTRINGPARAM("/tmpname"));
        //printFileName( newName );
        nError1 = ::osl::File::move( aTmpName3, newName );
        //deleteTestDirectory( newName + OUString(RTL_CONSTASCII_USTRINGPARAM("/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( osl_File_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( osl_File_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(RTL_CONSTASCII_USTRINGPARAM("/tmpdir/link.file"));
            ( ( aUStr_SrcFileSys += aSlashURL ) += getCurrentPID( ) ) += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/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_CONSTASCII_USTRINGPARAM("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(RTL_CONSTASCII_USTRINGPARAM("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(RTL_CONSTASCII_USTRINGPARAM(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 (RTL_CONSTASCII_USTRINGPARAM("\\\\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;

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
