/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
/** 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 is start with "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);
/** Test for getSystemPathFromFileURL() this test is split 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 third parameter is the assumed result string, the string will only test, if its length is greater than 0
*/
void SystemPath_FileURL::getSystemPathFromFileURL_001_21()
{ /* From RFC3986, "2.2. Reserved Characters":
"The purpose of reserved characters is to provide a set of delimiting characters that are distinguishable from other data within a URI. URIs that differ in the replacement of a reserved character with its corresponding percent-encoded octet are not equivalent. Percent- encoding a reserved character, or decoding a percent-encoded octet that corresponds to a reserved character, will change how the URI is interpreted by most applications. Thus, characters in the reserved set are protected from normalization and are therefore safe to be used by scheme-specific and producer-specific algorithms for delimiting data subcomponents within a URI."
In other words, %2F ("/") is NOT the same as /.
*/
OString sURL("%2F"_ostr);
checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""_ostr);
checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""_ostr);
}
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);
Link is not defined in Windows, and on Linux, we can not get the directory item of the linked file. We have to defer to filesystems, normal filesystems support links (EXT2, ...), castrated filesystems don't have links (FAT, FAT32) and Windows NT NTFS support links, but the Windows API doesn't :-(
*/ void isValid_003()
{ #if 0 #ifdefined (UNX)
sal_Int32 fd;
// 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()
{ #if 0 #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()
{ #if 0 // 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()
{ #if 0 // 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); DWORD dwFileAttributes = GetFileAttributes(aString.getStr()); if (dwFileAttributes & FILE_ATTRIBUTE_NORMAL) printf("has normal attribute"); if (dwFileAttributes & FILE_ATTRIBUTE_READONLY) printf("has readonly attribute");
*/
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;
}
#if 0 #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.139Bemerkung:
(vorverarbeitet am 2026-05-07)
¤
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.