| e8555c89 Andy McCall |
1 |
#include "catch.hpp" |
| 2 |
#include "SDLKey.hh" |
| 3 |
|
| 4 |
using namespace openmsx; |
| 5 |
|
| 6 |
static bool equal(const SDLKey& x, const SDLKey& y) |
| 7 |
{ |
| 8 |
if (x.sym.sym != y.sym.sym) return false; |
| 9 |
if (x.sym.scancode != y.sym.scancode) return false; |
| 10 |
if (x.sym.mod != y.sym.mod) return false; |
| 11 |
if (x.sym.unused != y.sym.unused) return false; |
| 12 |
if (x.down != y.down) return false; |
| 13 |
return true; |
| 14 |
} |
| 15 |
|
| 16 |
static void test(const std::string& name1, SDLKey code1, bool canonical) |
| 17 |
{ |
| 18 |
std::string name2 = code1.toString(); |
| 19 |
if (canonical) { |
| 20 |
CHECK(name2 == name1); |
| 21 |
} |
| 22 |
|
| 23 |
std::optional<SDLKey> code2 = SDLKey::fromString(name1); |
| 24 |
CHECK(code2); |
| 25 |
CHECK(equal(*code2, code1)); |
| 26 |
|
| 27 |
std::string name3 = code2->toString(); |
| 28 |
CHECK(name3 == name2); |
| 29 |
|
| 30 |
std::optional<SDLKey> code3 = SDLKey::fromString(name2); |
| 31 |
CHECK(code3); |
| 32 |
CHECK(equal(*code3, *code2)); |
| 33 |
} |
| 34 |
|
| 35 |
TEST_CASE("Keys") |
| 36 |
{ |
| 37 |
test("P", SDLKey::createDown(SDLK_p, SDL_SCANCODE_UNKNOWN), true); |
| 38 |
test("p", SDLKey::createDown(SDLK_p, SDL_SCANCODE_UNKNOWN), false); |
| 39 |
test("1", SDLKey::createDown(SDLK_1, SDL_SCANCODE_UNKNOWN), true); |
| 40 |
test("z", SDLKey::createDown(SDLK_z, SDL_SCANCODE_UNKNOWN), false); |
| 41 |
test("AT", SDLKey::createDown(SDLK_AT, SDL_SCANCODE_UNKNOWN), false); |
| 42 |
test("@", SDLKey::createDown(SDLK_AT, SDL_SCANCODE_UNKNOWN), true); |
| 43 |
test("Hash", SDLKey::createDown(SDLK_HASH, SDL_SCANCODE_UNKNOWN), false); |
| 44 |
test("slash", SDLKey::createDown(SDLK_SLASH, SDL_SCANCODE_UNKNOWN), false); |
| 45 |
test("EXCLAIM", SDLKey::createDown(SDLK_EXCLAIM, SDL_SCANCODE_UNKNOWN), false); |
| 46 |
test("!", SDLKey::createDown(SDLK_EXCLAIM, SDL_SCANCODE_UNKNOWN), true); |
| 47 |
test("PeRiOd", SDLKey::createDown(SDLK_PERIOD, SDL_SCANCODE_UNKNOWN), false); |
| 48 |
test("CARET", SDLKey::createDown(SDLK_CARET, SDL_SCANCODE_UNKNOWN), false); |
| 49 |
test("delete", SDLKey::createDown(SDLK_DELETE, SDL_SCANCODE_UNKNOWN), false); |
| 50 |
test("Keypad 7", SDLKey::createDown(SDLK_KP_7, SDL_SCANCODE_UNKNOWN), true); |
| 51 |
test("KP7", SDLKey::createDown(SDLK_KP_7, SDL_SCANCODE_UNKNOWN), false); |
| 52 |
test("KP_ENTER", SDLKey::createDown(SDLK_KP_ENTER, SDL_SCANCODE_UNKNOWN), false); |
| 53 |
test("up", SDLKey::createDown(SDLK_UP, SDL_SCANCODE_UNKNOWN), false); |
| 54 |
test("End", SDLKey::createDown(SDLK_END, SDL_SCANCODE_UNKNOWN), false); |
| 55 |
test("pageup", SDLKey::createDown(SDLK_PAGEUP, SDL_SCANCODE_UNKNOWN), false); |
| 56 |
test("PageDown", SDLKey::createDown(SDLK_PAGEDOWN, SDL_SCANCODE_UNKNOWN), true); |
| 57 |
test("PAGEDOWN", SDLKey::createDown(SDLK_PAGEDOWN, SDL_SCANCODE_UNKNOWN), false); |
| 58 |
test("F8", SDLKey::createDown(SDLK_F8, SDL_SCANCODE_UNKNOWN), true); |
| 59 |
test("RCTRL", SDLKey::createDown(SDLK_RCTRL, SDL_SCANCODE_UNKNOWN), false); |
| 60 |
test("Right Ctrl", SDLKey::createDown(SDLK_RCTRL, SDL_SCANCODE_UNKNOWN), true); |
| 61 |
|
| 62 |
test("P+SHIFT", SDLKey::create(SDLK_p, SDL_SCANCODE_UNKNOWN, true, KMOD_SHIFT), true); |
| 63 |
test("q,shift", SDLKey::create(SDLK_q, SDL_SCANCODE_UNKNOWN, true, KMOD_SHIFT), false); |
| 64 |
test("R/shift", SDLKey::create(SDLK_r, SDL_SCANCODE_UNKNOWN, true, KMOD_SHIFT), false); |
| 65 |
test("ctrl+c", SDLKey::create(SDLK_c, SDL_SCANCODE_UNKNOWN, true, KMOD_CTRL ), false); |
| 66 |
test("ALT/E", SDLKey::create(SDLK_e, SDL_SCANCODE_UNKNOWN, true, KMOD_ALT ), false); |
| 67 |
test("E+ALT", SDLKey::create(SDLK_e, SDL_SCANCODE_UNKNOWN, true, KMOD_ALT ), true); |
| 68 |
test("5,release", SDLKey::create(SDLK_5, SDL_SCANCODE_UNKNOWN, false ), false); |
| 69 |
} |