| /* 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 |