summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am1
-rw-r--r--src/integrity_unittest.cc154
2 files changed, 155 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 6771e2782..e9121652e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1741,6 +1741,7 @@ manaplustests_SOURCES = ${manaplus_SOURCES} \
gui/widgets/browserbox_unittest.cc \
resources/dye/dye_unittest.cc \
resources/dye/dyepalette_unittest.cc \
+ integrity_unittest.cc \
gui/windowmanager_unittest.cc
endif
diff --git a/src/integrity_unittest.cc b/src/integrity_unittest.cc
new file mode 100644
index 000000000..0fbc14efb
--- /dev/null
+++ b/src/integrity_unittest.cc
@@ -0,0 +1,154 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2013-2016 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 "resources/sprite/animatedsprite.h"
+
+#include "catch.hpp"
+#include "client.h"
+#include "logger.h"
+
+#include "input/inputactionmap.h"
+#include "input/inputmanager.h"
+
+#include "resources/resourcemanager.h"
+#include "resources/sdlimagehelper.h"
+
+#include "resources/animation/animation.h"
+
+#include "utils/env.h"
+#include "utils/physfstools.h"
+
+#include "debug.h"
+
+namespace
+{
+ class InputActionSortFunctorTest final
+ {
+ public:
+ bool operator() (const InputActionT key1,
+ const InputActionT key2) const
+ {
+ REQUIRE(CAST_SIZE(key1) < CAST_SIZE(InputAction::TOTAL));
+ REQUIRE(CAST_SIZE(key2) < CAST_SIZE(InputAction::TOTAL));
+ REQUIRE(key1 < InputAction::TOTAL);
+ REQUIRE(key2 < InputAction::TOTAL);
+ return keys[CAST_SIZE(key1)].priority
+ >= keys[CAST_SIZE(key2)].priority;
+ }
+
+ const InputActionData *keys A_NONNULLPOINTER;
+ };
+ InputActionSortFunctorTest inputActionDataSorterTest;
+} // namespace
+
+TEST_CASE("integrity tests", "integrity")
+{
+ setEnv("SDL_VIDEODRIVER", "dummy");
+
+ client = new Client;
+ PHYSFS_init("manaplus");
+ dirSeparator = "/";
+ XML::initXML();
+ SDL_Init(SDL_INIT_VIDEO);
+ logger = new Logger();
+ ResourceManager::init();
+ resourceManager->addToSearchPath("data", Append_false);
+ resourceManager->addToSearchPath("../data", Append_false);
+
+ imageHelper = new SDLImageHelper();
+ SDL_SetVideoMode(640, 480, 0, SDL_ANYFORMAT | SDL_SWSURFACE);
+
+ SECTION("integrity test 1")
+ {
+ REQUIRE(sizeof(inputActionData) / sizeof(InputActionData) ==
+ CAST_SIZE(InputAction::TOTAL));
+ }
+
+ SECTION("integrity test 2")
+ {
+ KeyToActionMap actionMap;
+ const size_t sz = CAST_SIZE(InputAction::TOTAL);
+ for (size_t i = 0; i < sz; i ++)
+ {
+ InputActionT val = static_cast<InputActionT>(i);
+ REQUIRE(val < InputAction::TOTAL);
+ REQUIRE(val > InputAction::NO_VALUE);
+ REQUIRE(val > InputAction::UNDEFINED_VALUE);
+ REQUIRE(CAST_SIZE(val) < CAST_SIZE(InputAction::TOTAL));
+ REQUIRE(CAST_SIZE(val) < CAST_SIZE(InputAction::NO_VALUE));
+ REQUIRE(CAST_SIZE(val) < CAST_SIZE(InputAction::UNDEFINED_VALUE));
+ REQUIRE(CAST_S32(val) < CAST_S32(InputAction::TOTAL));
+ REQUIRE(CAST_S32(val) > CAST_S32(InputAction::NO_VALUE));
+ REQUIRE(CAST_S32(val) > CAST_S32(InputAction::UNDEFINED_VALUE));
+ }
+ }
+
+ SECTION("integrity test 3")
+ {
+ KeyToActionMap actionMap;
+ int cnt = 0;
+ const size_t sz = CAST_SIZE(InputAction::TOTAL);
+ for (size_t i = 0; i < sz; i ++)
+ {
+ actionMap[cnt++].push_back(static_cast<InputActionT>(i));
+ if (cnt > 3)
+ cnt = 0;
+ }
+ FOR_EACH (KeyToActionMapIter, it, actionMap)
+ {
+ KeysVector *const keys = &it->second;
+ FOR_EACHP (KeysVectorIter, itk, keys)
+ {
+ const size_t val = CAST_SIZE(*itk);
+ REQUIRE(val < sz);
+ }
+ }
+ }
+
+ SECTION("integrity test 4")
+ {
+ KeyToActionMap actionMap;
+ KeyTimeMap keyTimeMap;
+ actionMap.clear();
+ keyTimeMap.clear();
+
+ for (size_t i = 0; i < CAST_SIZE(InputAction::TOTAL); i ++)
+ {
+ actionMap[10].push_back(
+ static_cast<InputActionT>(i));
+ }
+
+ KeysVector *const keys = &actionMap[0];
+ inputActionDataSorterTest.keys = &inputActionData[0];
+ std::sort(keys->begin(), keys->end(), inputActionDataSorterTest);
+ }
+
+ SECTION("integrity test 5")
+ {
+ KeyToActionMap mKeyToAction;
+ KeyToIdMap mKeyToId;
+ KeyTimeMap mKeyTimeMap;
+ inputManager.updateKeyActionMap(mKeyToAction, mKeyToId,
+ mKeyTimeMap, InputType::KEYBOARD);
+ }
+
+ delete client;
+ client = nullptr;
+}