/* * The ManaPlus Client * Copyright (C) 2013-2017 The ManaPlus Developers * * This file is part of The ManaPlus Client. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "utils/files.h" #include "catch.hpp" #include "logger.h" #include "utils/physfstools.h" #include "resources/resourcemanager/resourcemanager.h" #include "debug.h" TEST_CASE("Files renameFile") { dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); resourceManager->addToSearchPath("data", Append_false); resourceManager->addToSearchPath("../data", Append_false); const int sz = 1234567; char *buf = new char[sz]; for (int f = 0; f < sz; f ++) buf[f] = f; const std::string name1 = "file1.test"; const std::string name2 = "file2.test"; FILE *file = fopen(name1.c_str(), "w+b"); fwrite(buf, 1, sz, file); fclose(file); REQUIRE(0 == Files::renameFile(name1, name2)); char *buf2 = new char[sz]; FILE *file2 = fopen(name2.c_str(), "rb"); REQUIRE_FALSE(nullptr == file2); fread(buf2, 1, sz, file2); fclose(file2); ::remove(name1.c_str()); ::remove(name2.c_str()); for (int f = 0; f < sz; f ++) REQUIRE(buf[f] == buf2[f]); delete [] buf; delete [] buf2; ResourceManager::deleteInstance(); // PhysFs::deinit(); } TEST_CASE("Files existsLocal") { dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); resourceManager->addToSearchPath("data", Append_false); resourceManager->addToSearchPath("../data", Append_false); REQUIRE(Files::existsLocal(Files::getPath("help/about.txt")) == true); REQUIRE_FALSE(Files::existsLocal(Files::getPath("help/about1.txt"))); REQUIRE_FALSE(Files::existsLocal(Files::getPath("help1/about.txt"))); ResourceManager::deleteInstance(); // PhysFs::deinit(); } TEST_CASE("Files loadTextFileString") { dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); resourceManager->addToSearchPath("data", Append_false); resourceManager->addToSearchPath("../data", Append_false); REQUIRE(Files::loadTextFileString("test/simplefile.txt") == "this is test \nfile."); ResourceManager::deleteInstance(); // PhysFs::deinit(); } TEST_CASE("Files loadTextFile") { dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); resourceManager->addToSearchPath("data", Append_false); resourceManager->addToSearchPath("../data", Append_false); StringVect lines; Files::loadTextFile("test/simplefile.txt", lines); REQUIRE(lines.size() == 2); REQUIRE(lines[0] == "this is test "); REQUIRE(lines[1] == "file."); ResourceManager::deleteInstance(); // PhysFs::deinit(); } TEST_CASE("Files saveTextFile") { dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); resourceManager->addToSearchPath("data", Append_false); resourceManager->addToSearchPath("../data", Append_false); const std::string dir = Files::getPath("test"); REQUIRE(dir.size() > 0); Files::saveTextFile(dir, "tempfile.txt", "test line\ntext line2"); std::string data = Files::loadTextFileString("test/tempfile.txt"); ::remove((dir + "/tempfile.txt").c_str()); REQUIRE(data == "test line\ntext line2\n"); ResourceManager::deleteInstance(); // PhysFs::deinit(); } TEST_CASE("Files getFilesInDir") { dirSeparator = "/"; logger = new Logger(); ResourceManager::init(); resourceManager->addToSearchPath("data", Append_false); resourceManager->addToSearchPath("../data", Append_false); StringVect list; Files::getFilesInDir("test", list, ".gpl"); REQUIRE(list.size() == 1); REQUIRE(list[0] == "test/palette.gpl"); list.clear(); Files::getFilesInDir("perserver/default", list, ".xml"); REQUIRE(list.size() == 5); REQUIRE(list[0] == "perserver/default/charcreation.xml"); REQUIRE(list[1] == "perserver/default/deadmessages.xml"); REQUIRE(list[2] == "perserver/default/defaultcommands.xml"); REQUIRE(list[3] == "perserver/default/features.xml"); REQUIRE(list[4] == "perserver/default/weapons.xml"); ResourceManager::deleteInstance(); // PhysFs::deinit(); }