diff options
author | Loïc Blot <nerzhul@users.noreply.github.com> | 2018-03-16 08:41:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-16 08:41:33 +0100 |
commit | 6c184947c3886ce80aa9eb9807a700025a344442 (patch) | |
tree | a9c9cebb4b9ff2206f93ff02c00c4a801e6fa760 /src/unittest/test_servermodmanager.cpp | |
parent | 5e61f64ce259fe0b23cbb377b44e90a0fbc820d7 (diff) | |
download | minetest-6c184947c3886ce80aa9eb9807a700025a344442.tar.gz minetest-6c184947c3886ce80aa9eb9807a700025a344442.tar.bz2 minetest-6c184947c3886ce80aa9eb9807a700025a344442.zip |
Server: delegate mod management & config to ServerModConfiguration (#7131)
* Server: delegate mod management & config to ServerModConfiguration (rename it to ServerModManager)
* Use c++11 range based loops
* Add unittests + experimental/default mod as a test case to permit testing mod loading in future tests
Diffstat (limited to 'src/unittest/test_servermodmanager.cpp')
-rw-r--r-- | src/unittest/test_servermodmanager.cpp | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp new file mode 100644 index 000000000..cb43babf9 --- /dev/null +++ b/src/unittest/test_servermodmanager.cpp @@ -0,0 +1,165 @@ +/* +Minetest +Copyright (C) 2018 nerzhul, Loic Blot <loic.blot@unix-experience.fr> + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "test.h" +#include <algorithm> +#include "server/mods.h" +#include "test_config.h" + +class TestServerModManager : public TestBase +{ +public: + TestServerModManager() { TestManager::registerTestModule(this); } + const char *getName() { return "TestServerModManager"; } + + void runTests(IGameDef *gamedef); + + void testCreation(); + void testIsConsistent(); + void testUnsatisfiedMods(); + void testGetMods(); + void testGetModsWrongDir(); + void testGetModspec(); + void testGetModNamesWrongDir(); + void testGetModNames(); + void testGetModMediaPathsWrongDir(); + void testGetModMediaPaths(); +}; + +static TestServerModManager g_test_instance; + +void TestServerModManager::runTests(IGameDef *gamedef) +{ + const char *saved_env_mt_subgame_path = getenv("MINETEST_SUBGAME_PATH"); +#ifdef WIN32 + { + std::string subgame_path("MINETEST_SUBGAME_PATH="); + subgame_path.append(TEST_SUBGAME_PATH); + _putenv(subgame_path.c_str()); + } +#else + setenv("MINETEST_SUBGAME_PATH", TEST_SUBGAME_PATH, 1); +#endif + + TEST(testCreation); + TEST(testIsConsistent); + TEST(testGetModsWrongDir); + TEST(testUnsatisfiedMods); + TEST(testGetMods); + TEST(testGetModspec); + TEST(testGetModNamesWrongDir); + TEST(testGetModNames); + TEST(testGetModMediaPathsWrongDir); + TEST(testGetModMediaPaths); + +#ifdef WIN32 + { + std::string subgame_path("MINETEST_SUBGAME_PATH="); + subgame_path.append(saved_env_mt_subgame_path); + _putenv(subgame_path.c_str()); + } +#else + setenv("MINETEST_SUBGAME_PATH", saved_env_mt_subgame_path, 1); +#endif +} + +void TestServerModManager::testCreation() +{ + ServerModManager sm(TEST_WORLDDIR); +} + +void TestServerModManager::testGetModsWrongDir() +{ + // Test in non worlddir to ensure no mods are found + ServerModManager sm(std::string(TEST_WORLDDIR) + DIR_DELIM + ".."); + UASSERTEQ(bool, sm.getMods().empty(), true); +} + +void TestServerModManager::testUnsatisfiedMods() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + UASSERTEQ(bool, sm.getUnsatisfiedMods().empty(), true); +} + +void TestServerModManager::testIsConsistent() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + UASSERTEQ(bool, sm.isConsistent(), true); +} + +void TestServerModManager::testGetMods() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + const auto &mods = sm.getMods(); + UASSERTEQ(bool, mods.empty(), false); + + // Ensure we found default mod inside the test folder + bool default_found = false; + for (const auto &m : mods) { + if (m.name == "default") + default_found = true; + + // Verify if paths are not empty + UASSERTEQ(bool, m.path.empty(), false); + } + + UASSERTEQ(bool, default_found, true); +} + +void TestServerModManager::testGetModspec() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + UASSERTEQ(const ModSpec *, sm.getModSpec("wrongmod"), NULL); + UASSERT(sm.getModSpec("default") != NULL); +} + +void TestServerModManager::testGetModNamesWrongDir() +{ + ServerModManager sm(std::string(TEST_WORLDDIR) + DIR_DELIM + ".."); + std::vector<std::string> result; + sm.getModNames(result); + UASSERTEQ(bool, result.empty(), true); +} + +void TestServerModManager::testGetModNames() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + std::vector<std::string> result; + sm.getModNames(result); + UASSERTEQ(bool, result.empty(), false); + UASSERT(std::find(result.begin(), result.end(), "default") != result.end()); +} + +void TestServerModManager::testGetModMediaPathsWrongDir() +{ + ServerModManager sm(std::string(TEST_WORLDDIR) + DIR_DELIM + ".."); + std::vector<std::string> result; + sm.getModsMediaPaths(result); + UASSERTEQ(bool, result.empty(), true); +} + +void TestServerModManager::testGetModMediaPaths() +{ + ServerModManager sm(std::string(TEST_WORLDDIR)); + std::vector<std::string> result; + sm.getModsMediaPaths(result); + UASSERTEQ(bool, result.empty(), false); + // We should have 5 folders for each mod (textures, media, locale, model, sounds) + UASSERTEQ(unsigned long, result.size() % 5, 0); +} |