chromium/ui/events/keycodes/keyboard_code_conversion_fuchsia_unittest.cc

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/events/keycodes/keyboard_code_conversion_fuchsia.h"

#include <fidl/fuchsia.ui.input3/cpp/fidl.h>
#include <cstdint>

#include "base/logging.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/dom/keycode_converter.h"

namespace {

using fuchsia_input::Key;
using fuchsia_ui_input3::KeyMeaning;
using fuchsia_ui_input3::NonPrintableKey;

#define EXPECT_CODEPOINT_MAPS(codepoint)                                     \
  EXPECT_EQ(                                                                 \
      ui::DomKey::FromCharacter(codepoint),                                  \
      ui::DomKeyFromFuchsiaKeyMeaning(KeyMeaning::WithCodepoint(codepoint))) \
      << " for codepoint " << codepoint;

// For |size| Unicode values beginning with code |start|, check that they are
// converted to the correct DomKey.
void CheckConversionsInRange(int start, int size) {
  for (int i = 0; i < size; i++)
    EXPECT_CODEPOINT_MAPS(start + i);
}

// Check that the for the below ranges, Fuchsia Keys are correctly converted to
// DomKeys.
TEST(FuchsiaKeyboardCodeConversion, FuchsiaKeyToDomKeyConversionRanges) {
  // Check digits 1 through 0.
  CheckConversionsInRange(0x0030, 10);

  // Check capital letters.
  CheckConversionsInRange(0x0041, 26);

  // Check lower case letters.
  CheckConversionsInRange(0x0061, 26);
}

TEST(FuchsiaKeyboardCodeConversion, FuchsiaKeyToDomKeySpecificValues) {
  // Yen sign.
  EXPECT_EQ(ui::DomKey::FromCharacter(0x00a5),
            ui::DomKeyFromFuchsiaKeyMeaning(KeyMeaning::WithCodepoint(165)));

  // Right brace.
  EXPECT_EQ(ui::DomKey::FromCharacter(0x007d),
            ui::DomKeyFromFuchsiaKeyMeaning(KeyMeaning::WithCodepoint(125)));

  // Lower case c with circumflex.
  EXPECT_EQ(ui::DomKey::FromCharacter(0x0109),
            ui::DomKeyFromFuchsiaKeyMeaning(KeyMeaning::WithCodepoint(265)));

  // Check that NonPrintableKeys are converted correctly.
  EXPECT_EQ(ui::DomKey::ENTER,
            ui::DomKeyFromFuchsiaKeyMeaning(
                KeyMeaning::WithNonPrintableKey(NonPrintableKey::kEnter)));
}

}  // namespace