OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/events/keycodes/dom4/keycode_converter.h" | 5 #include "ui/events/keycodes/dom4/keycode_converter.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "ui/events/keycodes/dom4/domcode.h" |
11 | 12 |
12 using ui::KeycodeConverter; | 13 using ui::KeycodeConverter; |
13 | 14 |
14 namespace { | 15 namespace { |
15 | 16 |
16 #if defined(OS_WIN) | 17 #if defined(OS_WIN) |
17 const size_t kExpectedMappedKeyCount = 138; | 18 const size_t kExpectedMappedKeyCount = 138; |
18 #elif defined(OS_LINUX) | 19 #elif defined(OS_LINUX) |
19 const size_t kExpectedMappedKeyCount = 145; | 20 const size_t kExpectedMappedKeyCount = 145; |
20 #elif defined(OS_MACOSX) | 21 #elif defined(OS_MACOSX) |
(...skipping 28 matching lines...) Expand all Loading... |
49 // Don't test keys with no native keycode mapping on this platform. | 50 // Don't test keys with no native keycode mapping on this platform. |
50 if (entry->native_keycode == ui::KeycodeConverter::InvalidNativeKeycode()) | 51 if (entry->native_keycode == ui::KeycodeConverter::InvalidNativeKeycode()) |
51 continue; | 52 continue; |
52 | 53 |
53 // Verify UsbKeycodeToNativeKeycode works for this key. | 54 // Verify UsbKeycodeToNativeKeycode works for this key. |
54 EXPECT_EQ( | 55 EXPECT_EQ( |
55 entry->native_keycode, | 56 entry->native_keycode, |
56 ui::KeycodeConverter::UsbKeycodeToNativeKeycode(entry->usb_keycode)); | 57 ui::KeycodeConverter::UsbKeycodeToNativeKeycode(entry->usb_keycode)); |
57 | 58 |
58 // Verify CodeToNativeKeycode and NativeKeycodeToCode work correctly. | 59 // Verify CodeToNativeKeycode and NativeKeycodeToCode work correctly. |
59 if (entry->code) { | 60 if (entry->code != ui::DOM_CODE_NONE) { |
60 EXPECT_EQ(entry->native_keycode, | 61 EXPECT_EQ(entry->native_keycode, |
61 ui::KeycodeConverter::CodeToNativeKeycode(entry->code)); | 62 ui::KeycodeConverter::DomCodeToNativeKeycode(entry->code)); |
62 EXPECT_STREQ( | 63 EXPECT_EQ( |
63 entry->code, | 64 entry->code, |
64 ui::KeycodeConverter::NativeKeycodeToCode(entry->native_keycode)); | 65 ui::KeycodeConverter::NativeKeycodeToDomCode(entry->native_keycode)); |
65 } | 66 } else { |
66 else { | |
67 EXPECT_EQ(ui::KeycodeConverter::InvalidNativeKeycode(), | 67 EXPECT_EQ(ui::KeycodeConverter::InvalidNativeKeycode(), |
68 ui::KeycodeConverter::CodeToNativeKeycode(entry->code)); | 68 ui::KeycodeConverter::DomCodeToNativeKeycode(entry->code)); |
69 } | 69 } |
70 | 70 |
71 // Verify that the USB or native codes aren't duplicated. | 71 // Verify that the USB or native codes aren't duplicated. |
72 EXPECT_EQ(0U, usb_to_native.count(entry->usb_keycode)) | 72 EXPECT_EQ(0U, usb_to_native.count(entry->usb_keycode)) |
73 << " duplicate of USB code 0x" << std::hex << std::setfill('0') | 73 << " duplicate of USB code 0x" << std::hex << std::setfill('0') |
74 << std::setw(6) << entry->usb_keycode | 74 << std::setw(6) << entry->usb_keycode << " to native 0x" << std::setw(4) |
75 << " to native 0x" | 75 << entry->native_keycode << " (previous was 0x" << std::setw(4) |
76 << std::setw(4) << entry->native_keycode | 76 << usb_to_native[entry->usb_keycode] << ")"; |
77 << " (previous was 0x" | |
78 << std::setw(4) << usb_to_native[entry->usb_keycode] | |
79 << ")"; | |
80 usb_to_native[entry->usb_keycode] = entry->native_keycode; | 77 usb_to_native[entry->usb_keycode] = entry->native_keycode; |
81 EXPECT_EQ(0U, native_to_usb.count(entry->native_keycode)) | 78 EXPECT_EQ(0U, native_to_usb.count(entry->native_keycode)) |
82 << " duplicate of native code 0x" << std::hex << std::setfill('0') | 79 << " duplicate of native code 0x" << std::hex << std::setfill('0') |
83 << std::setw(4) << entry->native_keycode | 80 << std::setw(4) << entry->native_keycode << " to USB 0x" << std::setw(6) |
84 << " to USB 0x" | 81 << entry->usb_keycode << " (previous was 0x" << std::setw(6) |
85 << std::setw(6) << entry->usb_keycode | 82 << native_to_usb[entry->native_keycode] << ")"; |
86 << " (previous was 0x" | |
87 << std::setw(6) << native_to_usb[entry->native_keycode] | |
88 << ")"; | |
89 native_to_usb[entry->native_keycode] = entry->usb_keycode; | 83 native_to_usb[entry->native_keycode] = entry->usb_keycode; |
90 } | 84 } |
91 ASSERT_EQ(usb_to_native.size(), native_to_usb.size()); | 85 ASSERT_EQ(usb_to_native.size(), native_to_usb.size()); |
92 | 86 |
93 // Verify that the number of mapped keys is what we expect, i.e. we haven't | 87 // Verify that the number of mapped keys is what we expect, i.e. we haven't |
94 // lost any, and if we've added some then the expectation has been updated. | 88 // lost any, and if we've added some then the expectation has been updated. |
95 EXPECT_EQ(kExpectedMappedKeyCount, usb_to_native.size()); | 89 EXPECT_EQ(kExpectedMappedKeyCount, usb_to_native.size()); |
96 } | 90 } |
97 | 91 |
98 TEST(UsbKeycodeMap, NonExistent) { | 92 TEST(UsbKeycodeMap, NonExistent) { |
99 // Verify that UsbKeycodeToNativeKeycode works for a non-existent USB keycode. | 93 // Verify that UsbKeycodeToNativeKeycode works for a non-existent USB keycode. |
100 EXPECT_EQ( | 94 EXPECT_EQ( |
101 ui::KeycodeConverter::InvalidNativeKeycode(), | 95 ui::KeycodeConverter::InvalidNativeKeycode(), |
102 ui::KeycodeConverter::UsbKeycodeToNativeKeycode(kUsbNonExistentKeycode)); | 96 ui::KeycodeConverter::UsbKeycodeToNativeKeycode(kUsbNonExistentKeycode)); |
103 } | 97 } |
104 | 98 |
105 TEST(UsbKeycodeMap, UsBackslashIsNonUsHash) { | 99 TEST(UsbKeycodeMap, UsBackslashIsNonUsHash) { |
106 // Verify that UsbKeycodeToNativeKeycode treats the non-US "hash" key | 100 // Verify that UsbKeycodeToNativeKeycode treats the non-US "hash" key |
107 // as equivalent to the US "backslash" key. | 101 // as equivalent to the US "backslash" key. |
108 EXPECT_EQ(ui::KeycodeConverter::UsbKeycodeToNativeKeycode(kUsbUsBackslash), | 102 EXPECT_EQ(ui::KeycodeConverter::UsbKeycodeToNativeKeycode(kUsbUsBackslash), |
109 ui::KeycodeConverter::UsbKeycodeToNativeKeycode(kUsbNonUsHash)); | 103 ui::KeycodeConverter::UsbKeycodeToNativeKeycode(kUsbNonUsHash)); |
110 } | 104 } |
111 | 105 |
| 106 TEST(KeycodeConverter, DomCode) { |
| 107 size_t entries = ui::KeycodeConverter::NumDomCodeStringEntriesForTest(); |
| 108 EXPECT_NE(entries, static_cast<size_t>(0u)); |
| 109 // Test invalid and unknown arguments to CodeStringToDomCode() |
| 110 EXPECT_EQ(ui::DOM_CODE_NONE, |
| 111 ui::KeycodeConverter::CodeStringToDomCode(nullptr)); |
| 112 EXPECT_EQ(ui::DOM_CODE_NONE, ui::KeycodeConverter::CodeStringToDomCode("-")); |
| 113 EXPECT_EQ(ui::DOM_CODE_NONE, ui::KeycodeConverter::CodeStringToDomCode("")); |
| 114 // Round-trip test DOM Level 3 .code strings. |
| 115 const char* const* string = ui::KeycodeConverter::DomCodeStringTableForTest(); |
| 116 for (size_t i = 0; i < entries; ++i) { |
| 117 const char* s = string[i]; |
| 118 ui::DomCode code = ui::KeycodeConverter::CodeStringToDomCode(s); |
| 119 if (s) { |
| 120 EXPECT_STREQ(s, ui::KeycodeConverter::DomCodeToCodeString(code)); |
| 121 } else { |
| 122 EXPECT_EQ(ui::DOM_CODE_NONE, code); |
| 123 } |
| 124 } |
| 125 } |
| 126 |
| 127 TEST(KeycodeConverter, DomKey) { |
| 128 size_t entries = ui::KeycodeConverter::NumDomKeyStringEntriesForTest(); |
| 129 EXPECT_NE(entries, static_cast<size_t>(0u)); |
| 130 // Test invalid and unknown arguments to KeyStringToDomKey() |
| 131 EXPECT_EQ(ui::DOM_KEY_NONE, ui::KeycodeConverter::KeyStringToDomKey(nullptr)); |
| 132 EXPECT_EQ(ui::DOM_KEY_NONE, ui::KeycodeConverter::KeyStringToDomKey("-")); |
| 133 // Round-trip test DOM Level 3 .key strings. |
| 134 const char* const* string = ui::KeycodeConverter::DomKeyStringTableForTest(); |
| 135 for (size_t i = 0; i < entries; ++i) { |
| 136 const char* s = string[i]; |
| 137 ui::DomKey key = ui::KeycodeConverter::KeyStringToDomKey(s); |
| 138 if (s) { |
| 139 EXPECT_STREQ(s, ui::KeycodeConverter::DomKeyToKeyString(key)); |
| 140 } else { |
| 141 EXPECT_EQ(ui::DOM_KEY_NONE, key); |
| 142 } |
| 143 } |
| 144 } |
| 145 |
112 } // namespace | 146 } // namespace |
OLD | NEW |