/*********************************************************************
* Software License Agreement (AGPL-3 License)
*
* OpenViBE SDK Test Software
* Based on OpenViBE V1.1.0, Copyright (C) Inria, 2006-2015
* Copyright (C) Inria, 2015-2017,V1.0
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program.
* If not, see .
*/
#include
#include
#include "ovtAssert.h"
#include
int uoFilesTest(int /*argc*/, char* argv[])
{
std::string outputDirectory = argv[1];
OVT_ASSERT(FS::Files::directoryExists(outputDirectory.c_str()), "Failure to find test data directory");
std::string testDir = outputDirectory + "uoFilesTest";
std::string testFile = testDir + "/uoFilesTest.txt";
// test path creation
FS::Files::createParentPath(testFile.c_str());
OVT_ASSERT(FS::Files::directoryExists(testDir.c_str()), "Failure to create directory");
OVT_ASSERT(!FS::Files::fileExists(testFile.c_str()), "Failure to create parent path only");
// test path retrieval methods
char parentPathFromFile[1024];
FS::Files::getParentPath(testFile.c_str(), parentPathFromFile);
OVT_ASSERT_STREQ(std::string(parentPathFromFile), testDir, "Failure to retrieve parent path from full path");
char parentPathFromDir[1024];
FS::Files::getParentPath(testDir.c_str(), parentPathFromDir);
std::cout << parentPathFromDir << " " << outputDirectory << std::endl;
OVT_ASSERT_STREQ((std::string(parentPathFromDir) + "/"), outputDirectory, "Failure to retrieve parent path from path with no slash");
testDir += "/"; // adding a slash should now give testDir as parent
FS::Files::getParentPath(testDir.c_str(), parentPathFromDir);
OVT_ASSERT_STREQ((std::string(parentPathFromDir) + "/"), testDir, "Failure to retrieve parent path from path with slash");
char filename[256];
FS::Files::getFilename(testFile.c_str(), filename);
OVT_ASSERT_STREQ(std::string(filename), std::string("uoFilesTest.txt"), "Failure to retrieve filename from full path");
FS::Files::getFilenameWithoutExtension(testFile.c_str(), filename);
OVT_ASSERT_STREQ(std::string(filename), std::string("uoFilesTest"), "Failure to retrieve filename with no extension from full path");
// test file creation and opening
std::ofstream ostream;
FS::Files::openOFStream(ostream, testFile.c_str());
OVT_ASSERT(FS::Files::fileExists(testFile.c_str()), "Failure to create file");
OVT_ASSERT(ostream.is_open(), "Failure to open file");
ostream.close();
std::string testFileInMissingnDir = testDir + "/newDir/uoFilesTest.txt";
FS::Files::openOFStream(ostream, testFileInMissingnDir.c_str());
OVT_ASSERT(!FS::Files::fileExists(testFileInMissingnDir.c_str()), "Failure to check for non-existing file");
std::ifstream istream;
FS::Files::openIFStream(istream, testFile.c_str());
OVT_ASSERT(istream.is_open(), "Failure to open file in an input stream");
istream.close();
std::fstream fstream;
FS::Files::openFStream(fstream, testFile.c_str(), std::ios_base::out);
OVT_ASSERT(fstream.is_open(), "Failure to open file in a generic stream");
fstream.close();
auto file = FS::Files::open(testFile.c_str(), "r");
OVT_ASSERT(file != nullptr, "Failure to open file in a FILE object");
file = FS::Files::open(testFileInMissingnDir.c_str(), "r");
OVT_ASSERT(file == nullptr, "Failure to return NULL FILE object for non-existing file");
testDir = outputDirectory + "uoFilesTest2/long spaced/path";
FS::Files::createPath(testDir.c_str());
OVT_ASSERT(FS::Files::directoryExists(testDir.c_str()), "Failure to create directory with path containing spaces");
// test equality
OVT_ASSERT(!FS::Files::equals(testFile.c_str(), testFileInMissingnDir.c_str()), "Failure to compare different files");
OVT_ASSERT(FS::Files::equals(testFile.c_str(), testFile.c_str()), "Failure to compare same files");
// test folder copy
std::string testFile2 = outputDirectory + "uoFilesTest" + "/uoFilesTestChild/uoFilesTest.txt";
std::string testTargetDir = outputDirectory + "uoFilesTestCopy";
std::string testTargetFile1 = testTargetDir + "/uoFilesTest.txt";
std::string testTargetFile2 = testTargetDir + "/uoFilesTestChild/uoFilesTest.txt";
// create a subfolder with file
FS::Files::createParentPath(testFile2.c_str());
std::ofstream ostream2;
FS::Files::openOFStream(ostream2, testFile2.c_str());
OVT_ASSERT(FS::Files::fileExists(testFile2.c_str()), "Failure to create file in subfolder");
OVT_ASSERT(ostream2.is_open(), "Failure to open file");
ostream2.close();
// copy folder
testDir = outputDirectory + "uoFilesTest";
FS::Files::copyDirectory(testDir.c_str(), testTargetDir.c_str());
OVT_ASSERT(FS::Files::directoryExists(testTargetDir.c_str()), "Failure in copying folder");
OVT_ASSERT(FS::Files::fileExists(testTargetFile1.c_str()), "Failure in copying child files of the folder");
OVT_ASSERT(FS::Files::fileExists(testTargetFile2.c_str()), "Failure in copying subfolder");
// test folder copy on existing folder
OVT_ASSERT(!FS::Files::copyDirectory(testDir.c_str(), testTargetDir.c_str()), "Failure: Copy should not have been done if folder exits");
return EXIT_SUCCESS;
}