aboutsummaryrefslogtreecommitdiff
path: root/src/tool.cpp
Commit message (Expand)AuthorAge
* Properly and efficiently use split utility headersPerttu Ahola2012-06-17
* Switch the license to be LGPLv2/later, with small parts still remaining as GP...Perttu Ahola2012-06-05
* Rework tool_capabilities a bit (maxwear->uses, scale dig time according to le...Perttu Ahola2012-03-29
* Digging and placing soundsPerttu Ahola2012-03-24
* dig_immediate=2 -> 0.5 seconds digging timePerttu Ahola2012-03-10
* dig_immediate=3 instead of 1 means 0 secondsPerttu Ahola2012-03-10
* Damage groups WIPPerttu Ahola2012-03-10
* Small fix in getHitParamsPerttu Ahola2012-03-10
* itemgroup.h and ItemGroupList typedefPerttu Ahola2012-03-10
* Tune group digging time stuff a bitPerttu Ahola2012-03-10
* Digging time groups WIPPerttu Ahola2012-03-10
* GameDef compilesPerttu Ahola2011-11-29
* Create framework for getting rid of global definitions of node/tool/item/what...Perttu Ahola2011-11-29
* Move tool stuff to tool.{h,cpp}Perttu Ahola2011-11-29
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
/*
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=");
		if (saved_env_mt_subgame_path)
			subgame_path.append(saved_env_mt_subgame_path);
		_putenv(subgame_path.c_str());
	}
#else
	if (saved_env_mt_subgame_path)
		setenv("MINETEST_SUBGAME_PATH", saved_env_mt_subgame_path, 1);
	else
		unsetenv("MINETEST_SUBGAME_PATH");
#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);
}