mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 10:03:45 +01:00
Add keycode.cpp unittests
This commit is contained in:
parent
c3e1ab859e
commit
cc0b3c1cd1
@ -6,6 +6,7 @@ set (UNITTEST_SRCS
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_connection.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_connection.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_filepath.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_filepath.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_inventory.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_inventory.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/test_keycode.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_map_settings_manager.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_map_settings_manager.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_mapnode.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_mapnode.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_nodedef.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_nodedef.cpp
|
||||||
|
129
src/unittest/test_keycode.cpp
Normal file
129
src/unittest/test_keycode.cpp
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
/*
|
||||||
|
Minetest
|
||||||
|
Copyright (C) 2016 sfan5 <sfan5@live.de>
|
||||||
|
|
||||||
|
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 <string>
|
||||||
|
#include "exceptions.h"
|
||||||
|
#include "keycode.h"
|
||||||
|
|
||||||
|
class TestKeycode : public TestBase {
|
||||||
|
public:
|
||||||
|
TestKeycode() { TestManager::registerTestModule(this); }
|
||||||
|
const char *getName() { return "TestKeycode"; }
|
||||||
|
|
||||||
|
void runTests(IGameDef *gamedef);
|
||||||
|
|
||||||
|
void testCreateFromString();
|
||||||
|
void testCreateFromSKeyInput();
|
||||||
|
void testCompare();
|
||||||
|
};
|
||||||
|
|
||||||
|
static TestKeycode g_test_instance;
|
||||||
|
|
||||||
|
void TestKeycode::runTests(IGameDef *gamedef)
|
||||||
|
{
|
||||||
|
TEST(testCreateFromString);
|
||||||
|
TEST(testCreateFromSKeyInput);
|
||||||
|
TEST(testCompare);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define UASSERTEQ_STR(one, two) UASSERT(strcmp(one, two) == 0)
|
||||||
|
|
||||||
|
void TestKeycode::testCreateFromString()
|
||||||
|
{
|
||||||
|
KeyPress k;
|
||||||
|
|
||||||
|
// Character key, from char
|
||||||
|
k = KeyPress("R");
|
||||||
|
UASSERTEQ_STR(k.sym(), "KEY_KEY_R");
|
||||||
|
UASSERTCMP(int, >, strlen(k.name()), 0); // should have human description
|
||||||
|
|
||||||
|
// Character key, from identifier
|
||||||
|
k = KeyPress("KEY_KEY_B");
|
||||||
|
UASSERTEQ_STR(k.sym(), "KEY_KEY_B");
|
||||||
|
UASSERTCMP(int, >, strlen(k.name()), 0);
|
||||||
|
|
||||||
|
// Non-Character key, from identifier
|
||||||
|
k = KeyPress("KEY_UP");
|
||||||
|
UASSERTEQ_STR(k.sym(), "KEY_UP");
|
||||||
|
UASSERTCMP(int, >, strlen(k.name()), 0);
|
||||||
|
|
||||||
|
k = KeyPress("KEY_F6");
|
||||||
|
UASSERTEQ_STR(k.sym(), "KEY_F6");
|
||||||
|
UASSERTCMP(int, >, strlen(k.name()), 0);
|
||||||
|
|
||||||
|
// Irrlicht-unknown key, from char
|
||||||
|
k = KeyPress("/");
|
||||||
|
UASSERTEQ_STR(k.sym(), "/");
|
||||||
|
UASSERTCMP(int, >, strlen(k.name()), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestKeycode::testCreateFromSKeyInput()
|
||||||
|
{
|
||||||
|
KeyPress k;
|
||||||
|
irr::SEvent::SKeyInput in;
|
||||||
|
|
||||||
|
// Character key
|
||||||
|
in.Key = irr::KEY_KEY_3;
|
||||||
|
in.Char = L'3';
|
||||||
|
k = KeyPress(in);
|
||||||
|
UASSERTEQ_STR(k.sym(), "KEY_KEY_3");
|
||||||
|
|
||||||
|
// Non-Character key
|
||||||
|
in.Key = irr::KEY_RSHIFT;
|
||||||
|
in.Char = L'\0';
|
||||||
|
k = KeyPress(in);
|
||||||
|
UASSERTEQ_STR(k.sym(), "KEY_RSHIFT");
|
||||||
|
|
||||||
|
// Irrlicht-unknown key
|
||||||
|
in.Key = irr::KEY_KEY_CODES_COUNT;
|
||||||
|
in.Char = L'?';
|
||||||
|
k = KeyPress(in);
|
||||||
|
UASSERTEQ_STR(k.sym(), "?");
|
||||||
|
|
||||||
|
// prefer_character mode
|
||||||
|
in.Key = irr::KEY_COMMA;
|
||||||
|
in.Char = L'G';
|
||||||
|
k = KeyPress(in, true);
|
||||||
|
UASSERTEQ_STR(k.sym(), "KEY_KEY_G");
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestKeycode::testCompare()
|
||||||
|
{
|
||||||
|
// Basic comparison
|
||||||
|
UASSERT(KeyPress("5") == KeyPress("KEY_KEY_5"));
|
||||||
|
UASSERT(!(KeyPress("5") == KeyPress("KEY_NUMPAD_5")));
|
||||||
|
|
||||||
|
// Matching char suffices
|
||||||
|
// note: This is a real-world example, Irrlicht maps XK_equal to irr::KEY_PLUS on Linux
|
||||||
|
irr::SEvent::SKeyInput in;
|
||||||
|
in.Key = irr::KEY_PLUS;
|
||||||
|
in.Char = L'=';
|
||||||
|
UASSERT(KeyPress("=") == KeyPress(in));
|
||||||
|
|
||||||
|
// Matching keycode suffices
|
||||||
|
irr::SEvent::SKeyInput in2;
|
||||||
|
in.Key = in2.Key = irr::KEY_OEM_CLEAR;
|
||||||
|
in.Char = L'\0';
|
||||||
|
in2.Char = L';';
|
||||||
|
UASSERT(KeyPress(in) == KeyPress(in2));
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user