/** detailed wrong message.
*/ static OString errorToString(const osl::FileBase::RC _nError)
{
OString sResult; switch (_nError) { case osl::FileBase::E_None:
sResult = "Success"_ostr; break; case osl::FileBase::E_PERM:
sResult = "Operation not permitted"_ostr; break; case osl::FileBase::E_NOENT:
sResult = "No such file or directory"_ostr; break; case osl::FileBase::E_EXIST:
sResult = "Already Exist"_ostr; break; case osl::FileBase::E_ACCES:
sResult = "Permission denied"_ostr; break; case osl::FileBase::E_INVAL:
sResult = "The format of the parameters was not valid"_ostr; break; case osl::FileBase::E_NOTDIR:
sResult = "Not a directory"_ostr; break; case osl::FileBase::E_ISDIR:
sResult = "Is a directory"_ostr; break; case osl::FileBase::E_BADF:
sResult = "Bad file"_ostr; break; case osl::FileBase::E_NOTEMPTY:
sResult = "The directory is not empty"_ostr; break; default:
sResult = "Unknown Error"_ostr; break;
} return sResult;
}
static OString errorToStr(osl::FileBase::RC const& nError)
{
OString suBuf = "The returned error is: " +
errorToString(nError) + "!\n"; return suBuf;
}
/** compare two TimeValue, unit is "ms", since Windows time precision is better than UNX.
*/ /* FIXME: the above assertion is bogus */
#if (defined UNX) // precision of time in Windows is better than UNX # define delta 2000// time precision, 2000ms #else # define delta 1800// time precision, 1.8s #endif
/** compare two OUString file name.
*/ staticbool compareFileName(const OUString & ustr1, const OUString & ustr2)
{ bool bOk; // on Windows, the separator is '\', so here change to '/', then compare #ifdefined(_WIN32)
OUString ustr1new,ustr2new;
sal_Unicode reverseSlash = '\\';
if (ustr1.lastIndexOf(reverseSlash) != -1)
ustr1new = ustr1.replace(reverseSlash,'/'); else
ustr1new = ustr1; if (ustr2.lastIndexOf(reverseSlash) != -1)
ustr2new = ustr2.replace(reverseSlash,'/'); else
ustr2new = ustr2;
bOk = ustr1new.equalsIgnoreAsciiCase(ustr2new); #else
bOk = ustr1.equalsIgnoreAsciiCase(ustr2); #endif 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 isstartwith"file:///";.
*/ staticbool isURL(const OUString& pathname)
{ return pathname.startsWith(aPreURL);
}
/** concat two part to form a URL or system path, add PATH_SEPARATOR between them if necessary, add "file:///" to beginning if necessary.
*/ staticvoid concatURL(OUString & pathname1, const OUString & pathname2)
{ // check if pathname1 is full qualified URL; if (!isURL(pathname1))
{
OUString aPathName = pathname1.copy(0);
osl::FileBase::getFileURLFromSystemPath(pathname1, aPathName); // convert if not full qualified URL
pathname1 = aPathName.copy(0);
}
// check if '/' is in the end of pathname1 or at the begin of pathname2; if (!pathname1.endsWith(aSlashURL) && !pathname2.startsWith(aSlashURL))
pathname1 += aSlashURL;
pathname1 += pathname2;
}
/** create a temp test file using OUString name of full qualified URL or system path.
*/ staticvoid createTestFile(const OUString& filename)
{
OUString aPathURL = filename.copy(0);
osl::FileBase::RC nError;
if (!isURL(filename))
osl::FileBase::getFileURLFromSystemPath(filename, aPathURL); // convert if not full qualified URL
/** create a temp test file using OUString name of full qualified URL or system path in a base directory.
*/ staticvoid createTestFile(const OUString& basename, const OUString& filename)
{
OUString aBaseURL = basename.copy(0);
/** delete a temp test file using OUString name of full qualified URL or system path in a base directory.
*/ staticvoid deleteTestFile(const OUString& basename, const OUString& filename)
{
OUString aBaseURL = basename.copy(0);
/** create a temp test directory using OUString name of full qualified URL or system path.
*/ staticvoid createTestDirectory(const OUString& dirname)
{
OUString aPathURL = dirname.copy(0);
osl::FileBase::RC nError;
if (!isURL(dirname))
osl::FileBase::getFileURLFromSystemPath(dirname, aPathURL); // convert if not full qualified URL
nError = Directory::create(aPathURL); if ((nError != osl::FileBase::E_None) && (nError != osl::FileBase::E_EXIST))
printf("createTestDirectory failed: %d!\n", int(nError));
}
/** create a temp test directory using OUString name of full qualified URL or system path in a base directory.
*/ staticvoid createTestDirectory(const OUString& basename, const OUString& dirname)
{
OUString aBaseURL = basename.copy(0);
/** delete a temp test directory using OUString name of full qualified URL or system path.
*/ staticvoid deleteTestDirectory(const OUString& dirname)
{
OUString aPathURL = dirname.copy(0); if (!isURL(dirname))
osl::FileBase::getFileURLFromSystemPath(dirname, aPathURL); // convert if not full qualified URL
Directory testDir(aPathURL); if (testDir.isOpen())
testDir.close(); // close if still open.
/** delete a temp test directory using OUString name of full qualified URL or system path in a base directory.
*/ staticvoid deleteTestDirectory(const OUString& basename, const OUString& dirname)
{
OUString aBaseURL = basename.copy(0);
/** Check for the file and directory access right.
*/ enumclass oslCheckMode {
Exist,
OpenAccess,
ReadAccess,
WriteAccess
};
}
/** check if the file exist
*/ staticbool ifFileExist(const OUString & str)
{
File testFile(str); return (testFile.open(osl_File_OpenFlag_Read) == osl::FileBase::E_None);
}
/** check if the file can be written
*/ staticbool ifFileCanWrite(const OUString & str)
{ // on Windows, the file has no write right, but can be written #ifdef _WIN32 bool bCheckResult = false;
OUString aUStr = str.copy(0); if (isURL(str))
osl::FileBase::getSystemPathFromFileURL(str, aUStr);
OString aString = OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US); constchar *path = aString.getStr(); if ((_access(path, 2)) != -1)
bCheckResult = true; // on UNX, just test if open success with osl_File_OpenFlag_Write #else
File testFile(str); bool bCheckResult = (testFile.open(osl_File_OpenFlag_Write) == osl::FileBase::E_None); #endif return bCheckResult;
}
OString aString = msg +
OString::Concat(": the returned value is '") +
returnVal + "', but the value should be '" +
rightVal + "'."; return aString;
}
#if (defined UNX) /* chmod() method is different in Windows */ /** Change file mode, two version in UNIX and Windows;.
*/ staticvoid changeFileMode(OUString & filepath, sal_Int32 mode)
{
OString aString;
OUString aUStr = filepath.copy(0);
if (isURL(filepath))
osl::FileBase::getSystemPathFromFileURL(filepath, aUStr);
aString = OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US); int ret = chmod(aString.getStr(), mode);
CPPUNIT_ASSERT_EQUAL(0, ret);
} #else staticvoid hideFile(const OUString& filepath)
{
OUString aSysPath(filepath);
if (isURL(filepath))
osl::FileBase::getSystemPathFromFileURL(filepath, aSysPath);
bool ret = SetFileAttributesW(o3tl::toW(aSysPath.getStr()), FILE_ATTRIBUTE_HIDDEN);
CPPUNIT_ASSERT(ret);
} #endif
if (nError == osl::FileBase::E_None)
{
CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong: ResultURL is not equal to expected URL ", _suAssumeResultStr, suResultURL);
}
}
// if the given string is gt length 0, // we check also this string
OString sStr = OUStringToOString(suStr, RTL_TEXTENCODING_UTF8);
OString sError = errorToString(nError);
class searchFileURL : public CppUnit::TestFixture
{ private:
OUString aUStr;
public: void searchFileURL_001()
{ /* search file is passed by system filename */ auto nError1 = osl::FileBase::searchFileURL(aTmpName1, aUserDirectorySys, aUStr); /* search file is passed by full qualified file URL */ auto nError2 = osl::FileBase::searchFileURL(aCanURL1, aUserDirectorySys, aUStr); /* search file is passed by relative file path */ auto nError3 = osl::FileBase::searchFileURL(aRelURL4, aUserDirectorySys, aUStr);
CPPUNIT_ASSERT_EQUAL_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);
CPPUNIT_ASSERT_EQUAL_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, nError2);
CPPUNIT_ASSERT_EQUAL_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, nError3);
}
void searchFileURL_002()
{ #ifndef UNX /* search file is passed by system filename */
OUString strRootSys = INetURLObject(aTempDirectoryURL).GetLastName(); auto nError1 = osl::FileBase::searchFileURL(aTempDirectorySys, strRootSys, aUStr); bool bOk1 = compareFileName(aUStr, aTempDirectoryURL); /* search file is passed by full qualified file URL */ auto nError2 = osl::FileBase::searchFileURL(aTempDirectoryURL, strRootSys, aUStr); bool bOk2 = compareFileName(aUStr, aTempDirectoryURL); #ifndef _WIN32 /* search file is passed by relative file path */ auto nError3 = osl::FileBase::searchFileURL(aRelURL5, strRootSys, aUStr); bool bOk3 = compareFileName(aUStr, aTempDirectoryURL); #endif /* search file is passed by an exist file */
createTestFile(aCanURL1); auto nError4 = osl::FileBase::searchFileURL(aCanURL4, aUserDirectorySys, aUStr); bool bOk4 = compareFileName(aUStr, aCanURL1);
deleteTestFile(aCanURL1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename, system directory, searched file already exist.",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: URL filename, system directory, searched file already exist.",
osl::FileBase::E_None, nError2); #ifndef _WIN32
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: relative path, system directory, searched file already exist.",
osl::FileBase::E_None, nError3); #endif
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
osl::FileBase::E_None, nError4);
CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename, system directory, searched file already exist.",
bOk1);
CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: URL filename, system directory, searched file already exist.",
bOk2); #ifndef _WIN32
CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: relative path, system directory, searched file already exist.",
bOk3); #endif
CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
bOk4); #endif
}
void searchFileURL_003()
{
OUString aSystemPathList(aRootSys + PATH_LIST_DELIMITER + aTempDirectorySys + PATH_LIST_DELIMITER + aRootSys + "system/path"); auto nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aSystemPathList, aUStr); bool bOk = compareFileName(aUStr, aUserDirectoryURL);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
bOk);
}
void searchFileURL_004()
{
OUString aSystemPathList(aRootSys + PATH_LIST_DELIMITER + aTempDirectorySys + PATH_LIST_DELIMITER + aRootSys + "system/path/../name"); auto nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aSystemPathList, aUStr); bool bOk = compareFileName(aUStr, aUserDirectoryURL);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
bOk);
}
void searchFileURL_005()
{ auto nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aNullURL, aUStr); bool bOk = compareFileName(aUStr, aUserDirectoryURL);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is NULL",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is NULL",
bOk);
}
void getTempDirURL_002()
{
CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights",
checkDirectory(aUStr, oslCheckMode::OpenAccess));
CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights",
checkDirectory(aUStr, oslCheckMode::ReadAccess));
CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights",
checkDirectory(aUStr, oslCheckMode::WriteAccess));
}
void createTempFile_001()
{ auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), pUStr_FileURL.get());
File testFile(*pUStr_FileURL); auto nError2 = testFile.open(osl_File_OpenFlag_Create);
if (nError2 == osl::FileBase::E_EXIST)
{
osl_closeFile(*pHandle);
deleteTestFile(*pUStr_FileURL);
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: create temp file and test the existence",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for createTempFile function: create temp file and test the existence",
(pHandle != nullptr));
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: create temp file and test the existence",
osl::FileBase::E_EXIST, nError2);
}
void createTempFile_002()
{ bool bOK = false; auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), pUStr_FileURL.get());
File testFile(*pUStr_FileURL); auto nError2 = testFile.open(osl_File_OpenFlag_Create);
CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("createTempFile function: create a temp file, but it does not exist",
(pHandle != nullptr));
CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
osl::FileBase::E_EXIST, nError2);
// check file if have the write permission if (nError2 == osl::FileBase::E_EXIST)
{
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 writable.",
bOK);
}
void createTempFile_003()
{ auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), nullptr); // the temp file will be removed when return from createTempFile bool bOK = (pHandle != nullptr && nError1 == osl::FileBase::E_None); if (bOK)
osl_closeFile(*pHandle);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.",
bOK);
}
void createTempFile_004()
{ auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), nullptr, pUStr_FileURL.get()); bool bOK = (pUStr_FileURL != nullptr);
CPPUNIT_ASSERT(bOK);
File testFile(*pUStr_FileURL); auto nError2 = testFile.open(osl_File_OpenFlag_Create);
deleteTestFile(*pUStr_FileURL);
CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
osl::FileBase::E_EXIST, nError2);
CPPUNIT_ASSERT_MESSAGE("createTempFile function: create a temp file, but it does not exist",
bOK);
// create a link file and link it to file "/tmp/PID/tmpdir/tmpname"
fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
// testDirectory is "/tmp/PID/tmpdir/"
Directory testDirectory(aTmpName3);
testDirectory.open();
OUString aFileName ("link.file"); bool bOk = false; while (true)
{
osl::FileBase::RC nError1 = testDirectory.getNextItem(rItem_link, 4);
// testing the method // inline Type getFileType() const
class getFileType : public CppUnit::TestFixture
{ private:
DirectoryItem m_aItem_1, m_aItem_2, m_aVolumeItem, m_aFifoItem;
DirectoryItem m_aLinkItem, m_aSocketItem, m_aSpecialItem;
public: void setUp() override
{ // 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);
createTestFile(aTmpName3, aTmpName2);
createTestDirectory(aTmpName3, aTmpName1);
std::unique_ptr<Directory> xDir(new Directory(aTmpName3)); auto nError1 = xDir->open();
CPPUNIT_ASSERT_EQUAL_MESSAGE("open aTmpName3 failed!", osl::FileBase::E_None, nError1); // getNextItem can not assure which item retrieved
nError1 = xDir->getNextItem(m_aItem_1, 1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("get first item failed!", osl::FileBase::E_None, nError1);
nError1 = xDir->getNextItem(m_aItem_2);
CPPUNIT_ASSERT_EQUAL_MESSAGE("get second item failed!", osl::FileBase::E_None, nError1);
xDir->close(); // FIXME mindy: failed on my RH9, so removed temporarily // nError1 = DirectoryItem::get(aVolURL2, m_aVolumeItem); // CPPUNIT_ASSERT_MESSAGE("get volume item failed!", osl::FileBase::E_None == nError1);
}
void tearDown() override
{ // remove all in $TEMP/tmpdir.
deleteTestDirectory(aTmpName3, aTmpName1);
deleteTestFile(aTmpName3, aTmpName2);
deleteTestDirectory(aTmpName3);
}
void getFileType_007()
{ #ifdefined(__sun) // Special file is different in Windows auto nError1 = DirectoryItem::get(aTypeURL2, m_aSpecialItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
// check for File type
FileStatus rFileStatus(osl_FileStatus_Mask_Type);
nError1 = m_aSpecialItem.getFileStatus(rFileStatus);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
if (rFileStatus.isValid(osl_FileStatus_Mask_Type))
{
osl::FileStatus::Type eType = rFileStatus.getFileType();
CPPUNIT_ASSERT_MESSAGE("test for getFileType function: Special, Solaris version ",
(eType == FileStatus::Special));
} #endif
}
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 precision 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. ",
bOK);
}
CPPUNIT_ASSERT_MESSAGE("test for getModifyTime function: This test turns out that UNX precision is no more than 1 sec, don't know how to improve this function. ",
bOK);
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileSize function: file with size of TEST_FILE_SIZE, did not pass in (W32). ", static_cast<sal_uInt64>(TEST_FILE_SIZE), uFileSize);
}
void getLinkTargetURL_001()
{ #if0 #if (defined UNX) // Link file is not defined in Windows // create a link file;
OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys);
aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/link.file";
aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/tmpname";
// remove link file
fd = remove(strLinkFileName.getStr());
CPPUNIT_ASSERT_EQUAL_MESSAGE("in deleting link file", static_cast<sal_Int32>(0), fd);
CPPUNIT_ASSERT_MESSAGE("test for getLinkTargetURL function: Solaris version, create a file, and a link file link to it, get its LinkTargetURL and compare",
compareFileName(aFileURL, aTypeURL)); #endif #endif
}
// testing the method // File(const OUString& ustrFileURL)
class ctors : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
}
void ctors_001()
{
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_EQUAL_MESSAGE("test for ctors function: initialize a File and test its open and close",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a File and test its open and close",
osl::FileBase::E_None, nError2);
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: test relative file URL, this test show that relative file URL is also acceptable",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: test relative file URL, this test show that relative file URL is also acceptable",
osl::FileBase::E_None, nError2);
}
// testing the method // inline RC open(sal_uInt32 uFlags)
class open : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
}
void open_001()
{
File testFile(aTmpName4);
auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); auto nError2 = testFile.close();
CPPUNIT_ASSERT_EQUAL_MESSAGE("close error", osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a regular file",
osl::FileBase::E_None, nError1);
}
void open_002()
{
File testFile(aTmpName3);
auto 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()
{
File testFile(aCanURL1);
auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a non-exist file",
File::E_NOENT, nError1);
}
void open_005()
{
File testFile(aTmpName4);
auto nError1 = testFile.open(osl_File_OpenFlag_Create);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: create an exist file",
File::E_EXIST, nError1);
}
CPPUNIT_ASSERT_EQUAL_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);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
osl::FileBase::E_None, nError3);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
sal_uInt64(30), nCount_write);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
sal_uInt64(10), nCount_read);
}
class close : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
}
void close_001()
{
File testFile(aTmpName4);
auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
auto nError2 = testFile.close();
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for close function: close a regular file",
osl::FileBase::E_None, nError2);
}
void close_002()
{
File testFile(aTmpName4);
auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
auto nError2 = testFile.close();
auto nError3 = testFile.setPos(osl_Pos_Absolut, 0);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for close function: manipulate a file after it has been closed",
osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_MESSAGE("test for close function: manipulate a file after it has been closed",
(osl::FileBase::E_None != nError3));
}
class setPos : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
// write chars into the file.
File testFile(aTmpName4);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_Absolut, set the position to 26, test if the 26th char in file is correct",
pBuffer_Char[26], buffer_read[0]);
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_Current, set the position to end, test if the (end -1) char in file is correct",
pBuffer_Char[sizeof(pBuffer_Char) - 2], buffer_read[0]);
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_End, set the position to end, test if the first char in file is correct",
pBuffer_Char[0], buffer_read[0]);
}
// testing the method // inline RC getPos(sal_uInt64& uPos)
class getPos : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
// write chars into the file.
File testFile(aTmpName4);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getPos function: set the position to 26, get position and check if it is right", static_cast<sal_uInt64>(26), nFilePointer);
}
// testing the method // inline RC isEndOfFile(sal_Bool *pIsEOF)
class isEndOfFile : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
// write chars into the file.
File testFile(aTmpName4);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for isEndOfFile function: use isEndOfFile to move pointer step by step", static_cast<sal_uInt64>(sizeof(pBuffer_Char) + 1), nFilePointer);
}
CPPUNIT_TEST_SUITE(isEndOfFile);
CPPUNIT_TEST(isEndOfFile_001);
CPPUNIT_TEST(isEndOfFile_002);
CPPUNIT_TEST_SUITE_END();
};
// testing the method // inline RC setSize(sal_uInt64 uSize)
class setSize : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
// write chars into the file.
File testFile(aTmpName4);
class read : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
// write chars into the file.
File testFile(aTmpName4);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read whole content in the file to a buffer",
sal_uInt64(10), nFilePointer);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read whole content in the file to a buffer", 0, strncmp(buffer_read, pBuffer_Char, 10));
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file",
sal_uInt64(52), nFilePointer);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file",
sal_uInt64(26), nCount_read);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file", 0, strncmp(buffer_read, &pBuffer_Char[26], 26));
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size",
sal_uInt64(10), nFilePointer);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size", 0, strncmp(buffer_read, pBuffer_Char, 10));
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size",
sal_uInt64(10), nCount_write);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpname.
deleteTestFile(aTmpName6);
}
void readLine_001()
{
File testFile(aTmpName6);
auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
nError1 = testFile.readLine(aSequence);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read the first line of the file.",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read the first line of the file.", 0, strncmp(reinterpret_cast<char *>(aSequence.getArray()), pBuffer_Char, 5));
}
CPPUNIT_ASSERT_MESSAGE("test for readLine function: read three lines of the file and check the file pointer moving.",
*pEOF);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read three lines of the file and check the file pointer moving.", 0, strncmp(reinterpret_cast<char *>(aSequence.getArray()), &pBuffer_Char[26], 26));
}
CPPUNIT_TEST_SUITE(readLine);
CPPUNIT_TEST(readLine_001);
CPPUNIT_TEST(readLine_002);
CPPUNIT_TEST_SUITE_END();
};
class copy : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
// write chars into the file.
File testFile(aTmpName4);
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
}
void copy_001()
{
File testFile(aTmpName6);
// copy $TEMP/tmpdir/tmpname to $TEMP/tmpname. auto nError1 = File::copy(aTmpName4, aTmpName6);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // check
nError1 = testFile.open(osl_File_OpenFlag_Create);
deleteTestFile(aTmpName6);
CPPUNIT_ASSERT_EQUAL_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. auto nError1 = 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()
{ #if0 // copy $TEMP/tmpdir/tmpname to $ROOT/tmpname. auto nError1 = File::copy(aTmpName4, aTmpName7);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy to an illegal place",
osl::FileBase::E_ACCES, nError1); #endif
}
void copy_004()
{ // copy $TEMP/tmpname to $TEMP/tmpdir/tmpname. auto nError1 = File::copy(aTmpName6, aTmpName4);
CPPUNIT_ASSERT_EQUAL_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. auto nError1 = File::copy(aTmpName6, aSysPath1);
CPPUNIT_ASSERT_EQUAL_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);
tmpFile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read);
tmpFile.setSize(200);
tmpFile.close(); // copy to new path auto nError1 = File::copy(aTmpName6, aTmpName4);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
// check if is the new file
File newFile(aTmpName4);
newFile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read);
nError1 = newFile.setPos(osl_Pos_End, 0);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
sal_uInt64 nFilePointer;
nError1 = newFile.getPos(nFilePointer);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
newFile.close();
deleteTestFile(aTmpName6);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: the dest file exist", static_cast<sal_uInt64>(200), nFilePointer);
}
class move : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
// write chars into the file.
File testFile(aTmpName4);
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
}
void move_001()
{ // rename $TEMP/tmpdir/tmpname to $TEMP/canonical.name. auto nError1 = File::move(aTmpName4, aCanURL1);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // check
File testFile(aCanURL1); auto nError2 = testFile.open(osl_File_OpenFlag_Create);
deleteTestFile(aCanURL1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: rename file to another directory",
osl::FileBase::E_EXIST, nError2);
}
void move_002()
{ #ifdef _WIN32 // move $TEMP/tmpdir/tmpname to $TEMP/tmpdir. auto nError1 = 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)); #endif
}
void move_003()
{ #if0 // move $TEMP/tmpdir/tmpname to $ROOT/tmpname. auto nError1 = File::move(aTmpName4, aTmpName7);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move to an illegal place",
osl::FileBase::E_ACCES, nError1); #endif
}
void move_004()
{ // move $TEMP/tmpname to $TEMP/tmpdir/tmpname. auto nError1 = File::move(aTmpName6, aTmpName4);
CPPUNIT_ASSERT_EQUAL_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. auto nError1 = File::move(aTmpName6, aSysPath1);
CPPUNIT_ASSERT_EQUAL_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); auto nError1 = File::move(aTmpName6, aTmpName4); // move file $TEMP/tmpdir/tmpname to $TEMP/tmpname auto nError2 = File::move(aTmpName4, aTmpName6);
deleteTestDirectory(aTmpName6); #ifdefined(_WIN32)
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_EQUAL_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);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name, did not pass in (W32)",
osl::FileBase::E_ISDIR, nError2);
}
void move_007()
{ // create directory $TEMP/tmpname.
createTestDirectory(aTmpName6); // move directory $TEMP/tmpdir to $TEMP/tmpname/tmpdir auto nError1 = File::move(aTmpName3, aTmpName8); // check auto nError2 = Directory::create(aTmpName8);
File::move(aTmpName8, aTmpName3);
deleteTestDirectory(aTmpName6);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name",
osl::FileBase::E_EXIST, nError2);
}
// bugid# 115420, after the bug fix, add the case
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_SUITE_END();
};
class remove : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
// write chars into the file.
File testFile(aTmpName4);
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
}
void remove_001()
{ // remove $TEMP/tmpdir/tmpname. auto nError1 = File::remove(aTmpName4); // check
File testFile(aTmpName4); auto nError2 = testFile.open(osl_File_OpenFlag_Create);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a file",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for remove function: remove a file",
(osl::FileBase::E_EXIST != nError2));
}
void remove_002()
{ // remove $TEMP/tmpname. auto nError1 = File::remove(aTmpName6);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a file not exist",
osl::FileBase::E_NOENT, nError1);
}
void remove_003()
{ // remove $TEMP/system/path. auto nError1 = File::remove(aSysPath2);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: removing a file not using full qualified URL",
osl::FileBase::E_INVAL, nError1);
}
void remove_004()
{ // remove $TEMP/tmpdir. auto nError1 = File::remove(aTmpName3);
CPPUNIT_ASSERT_MESSAGE("test for remove function: remove a directory",
(osl::FileBase::E_ISDIR == nError1) || (osl::FileBase::E_ACCES == nError1));
}
class setAttributes : public CppUnit::TestFixture
{ private:
DirectoryItem rItem;
public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestFile(aTmpName6);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName6);
}
void setAttributes_001()
{ // on windows, only can set 2 attributes: osl_File_Attribute_ReadOnly, osl_File_Attribute_Hidden #ifdef UNX // set the file to readonly auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); auto nError1 = DirectoryItem::get(aTmpName6, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // get the file attributes
FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
nError1 = rItem.getFileStatus(rFileStatus);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
if (geteuid() == 0) // as root, access(W_OK) may be true despite mode
{
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setAttributes function: set file attributes and get it to verify.", static_cast<sal_uInt64>(osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead),
rFileStatus.getAttributes());
} else
{
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setAttributes function: set file attributes and get it to verify.", static_cast<sal_uInt64>(osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead),
rFileStatus.getAttributes());
} #else // please see GetFileAttributes auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); auto nError1 = DirectoryItem::get(aTmpName6, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // get the file attributes
FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
nError1 = rItem.getFileStatus(rFileStatus);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // 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 /*OString aString = OUStringToOString(aTmpName6, RTL_TEXTENCODING_ASCII_US); DWORDdwFileAttributes=GetFileAttributes(aString.getStr()); if(dwFileAttributes&FILE_ATTRIBUTE_NORMAL) printf("hasnormalattribute"); if(dwFileAttributes&FILE_ATTRIBUTE_READONLY) printf("hasreadonlyattribute");
*/
CPPUNIT_ASSERT_MESSAGE("test for setAttributes function: set file attributes READONLY and get it to verify.",
(osl_File_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 _WIN32 // set the file to hidden auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_Hidden);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); auto nError1 = DirectoryItem::get(aTmpName6, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // get the file attributes
FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
nError1 = rItem.getFileStatus(rFileStatus);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for setAttributes function: set file attributes and get it to verify.",
(osl_File_Attribute_Hidden & rFileStatus.getAttributes()) != 0); #endif
}
// get current time bool bOk = osl_getSystemTime(pTV_current);
CPPUNIT_ASSERT(bOk);
// set the file time auto nError2 = File::setTime(aTmpName6, *pTV_current, *pTV_current, *pTV_current);
CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError2).getStr(), osl::FileBase::E_None, nError2);
// get the file access time, creation time, modify time auto nError1 = DirectoryItem::get(aTmpName6, rItem);
CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
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.",
t_compareTime(pTV_access, pTV_current, delta)); #ifdefined(_WIN32) // Unfortunately there is no way to get the creation time of a file under Unix (it's 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. ",
t_compareTime(pTV_creation, pTV_current, delta)); #endif
CPPUNIT_ASSERT_MESSAGE("test for setTime function: set modify time then get it. ",
t_compareTime(pTV_modify, pTV_current, delta));
free(pTV_current);
free(pTV_creation);
free(pTV_access);
free(pTV_modify);
}
class sync : public CppUnit::TestFixture
{ private:
DirectoryItem rItem;
public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestFile(aTmpName6);
}
void tearDown() override
{ // 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()
{ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
// set the file to readonly auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
nError2 = tmp_file.sync();
CPPUNIT_ASSERT_EQUAL_MESSAGE("can not sync to readonly file!", osl::FileBase::E_None, nError2);
tmp_file.close();
} // test case:no enough space, how to create such case???see test_cpy_wrt_file.cxx::test_osl_writeFile
// get the DirectoryItem. auto nError1 = DirectoryItem::get(aTmpName6, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a new instance of DirectoryItem and get an item to check.",
osl::FileBase::E_None, nError1);
}
// testing the method // DirectoryItem(const DirectoryItem& rItem): _pData(rItem._pData)
class copy_assin_Ctors : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpname.
createTestFile(aTmpName6);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpname.
deleteTestFile(aTmpName6);
}
void copy_assin_Ctors_001()
{
DirectoryItem rItem; // constructor // get the DirectoryItem. auto nError1 = DirectoryItem::get(aTmpName6, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for copy_assin_Ctors function: use copy constructor to get an item and check filename.",
compareFileName(rFileStatus.getFileName(), aTmpName2));
}
void copy_assin_Ctors_002()
{
DirectoryItem rItem; // constructor // get the DirectoryItem. auto nError1 = DirectoryItem::get(aTmpName6, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for copy_assin_Ctors function: test assignment operator here since it is same as copy constructor in test way.",
compareFileName(rFileStatus.getFileName(), aTmpName2));
}
class get : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpname.
createTestFile(aTmpName6);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpname.
deleteTestFile(aTmpName6);
}
void get_001()
{
DirectoryItem rItem; auto nError2 = DirectoryItem::get(aTmpName6, rItem);
// check the file name
FileStatus rFileStatus(osl_FileStatus_Mask_FileName); auto nError1 = rItem.getFileStatus(rFileStatus);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use copy constructor to get an item and check filename.",
osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_MESSAGE("test for get function: use copy constructor to get an item and check filename.",
compareFileName(rFileStatus.getFileName(), aTmpName2));
}
void get_002()
{
DirectoryItem rItem; auto nError1 = DirectoryItem::get(aSysPath1, rItem);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use a system name instead of a URL.",
osl::FileBase::E_INVAL, nError1);
}
void get_003()
{
DirectoryItem rItem;
auto nError1 = DirectoryItem::get(aTmpName3, rItem);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use a non existed file URL.",
osl::FileBase::E_NOENT, nError1);
}
// testing the method // inline RC getFileStatus(FileStatus& rStatus)
class getFileStatus : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
}
void getFileStatus_001()
{
DirectoryItem rItem; // get the DirectoryItem. auto nError1 = DirectoryItem::get(aTmpName4, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
// check the file name
FileStatus rFileStatus(osl_FileStatus_Mask_FileName); auto nError2 = rItem.getFileStatus(rFileStatus);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: get file status and check filename",
osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_MESSAGE("test for getFileStatus function: get file status and check filename",
compareFileName(rFileStatus.getFileName(), aTmpName2));
}
void getFileStatus_002()
{
DirectoryItem rItem; // constructor // get the DirectoryItem. auto nError1 = DirectoryItem::get(aTmpName6, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_NOENT, nError1);
// check the file name
FileStatus rFileStatus(osl_FileStatus_Mask_FileName); auto nError2 = rItem.getFileStatus(rFileStatus);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: file not existed",
osl::FileBase::E_INVAL, nError2);
}
void getFileStatus_003()
{
DirectoryItem rItem; // constructor // get the DirectoryItem. auto nError1 = DirectoryItem::get(aTmpName3, rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
// check the file name
FileStatus rFileStatus(osl_FileStatus_Mask_FileName); auto nError2 = rItem.getFileStatus(rFileStatus);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: get directory information",
osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_MESSAGE("test for getFileStatus function: get directory information",
compareFileName(rFileStatus.getFileName(), aTmpName1));
}
class ctors : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3); // LLA: t_print("tearDown done.\n");
}
// open a directory auto nError1 = testDirectory.open();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // close a directory auto nError2 = testDirectory.close();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: create an instance and check open and close",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: create an instance and check open and close",
osl::FileBase::E_None, nError2);
}
// open a directory auto nError1 = testDirectory.open();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // close a directory auto nError2 = testDirectory.close();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: relative URL, :-), it is also worked",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: relative URL, :-), it is also worked",
osl::FileBase::E_None, nError2);
}
class open : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
}
// open a directory auto nError1 = testDirectory.open(); // check if directory is opened. bool bOk = testDirectory.isOpen(); // close a directory auto nError2 = testDirectory.close();
CPPUNIT_ASSERT_MESSAGE("test for open function: open a directory and check for open",
bOk);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a directory and check for open",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a directory and check for open",
osl::FileBase::E_None, nError2);
}
auto nError1 = testDirectory.open(); if (nError1 == osl::FileBase::E_None)
{ auto nError2 = testDirectory.close();
CPPUNIT_ASSERT_EQUAL(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 == nError1));
}
class isOpen : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempfile in $TEMP/tmpdir/tmpname.
createTestDirectory(aTmpName3);
createTestFile(aTmpName4);
}
void tearDown() override
{ // remove the tempfile in $TEMP/tmpdir/tmpname.
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
}
// open a directory auto nError1 = testDirectory.open();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // check if directory is opened. bool bOk = testDirectory.isOpen(); // close a directory auto nError2 = testDirectory.close();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_MESSAGE("test for isOpen function: open a directory and check for open",
bOk);
}
class close : public CppUnit::TestFixture
{ public: void setUp() override
{ // create a tempdirectory : $TEMP/tmpdir.
createTestDirectory(aTmpName3);
}
// open a directory auto nError1 = testDirectory.open();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // close a directory auto nError2 = testDirectory.close();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); // check if directory is opened. bool bOk = testDirectory.isOpen();
CPPUNIT_ASSERT_MESSAGE("test for isOpen function: close a directory and check for open",
!bOk);
}
// open a directory auto nError1 = testDirectory.open();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // get first Item
nError1 = testDirectory.getNextItem(rItem, 1);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // check the file name of first Item
FileStatus rFileStatusFirst(osl_FileStatus_Mask_FileName);
nError1 = rItem.getFileStatus(rFileStatusFirst);
// get second Item // mindy: nError1 = testDirectory.getNextItem(rItem, 0); // mindy: CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
// reset enumeration auto nError2 = testDirectory.reset();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); // get reset Item, if reset does not work, getNextItem() should return the second Item (aTmpName1)
nError1 = testDirectory.getNextItem(rItem);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
// check the file name again
FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
nError1 = rItem.getFileStatus(rFileStatus); // close a directory
nError1 = testDirectory.close();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
bool bOK1,bOK2,bOK3;
bOK1 = compareFileName(rFileStatus.getFileName(), aTmpName2);
bOK2 = compareFileName(rFileStatus.getFileName(), aHidURL1);
bOK3 = compareFileName(rFileStatus.getFileName(), rFileStatusFirst.getFileName());
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: get two directory item, reset it, then get again, check the filename",
osl::FileBase::E_None, nError2);
CPPUNIT_ASSERT_MESSAGE("test for reset function: get two directory item, reset it, then get again, check the filename",
(bOK1 || bOK2 || bOK3));
}
// close a directory auto 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));
}
// open a directory auto nError1 = testDirectory.open();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
// check the file name bool bOk1 = false; bool bOk2 = false; bool bOk3 = false;
FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
for (int nCount = 0; nCount < 3; nCount++)
{ // get three Items
nError1 = testDirectory.getNextItem(rItem, 2);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
nError1 = rItem.getFileStatus(rFileStatus);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
// a special order is not guaranteed. So any file may occur on any time. // But every file name should occur only once. if (!bOk1 && compareFileName(rFileStatus.getFileName(), aTmpName1))
{
bOk1 = true;
}
if (!bOk2 && compareFileName(rFileStatus.getFileName(), aTmpName2))
{
bOk2 = true;
}
// close a directory
nError1 = testDirectory.close();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.",
bOk1);
CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.",
bOk2);
CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.",
bOk3);
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getNextItem function: retrieve an item in a directory which is not opened, also test for nHint's default value.",
osl::FileBase::E_INVAL, nError1);
}
// close a directory
nError1 = testDirectory.close();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getNextItem function: retrieve 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 bool bLnkOK = false; bool bFoundOK = false;
// create a link file and link it to file "/tmp/PID/tmpdir/tmpname"
sal_Int32 fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
Directory testDirectory(aTmpName3);
// open a directory auto nError1 = testDirectory.open();
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
OUString aFileName (u"link.file"_ustr);
while (true) {
nError1 = testDirectory.getNextItem(rItem, 4); if (nError1 == osl::FileBase::E_None) {
FileStatus rFileStatus(osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_Type);
rItem.getFileStatus(rFileStatus); if (compareFileName(rFileStatus.getFileName(), aFileName))
{
bFoundOK = true; if (rFileStatus.getFileType() == FileStatus::Link)
{
bLnkOK = true; break;
}
}
} else break;
}
fd = std::remove(strLinkFileName.getStr());
CPPUNIT_ASSERT_EQUAL_MESSAGE("remove link file failed", static_cast<sal_Int32>(0), fd);
CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: check if can retrieve the link file name",
bFoundOK);
CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: check if link file has file type link",
bLnkOK); #endif
}
class getVolumeInfo : public CppUnit::TestFixture
{ public: void checkValidMask(osl::VolumeInfo const& _aVolumeInfo, sal_Int32 _nMask)
{ if (_nMask == osl_VolumeInfo_Mask_FileSystemName)
{ // get file system name
OUString aFileSysName = _aVolumeInfo.getFileSystemName();
bool bRes2 = compareFileName(aFileSysName, aNullURL);
CPPUNIT_ASSERT_MESSAGE("test for getVolumeInfo function: getVolumeInfo of root directory.",
!bRes2);
}
OString sAttr; if (b1) sAttr = "Remote"_ostr; if (b2) sAttr += " Removeable"; if (b3) sAttr += " CDROM"; if (b4) sAttr += " Floppy"; if (b5) sAttr += " FixedDisk"; if (b6) sAttr += " RAMDisk";
printf("Attributes: %s\n", sAttr.getStr());
} if (_nMask == osl_VolumeInfo_Mask_TotalSpace)
{ // within Linux, df / * 1024 bytes is the result
sal_uInt64 nSize = _aVolumeInfo.getTotalSpace();
printf("Total space: %" SAL_PRIuUINT64 "\n", nSize);
} if (_nMask == osl_VolumeInfo_Mask_UsedSpace)
{
sal_uInt64 nSize = _aVolumeInfo.getUsedSpace();
printf(" Used space: %" SAL_PRIuUINT64 "\n", nSize);
} if (_nMask == osl_VolumeInfo_Mask_FreeSpace)
{
sal_uInt64 nSize = _aVolumeInfo.getFreeSpace();
printf(" Free space: %" SAL_PRIuUINT64 "\n", nSize);
} if (_nMask == osl_VolumeInfo_Mask_MaxNameLength)
{
sal_uInt32 nLength = _aVolumeInfo.getMaxNameLength();
printf("max name length: %" SAL_PRIuUINT32 "\n", nLength);
} if (_nMask == osl_VolumeInfo_Mask_MaxPathLength)
{
sal_uInt32 nLength = _aVolumeInfo.getMaxPathLength();
printf("max path length: %" SAL_PRIuUINT32 "\n", nLength);
} if (_nMask == osl_VolumeInfo_Mask_FileSystemCaseHandling)
{ bool bIsCase = _aVolumeInfo.isCaseSensitiveFileSystem();
printf("filesystem case sensitive: %s\n", bIsCase ? "yes" : "no");
}
}
void checkVolumeInfo(sal_Int32 _nMask)
{
VolumeInfo aVolumeInfo(_nMask); // call getVolumeInfo here auto nError1 = Directory::getVolumeInfo(aVolURL1, aVolumeInfo);
CPPUNIT_ASSERT_EQUAL_MESSAGE( "test for getVolumeInfo function: getVolumeInfo of root directory.",
osl::FileBase::E_None, nError1); // 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);
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getVolumeInfo function: use system path as parameter.",
osl::FileBase::E_INVAL, nError1);
}
void getVolumeInfo_003()
{ // LLA: in Windows, it reply no error, it did not pass in (W32). #ifdefined(UNX) && !defined(IOS)
sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName;
VolumeInfo aVolumeInfo(mask); // call getVolumeInfo here auto nError1 = Directory::getVolumeInfo(aTmpName3, aVolumeInfo);
class create : public CppUnit::TestFixture
{ public: void create_001()
{ // create directory in $TEMP/tmpdir auto nError1 = Directory::create(aTmpName3); // check for existence auto nError2 = Directory::create(aTmpName3); // remove it
deleteTestDirectory(aTmpName3);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory and check its existence.",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory and check its existence.",
osl::FileBase::E_EXIST, nError2);
}
void create_002()
{ #if !defined(_WIN32) && !defined(MACOSX) && defined(SAL_UNX) if (geteuid() == 0) // don't test if building as root return;
nError1 = Directory::create(aTmpDir);
OString sError = "test for create function: create a directory '" +
OUStringToOString(aTmpDir, RTL_TEXTENCODING_ASCII_US) + "' and check its existence.";
CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError1);
osl_setFileAttributes(aTmpDir.pData, 0); // no access allowed now
// Shouldn't be possible now to create a dir underneath it
OUString aTmpSubLevel = aTmpDir + "/notallowedhere";
nError1 = Directory::create(aTmpSubLevel);
// allow removal
osl_setFileAttributes(aTmpDir.pData,
osl_File_Attribute_OwnRead |
osl_File_Attribute_OwnWrite |
osl_File_Attribute_OwnExe);
deleteTestDirectory(aTmpDir);
sError = "test for create function: create a directory under '" +
OUStringToOString(aTmpDir, RTL_TEXTENCODING_ASCII_US) + "' for access test.";
CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_ACCES, nError1); #endif
}
void create_003()
{ // create directory in /tmpname auto nError1 = Directory::create(aSysPath1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory using system path.",
osl::FileBase::E_INVAL, nError1);
}
class remove : public CppUnit::TestFixture
{ public: void remove_001()
{ // create directory in $TEMP/tmpdir auto nError1 = Directory::create(aTmpName3);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // remove it
nError1 = Directory::remove(aTmpName3); // check for existence
Directory rDirectory(aTmpName3); auto nError2 = rDirectory.open();
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory and check its existence.",
osl::FileBase::E_None, nError1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory and check its existence.",
osl::FileBase::E_NOENT, nError2);
}
void remove_002()
{ // create directory in $TEMP/tmpdir auto nError1 = Directory::create(aTmpName3);
CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); // try to remove it by system path
nError1 = Directory::remove(aSysPath3); // check for existence
Directory rDirectory(aTmpName3); auto nError2 = rDirectory.open();
if (nError2 != osl::FileBase::E_NOENT)
Directory::remove(aTmpName3);
CPPUNIT_ASSERT_EQUAL_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 auto nError1 = Directory::remove(aTmpName6);
CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: try to remove a non-existed directory.",
osl::FileBase::E_NOENT, nError1);
}
void remove_004()
{
createTestFile(aTmpName6); bool bExist = ifFileExist(aTmpName6); // try to remove file. auto nError1 = Directory::remove(aTmpName6);
deleteTestFile(aTmpName6);
CPPUNIT_ASSERT_MESSAGE("test for remove function: try to remove a file but not directory.",
bExist);
CPPUNIT_ASSERT_MESSAGE("test for remove function: try to remove a file but not directory.",
(osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_NOENT == nError1));
}
void remove_005()
{
createTestDirectory(aTmpName3);
createTestFile(aTmpName4); auto nError1 = Directory::remove(aTmpName3);
deleteTestFile(aTmpName4);
deleteTestDirectory(aTmpName3);
OString sError = "test for remove function: try to remove a directory that is not empty." +
errorToStr(nError1); #ifdefined(__sun) // 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 "..".
printf("#Solaris test\n");
CPPUNIT_ASSERT_MESSAGE(sError.getStr(), (osl::FileBase::E_EXIST == nError1)); #else
CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_NOTEMPTY, nError1); #endif
}
#if !defined(_WIN32) && !defined(ANDROID) // FIXME would be nice to create unique dir even on Windows
tmp_x += "XXXXXX"; char *out = mkdtemp(const_cast<char*>(tmp_x.getStr()));
CPPUNIT_ASSERT_MESSAGE
( "mkdtemp call failed",
out != nullptr
);
CPPUNIT_ASSERT_EQUAL_MESSAGE
( "Cannot convert the system path back to a URL",
osl::FileBase::E_None, rc
); return tmpTestPath;
}(); return test_path;
}
#if0 #ifdefined UNX /** get Current PID.
*/
OUString getCurrentPID()
{ //~ Get current PID and turn it into OUString; int nPID = 0; #ifdef _WIN32
nPID = GetCurrentProcessId(); #else
nPID = getpid(); #endif return OUString::number(nPID);
} #endif #endif
namespace {
//~ do some clean up work after all test completed. class GlobalObject
{ public:
~GlobalObject()
{ try
{ //~ special clean up task in Windows and Unix separately; #if (defined UNX) //~ 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))
deleteTestFile(aTmpName6); if (ifFileExist(aTmpName4))
deleteTestFile(aTmpName4); if (checkDirectory(aTmpName4, oslCheckMode::Exist))
deleteTestDirectory(aTmpName4); if (ifFileExist(aTmpName3))
deleteTestFile(aTmpName3); if (checkDirectory(aTmpName3, oslCheckMode::Exist))
deleteTestDirectory(aTmpName3);
OUString aUStr(aUserDirectoryURL);
concatURL(aUStr, aHidURL1); if (ifFileExist(aUStr))
deleteTestFile(aUStr);
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.300Bemerkung:
(vorverarbeitet am 2026-10-01)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.