blob: 05f5ea9d494bdbda4b90530e662fbeb13fbe5902 [file] [log] [blame]
// Copyright (c) 2019 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 "ui/events/x/x11_event_translation.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/events/event.h"
#include "ui/events/event_constants.h"
#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/test/events_test_utils.h"
#include "ui/events/test/events_test_utils_x11.h"
#include "ui/events/test/keyboard_layout.h"
namespace ui {
// Ensure DomKey extraction happens lazily in Ozone X11, while in non-Ozone
// path it is set right away in XEvent => ui::Event translation. This prevents
// regressions such as crbug.com/1007389.
TEST(XEventTranslationTest, KeyEventDomKeyExtraction) {
ui::ScopedKeyboardLayout keyboard_layout(ui::KEYBOARD_LAYOUT_ENGLISH_US);
ScopedXI2Event xev;
xev.InitKeyEvent(ET_KEY_PRESSED, VKEY_RETURN, EF_NONE);
auto keyev = ui::BuildKeyEventFromXEvent(*xev);
EXPECT_TRUE(keyev);
KeyEventTestApi test(keyev.get());
#if defined(USE_OZONE)
EXPECT_EQ(ui::DomKey::NONE, test.dom_key());
#else
EXPECT_EQ(ui::DomKey::ENTER, test.dom_key());
#endif
EXPECT_EQ(13, keyev->GetCharacter());
EXPECT_EQ("Enter", keyev->GetCodeString());
}
} // namespace ui