mirror of
https://github.com/EasyRPG/Player.git
synced 2026-10-25 15:57:14 +00:00
143 lines
4.4 KiB
C++
143 lines
4.4 KiB
C++
#include <cassert>
|
|
#include <cstdlib>
|
|
#include "filefinder.h"
|
|
#include "player.h"
|
|
#include "main_data.h"
|
|
#include "doctest.h"
|
|
|
|
TEST_SUITE_BEGIN("FileFinder");
|
|
|
|
TEST_CASE("IsRPG2kProject") {
|
|
Main_Data::Init();
|
|
|
|
Player::escape_symbol = "\\";
|
|
|
|
auto fs = FileFinder::Root().Subtree(EP_TEST_PATH "/game");
|
|
CHECK(FileFinder::IsRPG2kProject(fs));
|
|
|
|
Player::escape_symbol = "";
|
|
}
|
|
|
|
TEST_CASE("IsNotRPG2kProject") {
|
|
Main_Data::Init();
|
|
|
|
auto fs = FileFinder::Root().Subtree(EP_TEST_PATH "/notagame");
|
|
CHECK(!FileFinder::IsRPG2kProject(fs));
|
|
}
|
|
|
|
TEST_CASE("MakeCanonical") {
|
|
auto make_canonical = [](const char* s, int deep) {
|
|
auto canon = FileFinder::MakeCanonical(s, deep);
|
|
#ifdef _WIN32
|
|
std::replace(canon.begin(), canon.end(), '\\', '/');
|
|
#endif
|
|
return canon;
|
|
};
|
|
|
|
CHECK(make_canonical("/folder/file", 1) == "/folder/file");
|
|
CHECK(make_canonical("/folder/file/", 1) == "/folder/file");
|
|
CHECK(make_canonical("folder/file", 1) == "folder/file");
|
|
CHECK(make_canonical("folder/file/", 1) == "folder/file");
|
|
CHECK(make_canonical("file", 1) == "file");
|
|
CHECK(make_canonical("/path/../path2", 1) == "/path2");
|
|
CHECK(make_canonical("folder/././//file", 0) == "folder/file");
|
|
CHECK(make_canonical("folder/././//file", 0) == "folder/file");
|
|
CHECK(make_canonical("folder/../file", 1) == "file");
|
|
CHECK(make_canonical("../folder/folder2/../file", 1) == "folder/file");
|
|
CHECK(make_canonical("folder/../../file", 1) == "file");
|
|
CHECK(make_canonical("/", 0) == "/");
|
|
CHECK(make_canonical("X:/", 0) == "X:/");
|
|
CHECK(make_canonical("X:/folder/../folder2/", 1) == "X:/folder2");
|
|
CHECK(make_canonical("drive:/", 0) == "drive:/");
|
|
CHECK(make_canonical("drive:/folder/../folder2/", 1) == "drive:/folder2");
|
|
|
|
Player::escape_symbol = "\\";
|
|
CHECK(make_canonical("..\\folder\\folder2\\..\\file", 1) == "folder/file");
|
|
CHECK(make_canonical("folder\\..\\..\\file", 1) == "file");
|
|
Player::escape_symbol = "";
|
|
}
|
|
|
|
TEST_CASE("GetPathAndFilename") {
|
|
// This function converts all paths to "/" to simplify the DirectoryTree
|
|
// No non-canonical paths tested, the path is expected to be canonical
|
|
|
|
std::string path, file;
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("folder/file");
|
|
CHECK(path == "folder");
|
|
CHECK(file == "file");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("/file");
|
|
CHECK(path == "/");
|
|
CHECK(file == "file");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("file");
|
|
CHECK(path == "");
|
|
CHECK(file == "file");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("folder/folder2/file");
|
|
CHECK(path == "folder/folder2");
|
|
CHECK(file == "file");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("drive:/file");
|
|
CHECK(path == "drive:/");
|
|
CHECK(file == "file");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("drive:/folder/file");
|
|
CHECK(path == "drive:/folder");
|
|
CHECK(file == "file");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("X:/file");
|
|
CHECK(path == "X:/");
|
|
CHECK(file == "file");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("X:/folder/file");
|
|
CHECK(path == "X:/folder");
|
|
CHECK(file == "file");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("/");
|
|
CHECK(path == "/");
|
|
CHECK(file == "");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("X:/");
|
|
CHECK(path == "X:/");
|
|
CHECK(file == "");
|
|
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("");
|
|
CHECK(path == "");
|
|
CHECK(file == "");
|
|
|
|
Player::escape_symbol = "\\";
|
|
std::tie(path, file) = FileFinder::GetPathAndFilename("folder\\folder2\\file");
|
|
CHECK(path == "folder/folder2");
|
|
CHECK(file == "file");
|
|
Player::escape_symbol = "";
|
|
}
|
|
|
|
TEST_CASE("SplitPathPrefixes") {
|
|
auto components = FileFinder::SplitPathPrefixes("folder/file");
|
|
CHECK(components[0] == "folder");
|
|
CHECK(components[1] == "folder/file");
|
|
|
|
components = FileFinder::SplitPathPrefixes("/folder/file");
|
|
CHECK(components[0] == "/folder");
|
|
CHECK(components[1] == "/folder/file");
|
|
|
|
components = FileFinder::SplitPathPrefixes("/folder/file/a/");
|
|
CHECK(components[0] == "/folder");
|
|
CHECK(components[1] == "/folder/file");
|
|
CHECK(components[2] == "/folder/file/a/");
|
|
|
|
components = FileFinder::SplitPathPrefixes("c:/a/b");
|
|
CHECK(components[0] == "c:");
|
|
CHECK(components[1] == "c:/a");
|
|
CHECK(components[2] == "c:/a/b");
|
|
|
|
components = FileFinder::SplitPathPrefixes("saf://content:%2F%2Fgames/File.zip");
|
|
CHECK(components[0] == "saf://");
|
|
CHECK(components[1] == "saf://content:%2F%2Fgames");
|
|
CHECK(components[2] == "saf://content:%2F%2Fgames/File.zip");
|
|
}
|
|
|
|
TEST_SUITE_END();
|