blob: 2a43c871519296af316fe1fd0e04ec5b61ba4ba8 [file] [log] [blame]
/* Copyright (C) 2014 The Android Open Source Project
**
** This software is licensed under the terms of the GNU General Public
** License version 2, as published by the Free Software Foundation, and
** may be copied, distributed, and modified under those terms.
**
** 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.
*/
#include "android/skin/keycode.h"
#include <gtest/gtest.h>
namespace android_skin {
#define ARRAYLEN(x) (sizeof(x)/sizeof(x[0]))
namespace {
// Shared table of key pair samples for testing string mapping functions.
const struct {
const char* string;
uint32_t code;
uint32_t mod;
} kKeyPairData[] = {
{ "F1", KEY_F1, 0 },
{ "Ctrl-F2", KEY_F2, kKeyModLCtrl },
{ "RCtrl-A", KEY_A, kKeyModRCtrl },
{ "Alt-Return", KEY_ENTER, kKeyModLAlt },
{ "RAlt-Comma", KEY_COMMA, kKeyModRAlt },
{ "Shift-3", KEY_3, kKeyModLShift },
{ "RShift-Keypad_5", KEY_KP5, kKeyModRShift },
{ "Ctrl-Shift-Alt-Delete", KEY_DELETE,
kKeyModLCtrl|kKeyModLShift|kKeyModLAlt },
};
const size_t kKeyPairDataLen = ARRAYLEN(kKeyPairData);
} // namespace
TEST(keycode,skin_keycode_rotate) {
static const struct {
SkinKeyCode expected;
SkinKeyCode code;
int rotation;
} kData[] = {
{ kKeyCodeDpadUp, kKeyCodeDpadUp, 0 },
{ kKeyCodeDpadRight, kKeyCodeDpadUp, 1 },
{ kKeyCodeDpadDown, kKeyCodeDpadUp, 2 },
{ kKeyCodeDpadLeft, kKeyCodeDpadUp, 3 },
{ kKeyCodeDpadLeft, kKeyCodeDpadLeft, 0 },
{ kKeyCodeDpadUp, kKeyCodeDpadLeft, 1 },
{ kKeyCodeDpadRight, kKeyCodeDpadLeft, 2 },
{ kKeyCodeDpadDown, kKeyCodeDpadLeft, 3 },
{ kKeyCodeDpadDown, kKeyCodeDpadDown, 0 },
{ kKeyCodeDpadLeft, kKeyCodeDpadDown, 1 },
{ kKeyCodeDpadUp, kKeyCodeDpadDown, 2 },
{ kKeyCodeDpadRight, kKeyCodeDpadDown, 3 },
{ kKeyCodeDpadRight, kKeyCodeDpadRight, 0 },
{ kKeyCodeDpadDown, kKeyCodeDpadRight, 1 },
{ kKeyCodeDpadLeft, kKeyCodeDpadRight, 2 },
{ kKeyCodeDpadUp, kKeyCodeDpadRight, 3 },
{ kKeyCodeA, kKeyCodeA, 0 },
{ kKeyCodeA, kKeyCodeA, 1 },
{ kKeyCodeA, kKeyCodeA, 2 },
{ kKeyCodeA, kKeyCodeA, 3 },
};
const size_t kDataLen = ARRAYLEN(kData);
for (size_t nn = 0; nn < kDataLen; ++nn) {
SkinKeyCode code = kData[nn].code;
int rotation = kData[nn].rotation;
EXPECT_EQ(kData[nn].expected, skin_keycode_rotate(code, rotation))
<< "code=" << code << " rotation=" << rotation;
}
}
TEST(keycode, skin_key_pair_to_string) {
for (size_t nn = 0; nn < kKeyPairDataLen; ++nn) {
uint32_t code = kKeyPairData[nn].code;
uint32_t mod = kKeyPairData[nn].mod;
EXPECT_STREQ(kKeyPairData[nn].string,
skin_key_pair_to_string(code, mod))
<< "code=" << code << " mod=" << mod;
}
}
TEST(keycode, skin_key_pair_from_string) {
for (size_t nn = 0; nn < kKeyPairDataLen; ++nn) {
uint32_t code = 0;
uint32_t mod = 0;
EXPECT_TRUE(skin_key_pair_from_string(
kKeyPairData[nn].string,
&code,
&mod)) << "#" << nn;
EXPECT_EQ(kKeyPairData[nn].code, code);
EXPECT_EQ(kKeyPairData[nn].mod, mod);
}
}
} // namespace android_skin