blob: 7d439c0efae4dc1bb74ff1b8fee52cbdcb353b3b [file]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/arc/mojom/ime.mojom.h"
#include <linux/input.h>
#include "mojo/public/cpp/test_support/test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/dom/dom_code.h"
namespace mojo {
namespace {
void ExpectKeyEventsEqual(const ui::KeyEvent& expected,
const ui::KeyEvent& actual) {
EXPECT_EQ(expected.type(), actual.type());
EXPECT_EQ(expected.key_code(), actual.key_code());
EXPECT_EQ(expected.code(), actual.code());
EXPECT_EQ(expected.IsShiftDown(), actual.IsShiftDown());
EXPECT_EQ(expected.IsAltDown(), actual.IsAltDown());
EXPECT_EQ(expected.IsControlDown(), actual.IsControlDown());
EXPECT_EQ(expected.IsCapsLockOn(), actual.IsCapsLockOn());
}
} // namespace
TEST(KeyEventStructTraitsTest, Convert) {
const ui::KeyEvent kTestData[] = {
{ui::ET_KEY_PRESSED, ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN},
{ui::ET_KEY_PRESSED, ui::VKEY_B, ui::DomCode::US_B, ui::EF_ALT_DOWN},
{ui::ET_KEY_RELEASED, ui::VKEY_B, ui::DomCode::US_B, ui::EF_SHIFT_DOWN},
{ui::ET_KEY_PRESSED, ui::VKEY_A, ui::DomCode::US_A, ui::EF_CAPS_LOCK_ON},
};
for (size_t idx = 0; idx < base::size(kTestData); ++idx) {
auto copy = std::make_unique<ui::KeyEvent>(kTestData[idx]);
std::unique_ptr<ui::KeyEvent> output;
mojo::test::SerializeAndDeserialize<arc::mojom::KeyEventData>(copy, output);
ExpectKeyEventsEqual(*copy, *output);
}
}
TEST(KeyEventStructTraitsTest, UseScancodeIfAvailable) {
auto original = std::make_unique<ui::KeyEvent>(
ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE);
original->set_scan_code(KEY_A);
std::unique_ptr<ui::KeyEvent> output;
mojo::test::SerializeAndDeserialize<arc::mojom::KeyEventData>(original,
output);
EXPECT_EQ(original->type(), output->type());
EXPECT_EQ(ui::DomCode::US_A, output->code());
EXPECT_EQ(ui::VKEY_A, output->key_code());
}
} // namespace mojo