blob: a4140f094104f3111bae2da1452e817213f80b3d [file] [log] [blame]
/* Copyright (C) 2014-2015 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-buffer.h"
#include "android/skin/linux_keycodes.h"
#include <gtest/gtest.h>
#include <vector>
#define ARRAYLEN(x) (sizeof(x)/sizeof(x[0]))
namespace android_skin {
namespace {
// Global variables used to implement the flush callback during testing.
const int kMaxCodes = 256;
int sCodes[kMaxCodes];
int sCodesCount = 0;
void myFlushFunc(int* codes, int count) {
if (count > kMaxCodes) {
count = kMaxCodes;
}
for (int n = 0; n < count; ++n) {
sCodes[n] = codes[n];
}
sCodesCount = count;
}
} // namespace
TEST(keycode_buffer,skin_keycode_buffer_flush) {
static const struct {
int expected;
unsigned code;
bool down;
} kData[] = {
{ KEY_F1|0x400, KEY_F1, true },
{ KEY_F1, KEY_F1, false },
{ KEY_COMPOSE, KEY_COMPOSE, false },
{ KEY_COMPOSE|0x400, KEY_COMPOSE, true },
};
const size_t kDataLen = ARRAYLEN(kData);
SkinKeycodeBuffer buffer;
skin_keycode_buffer_init(&buffer, &myFlushFunc);
for (size_t nn = 0U; nn < kDataLen; ++nn) {
skin_keycode_buffer_add(&buffer, kData[nn].code, kData[nn].down);
}
skin_keycode_buffer_flush(&buffer);
EXPECT_EQ(kDataLen, static_cast<size_t>(sCodesCount));
for (size_t nn = 0U; nn < kDataLen; ++nn) {
EXPECT_EQ(kData[nn].expected, sCodes[nn]) << "#" << nn;
}
}
} // namespace android_skin