| 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/base/ime/chromeos/character_composer.h" | 5 #include "ui/base/ime/chromeos/character_composer.h" |
| 6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include "third_party/gtk+/gdk/gdkkeysyms.h" | 9 #include "third_party/gtk+/gdk/gdkkeysyms.h" |
| 10 #include "ui/base/glib/glib_integers.h" | 10 #include "ui/base/glib/glib_integers.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 uint key, | 53 uint key, |
| 54 int flags) { | 54 int flags) { |
| 55 ExpectKeyFilteredWithKeycode(character_composer, key, 0, flags); | 55 ExpectKeyFilteredWithKeycode(character_composer, key, 0, flags); |
| 56 } | 56 } |
| 57 | 57 |
| 58 // Expects |expected_character| is composed after sequence [key1, key2]. | 58 // Expects |expected_character| is composed after sequence [key1, key2]. |
| 59 void ExpectCharacterComposed(CharacterComposer* character_composer, | 59 void ExpectCharacterComposed(CharacterComposer* character_composer, |
| 60 uint key1, | 60 uint key1, |
| 61 uint key2, | 61 uint key2, |
| 62 int flags, | 62 int flags, |
| 63 const string16& expected_character) { | 63 const base::string16& expected_character) { |
| 64 ExpectKeyFiltered(character_composer, key1, flags); | 64 ExpectKeyFiltered(character_composer, key1, flags); |
| 65 EXPECT_TRUE(character_composer->FilterKeyPressInternal(key2, 0, flags)); | 65 EXPECT_TRUE(character_composer->FilterKeyPressInternal(key2, 0, flags)); |
| 66 EXPECT_EQ(expected_character, character_composer->composed_character()); | 66 EXPECT_EQ(expected_character, character_composer->composed_character()); |
| 67 } | 67 } |
| 68 | 68 |
| 69 // Expects |expected_character| is composed after sequence [key1, key2, key3]. | 69 // Expects |expected_character| is composed after sequence [key1, key2, key3]. |
| 70 void ExpectCharacterComposed(CharacterComposer* character_composer, | 70 void ExpectCharacterComposed(CharacterComposer* character_composer, |
| 71 uint key1, | 71 uint key1, |
| 72 uint key2, | 72 uint key2, |
| 73 uint key3, | 73 uint key3, |
| 74 int flags, | 74 int flags, |
| 75 const string16& expected_character) { | 75 const base::string16& expected_character) { |
| 76 ExpectKeyFiltered(character_composer, key1, flags); | 76 ExpectKeyFiltered(character_composer, key1, flags); |
| 77 ExpectCharacterComposed(character_composer, key2, key3, flags, | 77 ExpectCharacterComposed(character_composer, key2, key3, flags, |
| 78 expected_character); | 78 expected_character); |
| 79 } | 79 } |
| 80 | 80 |
| 81 // Expects |expected_character| is composed after sequence [key1, key2, key3, | 81 // Expects |expected_character| is composed after sequence [key1, key2, key3, |
| 82 // key 4]. | 82 // key 4]. |
| 83 void ExpectCharacterComposed(CharacterComposer* character_composer, | 83 void ExpectCharacterComposed(CharacterComposer* character_composer, |
| 84 uint key1, | 84 uint key1, |
| 85 uint key2, | 85 uint key2, |
| 86 uint key3, | 86 uint key3, |
| 87 uint key4, | 87 uint key4, |
| 88 int flags, | 88 int flags, |
| 89 const string16& expected_character) { | 89 const base::string16& expected_character) { |
| 90 ExpectKeyFiltered(character_composer, key1, flags); | 90 ExpectKeyFiltered(character_composer, key1, flags); |
| 91 ExpectCharacterComposed(character_composer, key2, key3, key4, flags, | 91 ExpectCharacterComposed(character_composer, key2, key3, key4, flags, |
| 92 expected_character); | 92 expected_character); |
| 93 } | 93 } |
| 94 | 94 |
| 95 // Expects |expected_character| is composed after sequence [key1, key2, key3, | 95 // Expects |expected_character| is composed after sequence [key1, key2, key3, |
| 96 // key 4, key5]. | 96 // key 4, key5]. |
| 97 void ExpectCharacterComposed(CharacterComposer* character_composer, | 97 void ExpectCharacterComposed(CharacterComposer* character_composer, |
| 98 uint key1, | 98 uint key1, |
| 99 uint key2, | 99 uint key2, |
| 100 uint key3, | 100 uint key3, |
| 101 uint key4, | 101 uint key4, |
| 102 uint key5, | 102 uint key5, |
| 103 int flags, | 103 int flags, |
| 104 const string16& expected_character) { | 104 const base::string16& expected_character) { |
| 105 ExpectKeyFiltered(character_composer, key1, flags); | 105 ExpectKeyFiltered(character_composer, key1, flags); |
| 106 ExpectCharacterComposed(character_composer, key2, key3, key4, key5, flags, | 106 ExpectCharacterComposed(character_composer, key2, key3, key4, key5, flags, |
| 107 expected_character); | 107 expected_character); |
| 108 } | 108 } |
| 109 | 109 |
| 110 // Expects |expected_character| is composed after sequence [key1, key2, key3, | 110 // Expects |expected_character| is composed after sequence [key1, key2, key3, |
| 111 // key 4, key5, key6]. | 111 // key 4, key5, key6]. |
| 112 void ExpectCharacterComposed(CharacterComposer* character_composer, | 112 void ExpectCharacterComposed(CharacterComposer* character_composer, |
| 113 uint key1, | 113 uint key1, |
| 114 uint key2, | 114 uint key2, |
| 115 uint key3, | 115 uint key3, |
| 116 uint key4, | 116 uint key4, |
| 117 uint key5, | 117 uint key5, |
| 118 uint key6, | 118 uint key6, |
| 119 int flags, | 119 int flags, |
| 120 const string16& expected_character) { | 120 const base::string16& expected_character) { |
| 121 ExpectKeyFiltered(character_composer, key1, flags); | 121 ExpectKeyFiltered(character_composer, key1, flags); |
| 122 ExpectCharacterComposed(character_composer, key2, key3, key4, key5, key6, | 122 ExpectCharacterComposed(character_composer, key2, key3, key4, key5, key6, |
| 123 flags, expected_character); | 123 flags, expected_character); |
| 124 } | 124 } |
| 125 | 125 |
| 126 // Expects |expected_character| is composed after sequence [{key1, keycode1}]. | 126 // Expects |expected_character| is composed after sequence [{key1, keycode1}]. |
| 127 void ExpectCharacterComposedWithKeyCode(CharacterComposer* character_composer, | 127 void ExpectCharacterComposedWithKeyCode( |
| 128 uint key1, uint keycode1, | 128 CharacterComposer* character_composer, |
| 129 int flags, | 129 uint key1, uint keycode1, |
| 130 const string16& expected_character) { | 130 int flags, |
| 131 const base::string16& expected_character) { |
| 131 EXPECT_TRUE(character_composer->FilterKeyPressInternal(key1, keycode1, | 132 EXPECT_TRUE(character_composer->FilterKeyPressInternal(key1, keycode1, |
| 132 flags)); | 133 flags)); |
| 133 EXPECT_EQ(expected_character, character_composer->composed_character()); | 134 EXPECT_EQ(expected_character, character_composer->composed_character()); |
| 134 } | 135 } |
| 135 }; | 136 }; |
| 136 | 137 |
| 137 TEST_F(CharacterComposerTest, InitialState) { | 138 TEST_F(CharacterComposerTest, InitialState) { |
| 138 CharacterComposer character_composer; | 139 CharacterComposer character_composer; |
| 139 EXPECT_TRUE(character_composer.composed_character().empty()); | 140 EXPECT_TRUE(character_composer.composed_character().empty()); |
| 140 } | 141 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 160 // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail. | 161 // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail. |
| 161 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); | 162 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); |
| 162 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0); | 163 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0); |
| 163 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); | 164 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); |
| 164 } | 165 } |
| 165 | 166 |
| 166 TEST_F(CharacterComposerTest, FullyMatchingSequences) { | 167 TEST_F(CharacterComposerTest, FullyMatchingSequences) { |
| 167 CharacterComposer character_composer; | 168 CharacterComposer character_composer; |
| 168 // LATIN SMALL LETTER A WITH ACUTE | 169 // LATIN SMALL LETTER A WITH ACUTE |
| 169 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, | 170 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, |
| 170 string16(1, 0x00E1)); | 171 base::string16(1, 0x00E1)); |
| 171 // LATIN CAPITAL LETTER A WITH ACUTE | 172 // LATIN CAPITAL LETTER A WITH ACUTE |
| 172 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_A, 0, | 173 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_A, 0, |
| 173 string16(1, 0x00C1)); | 174 base::string16(1, 0x00C1)); |
| 174 // GRAVE ACCENT | 175 // GRAVE ACCENT |
| 175 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_grave, | 176 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_grave, |
| 176 GDK_KEY_dead_grave, 0, string16(1, 0x0060)); | 177 GDK_KEY_dead_grave, 0, base::string16(1, 0x0060)); |
| 177 // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE | 178 // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE |
| 178 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, | 179 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, |
| 179 GDK_KEY_dead_circumflex, GDK_KEY_a, 0, | 180 GDK_KEY_dead_circumflex, GDK_KEY_a, 0, |
| 180 string16(1, 0x1EA5)); | 181 base::string16(1, 0x1EA5)); |
| 181 // LATIN CAPITAL LETTER U WITH HORN AND GRAVE | 182 // LATIN CAPITAL LETTER U WITH HORN AND GRAVE |
| 182 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_grave, | 183 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_grave, |
| 183 GDK_KEY_dead_horn, GDK_KEY_U, 0, string16(1, 0x1EEA)); | 184 GDK_KEY_dead_horn, GDK_KEY_U, 0, |
| 185 base::string16(1, 0x1EEA)); |
| 184 // LATIN CAPITAL LETTER C WITH CEDILLA | 186 // LATIN CAPITAL LETTER C WITH CEDILLA |
| 185 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_C, 0, | 187 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_C, 0, |
| 186 string16(1, 0x00C7)); | 188 base::string16(1, 0x00C7)); |
| 187 // LATIN SMALL LETTER C WITH CEDILLA | 189 // LATIN SMALL LETTER C WITH CEDILLA |
| 188 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_c, 0, | 190 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_c, 0, |
| 189 string16(1, 0x00E7)); | 191 base::string16(1, 0x00E7)); |
| 190 } | 192 } |
| 191 | 193 |
| 192 TEST_F(CharacterComposerTest, FullyMatchingSequencesAfterMatchingFailure) { | 194 TEST_F(CharacterComposerTest, FullyMatchingSequencesAfterMatchingFailure) { |
| 193 CharacterComposer character_composer; | 195 CharacterComposer character_composer; |
| 194 // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail. | 196 // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail. |
| 195 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); | 197 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); |
| 196 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0); | 198 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0); |
| 197 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); | 199 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); |
| 198 // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE | 200 // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE |
| 199 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, | 201 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, |
| 200 GDK_KEY_dead_circumflex, GDK_KEY_a, 0, | 202 GDK_KEY_dead_circumflex, GDK_KEY_a, 0, |
| 201 string16(1, 0x1EA5)); | 203 base::string16(1, 0x1EA5)); |
| 202 } | 204 } |
| 203 | 205 |
| 204 TEST_F(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) { | 206 TEST_F(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) { |
| 205 CharacterComposer character_composer; | 207 CharacterComposer character_composer; |
| 206 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, | 208 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, |
| 207 string16(1, 0x00E1)); | 209 base::string16(1, 0x00E1)); |
| 208 character_composer.Reset(); | 210 character_composer.Reset(); |
| 209 EXPECT_TRUE(character_composer.composed_character().empty()); | 211 EXPECT_TRUE(character_composer.composed_character().empty()); |
| 210 } | 212 } |
| 211 | 213 |
| 212 TEST_F(CharacterComposerTest, CompositionStateIsClearedAfterReset) { | 214 TEST_F(CharacterComposerTest, CompositionStateIsClearedAfterReset) { |
| 213 CharacterComposer character_composer; | 215 CharacterComposer character_composer; |
| 214 // Even though sequence ['dead acute', 'a'] will compose 'a with acute', | 216 // Even though sequence ['dead acute', 'a'] will compose 'a with acute', |
| 215 // no character is composed here because of reset. | 217 // no character is composed here because of reset. |
| 216 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); | 218 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); |
| 217 character_composer.Reset(); | 219 character_composer.Reset(); |
| 218 ExpectKeyNotFiltered(&character_composer, GDK_KEY_a, 0); | 220 ExpectKeyNotFiltered(&character_composer, GDK_KEY_a, 0); |
| 219 } | 221 } |
| 220 | 222 |
| 221 TEST_F(CharacterComposerTest, KeySequenceCompositionPreedit) { | 223 TEST_F(CharacterComposerTest, KeySequenceCompositionPreedit) { |
| 222 CharacterComposer character_composer; | 224 CharacterComposer character_composer; |
| 223 // LATIN SMALL LETTER A WITH ACUTE | 225 // LATIN SMALL LETTER A WITH ACUTE |
| 224 // preedit_string() is always empty in key sequence composition mode. | 226 // preedit_string() is always empty in key sequence composition mode. |
| 225 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); | 227 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); |
| 226 EXPECT_TRUE(character_composer.preedit_string().empty()); | 228 EXPECT_TRUE(character_composer.preedit_string().empty()); |
| 227 EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_a, 0, 0)); | 229 EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_a, 0, 0)); |
| 228 EXPECT_EQ(string16(1, 0x00E1), character_composer.composed_character()); | 230 EXPECT_EQ(base::string16(1, 0x00E1), character_composer.composed_character()); |
| 229 EXPECT_TRUE(character_composer.preedit_string().empty()); | 231 EXPECT_TRUE(character_composer.preedit_string().empty()); |
| 230 } | 232 } |
| 231 | 233 |
| 232 // ComposeCheckerWithCompactTable in character_composer.cc is depending on the | 234 // ComposeCheckerWithCompactTable in character_composer.cc is depending on the |
| 233 // assumption that the data in gtkimcontextsimpleseqs.h is correctly ordered. | 235 // assumption that the data in gtkimcontextsimpleseqs.h is correctly ordered. |
| 234 TEST_F(CharacterComposerTest, MainTableIsCorrectlyOrdered) { | 236 TEST_F(CharacterComposerTest, MainTableIsCorrectlyOrdered) { |
| 235 // This file is included here intentionally, instead of the top of the file, | 237 // This file is included here intentionally, instead of the top of the file, |
| 236 // because including this file at the top of the file will define a | 238 // because including this file at the top of the file will define a |
| 237 // global constant and contaminate the global namespace. | 239 // global constant and contaminate the global namespace. |
| 238 #include "third_party/gtk+/gtk/gtkimcontextsimpleseqs.h" | 240 #include "third_party/gtk+/gtk/gtkimcontextsimpleseqs.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 } | 276 } |
| 275 } | 277 } |
| 276 } | 278 } |
| 277 | 279 |
| 278 TEST_F(CharacterComposerTest, HexadecimalComposition) { | 280 TEST_F(CharacterComposerTest, HexadecimalComposition) { |
| 279 CharacterComposer character_composer; | 281 CharacterComposer character_composer; |
| 280 // HIRAGANA LETTER A (U+3042) | 282 // HIRAGANA LETTER A (U+3042) |
| 281 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 283 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 282 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 284 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 283 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, GDK_KEY_4, | 285 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, GDK_KEY_4, |
| 284 GDK_KEY_2, GDK_KEY_space, 0, string16(1, 0x3042)); | 286 GDK_KEY_2, GDK_KEY_space, 0, |
| 287 base::string16(1, 0x3042)); |
| 285 // MUSICAL KEYBOARD (U+1F3B9) | 288 // MUSICAL KEYBOARD (U+1F3B9) |
| 286 const char16 kMusicalKeyboard[] = {0xd83c, 0xdfb9}; | 289 const char16 kMusicalKeyboard[] = {0xd83c, 0xdfb9}; |
| 287 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 290 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 288 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 291 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 289 ExpectCharacterComposed(&character_composer, GDK_KEY_1, GDK_KEY_f, GDK_KEY_3, | 292 ExpectCharacterComposed(&character_composer, GDK_KEY_1, GDK_KEY_f, GDK_KEY_3, |
| 290 GDK_KEY_b, GDK_KEY_9, GDK_KEY_Return, 0, | 293 GDK_KEY_b, GDK_KEY_9, GDK_KEY_Return, 0, |
| 291 string16(kMusicalKeyboard, | 294 base::string16(kMusicalKeyboard, |
| 292 kMusicalKeyboard + | 295 kMusicalKeyboard + |
| 293 arraysize(kMusicalKeyboard))); | 296 arraysize(kMusicalKeyboard))); |
| 294 } | 297 } |
| 295 | 298 |
| 296 TEST_F(CharacterComposerTest, HexadecimalCompositionPreedit) { | 299 TEST_F(CharacterComposerTest, HexadecimalCompositionPreedit) { |
| 297 CharacterComposer character_composer; | 300 CharacterComposer character_composer; |
| 298 // HIRAGANA LETTER A (U+3042) | 301 // HIRAGANA LETTER A (U+3042) |
| 299 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 302 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 300 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 303 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 301 EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string()); | 304 EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string()); |
| 302 ExpectKeyFiltered(&character_composer, GDK_KEY_3, 0); | 305 ExpectKeyFiltered(&character_composer, GDK_KEY_3, 0); |
| 303 EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string()); | 306 EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string()); |
| 304 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); | 307 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); |
| 305 EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string()); | 308 EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string()); |
| 306 ExpectKeyFiltered(&character_composer, GDK_KEY_4, 0); | 309 ExpectKeyFiltered(&character_composer, GDK_KEY_4, 0); |
| 307 EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string()); | 310 EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string()); |
| 308 ExpectKeyFiltered(&character_composer, GDK_KEY_a, 0); | 311 ExpectKeyFiltered(&character_composer, GDK_KEY_a, 0); |
| 309 EXPECT_EQ(ASCIIToUTF16("u304a"), character_composer.preedit_string()); | 312 EXPECT_EQ(ASCIIToUTF16("u304a"), character_composer.preedit_string()); |
| 310 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0); | 313 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0); |
| 311 EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string()); | 314 EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string()); |
| 312 ExpectCharacterComposed(&character_composer, GDK_KEY_2, GDK_KEY_Return, 0, | 315 ExpectCharacterComposed(&character_composer, GDK_KEY_2, GDK_KEY_Return, 0, |
| 313 string16(1, 0x3042)); | 316 base::string16(1, 0x3042)); |
| 314 EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string()); | 317 EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string()); |
| 315 | 318 |
| 316 // Sequence with an ignored character ('x') and Escape. | 319 // Sequence with an ignored character ('x') and Escape. |
| 317 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 320 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 318 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 321 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 319 EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string()); | 322 EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string()); |
| 320 ExpectKeyFiltered(&character_composer, GDK_KEY_3, 0); | 323 ExpectKeyFiltered(&character_composer, GDK_KEY_3, 0); |
| 321 EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string()); | 324 EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string()); |
| 322 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); | 325 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); |
| 323 EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string()); | 326 EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 339 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 342 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 340 ExpectKeyFiltered(&character_composer, GDK_KEY_x, 0); | 343 ExpectKeyFiltered(&character_composer, GDK_KEY_x, 0); |
| 341 ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0); | 344 ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0); |
| 342 EXPECT_TRUE(character_composer.composed_character().empty()); | 345 EXPECT_TRUE(character_composer.composed_character().empty()); |
| 343 | 346 |
| 344 // HIRAGANA LETTER A (U+3042) with a sequence [3, 0, x, 4, 2]. | 347 // HIRAGANA LETTER A (U+3042) with a sequence [3, 0, x, 4, 2]. |
| 345 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 348 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 346 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 349 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 347 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, GDK_KEY_x, | 350 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, GDK_KEY_x, |
| 348 GDK_KEY_4, GDK_KEY_2, GDK_KEY_space, 0, | 351 GDK_KEY_4, GDK_KEY_2, GDK_KEY_space, 0, |
| 349 string16(1, 0x3042)); | 352 base::string16(1, 0x3042)); |
| 350 } | 353 } |
| 351 | 354 |
| 352 TEST_F(CharacterComposerTest, HexadecimalCompositionWithAdditionalModifiers) { | 355 TEST_F(CharacterComposerTest, HexadecimalCompositionWithAdditionalModifiers) { |
| 353 CharacterComposer character_composer; | 356 CharacterComposer character_composer; |
| 354 | 357 |
| 355 // Ctrl+Shift+Alt+U | 358 // Ctrl+Shift+Alt+U |
| 356 // HIRAGANA LETTER A (U+3042) | 359 // HIRAGANA LETTER A (U+3042) |
| 357 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 360 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 358 EF_SHIFT_DOWN | EF_CONTROL_DOWN | EF_ALT_DOWN); | 361 EF_SHIFT_DOWN | EF_CONTROL_DOWN | EF_ALT_DOWN); |
| 359 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, GDK_KEY_4, | 362 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, GDK_KEY_4, |
| 360 GDK_KEY_2, GDK_KEY_space, 0, string16(1, 0x3042)); | 363 GDK_KEY_2, GDK_KEY_space, 0, |
| 364 base::string16(1, 0x3042)); |
| 361 | 365 |
| 362 // Ctrl+Shift+u (CapsLock enabled) | 366 // Ctrl+Shift+u (CapsLock enabled) |
| 363 ExpectKeyNotFiltered(&character_composer, GDK_KEY_u, | 367 ExpectKeyNotFiltered(&character_composer, GDK_KEY_u, |
| 364 EF_SHIFT_DOWN | EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN); | 368 EF_SHIFT_DOWN | EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN); |
| 365 } | 369 } |
| 366 | 370 |
| 367 TEST_F(CharacterComposerTest, CancelHexadecimalComposition) { | 371 TEST_F(CharacterComposerTest, CancelHexadecimalComposition) { |
| 368 CharacterComposer character_composer; | 372 CharacterComposer character_composer; |
| 369 // Cancel composition with ESC. | 373 // Cancel composition with ESC. |
| 370 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 374 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 371 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 375 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 372 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); | 376 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); |
| 373 ExpectKeyFiltered(&character_composer, GDK_KEY_Escape, 0); | 377 ExpectKeyFiltered(&character_composer, GDK_KEY_Escape, 0); |
| 374 | 378 |
| 375 // Now we can start composition again since the last composition was | 379 // Now we can start composition again since the last composition was |
| 376 // cancelled. | 380 // cancelled. |
| 377 // HIRAGANA LETTER A (U+3042) | 381 // HIRAGANA LETTER A (U+3042) |
| 378 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 382 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 379 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 383 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 380 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, GDK_KEY_4, | 384 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, GDK_KEY_4, |
| 381 GDK_KEY_2, GDK_KEY_space, 0, string16(1, 0x3042)); | 385 GDK_KEY_2, GDK_KEY_space, 0, |
| 386 base::string16(1, 0x3042)); |
| 382 } | 387 } |
| 383 | 388 |
| 384 TEST_F(CharacterComposerTest, HexadecimalCompositionWithBackspace) { | 389 TEST_F(CharacterComposerTest, HexadecimalCompositionWithBackspace) { |
| 385 CharacterComposer character_composer; | 390 CharacterComposer character_composer; |
| 386 // HIRAGANA LETTER A (U+3042) | 391 // HIRAGANA LETTER A (U+3042) |
| 387 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 392 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 388 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 393 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 389 ExpectKeyFiltered(&character_composer, GDK_KEY_3, 0); | 394 ExpectKeyFiltered(&character_composer, GDK_KEY_3, 0); |
| 390 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); | 395 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); |
| 391 ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0); | 396 ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0); |
| 392 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0); | 397 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0); |
| 393 ExpectCharacterComposed(&character_composer, GDK_KEY_4, GDK_KEY_2, | 398 ExpectCharacterComposed(&character_composer, GDK_KEY_4, GDK_KEY_2, |
| 394 GDK_KEY_space, 0, string16(1, 0x3042)); | 399 GDK_KEY_space, 0, base::string16(1, 0x3042)); |
| 395 } | 400 } |
| 396 | 401 |
| 397 TEST_F(CharacterComposerTest, CancelHexadecimalCompositionWithBackspace) { | 402 TEST_F(CharacterComposerTest, CancelHexadecimalCompositionWithBackspace) { |
| 398 CharacterComposer character_composer; | 403 CharacterComposer character_composer; |
| 399 | 404 |
| 400 // Backspace just after Ctrl+Shift+U. | 405 // Backspace just after Ctrl+Shift+U. |
| 401 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 406 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 402 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 407 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 403 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0); | 408 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0); |
| 404 ExpectKeyNotFiltered(&character_composer, GDK_KEY_3, 0); | 409 ExpectKeyNotFiltered(&character_composer, GDK_KEY_3, 0); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 435 EXPECT_EQ(ASCIIToUTF16("u304a"), character_composer.preedit_string()); | 440 EXPECT_EQ(ASCIIToUTF16("u304a"), character_composer.preedit_string()); |
| 436 ExpectKeyFilteredWithKeycode(&character_composer, | 441 ExpectKeyFilteredWithKeycode(&character_composer, |
| 437 GDK_KEY_BackSpace, 22, control_shift); | 442 GDK_KEY_BackSpace, 22, control_shift); |
| 438 EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string()); | 443 EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string()); |
| 439 ExpectKeyFilteredWithKeycode(&character_composer, | 444 ExpectKeyFilteredWithKeycode(&character_composer, |
| 440 GDK_KEY_at, 11, control_shift); | 445 GDK_KEY_at, 11, control_shift); |
| 441 EXPECT_EQ(ASCIIToUTF16("u3042"), character_composer.preedit_string()); | 446 EXPECT_EQ(ASCIIToUTF16("u3042"), character_composer.preedit_string()); |
| 442 ExpectCharacterComposedWithKeyCode(&character_composer, | 447 ExpectCharacterComposedWithKeyCode(&character_composer, |
| 443 GDK_KEY_Return, 36, | 448 GDK_KEY_Return, 36, |
| 444 control_shift, | 449 control_shift, |
| 445 string16(1, 0x3042)); | 450 base::string16(1, 0x3042)); |
| 446 EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string()); | 451 EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string()); |
| 447 | 452 |
| 448 // Sequence with an ignored character (control + shift + 'x') and Escape. | 453 // Sequence with an ignored character (control + shift + 'x') and Escape. |
| 449 ExpectKeyFilteredWithKeycode(&character_composer, | 454 ExpectKeyFilteredWithKeycode(&character_composer, |
| 450 GDK_KEY_U, 30, control_shift); | 455 GDK_KEY_U, 30, control_shift); |
| 451 EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string()); | 456 EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string()); |
| 452 ExpectKeyFilteredWithKeycode(&character_composer, | 457 ExpectKeyFilteredWithKeycode(&character_composer, |
| 453 GDK_KEY_numbersign, 12, control_shift); | 458 GDK_KEY_numbersign, 12, control_shift); |
| 454 EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string()); | 459 EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string()); |
| 455 ExpectKeyFilteredWithKeycode(&character_composer, | 460 ExpectKeyFilteredWithKeycode(&character_composer, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); | 507 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); |
| 503 for (int i = 0; i < 4; ++i) | 508 for (int i = 0; i < 4; ++i) |
| 504 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); | 509 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); |
| 505 ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0); | 510 ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0); |
| 506 } | 511 } |
| 507 | 512 |
| 508 TEST_F(CharacterComposerTest, HexadecimalSequenceAndDeadKey) { | 513 TEST_F(CharacterComposerTest, HexadecimalSequenceAndDeadKey) { |
| 509 CharacterComposer character_composer; | 514 CharacterComposer character_composer; |
| 510 // LATIN SMALL LETTER A WITH ACUTE | 515 // LATIN SMALL LETTER A WITH ACUTE |
| 511 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, | 516 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, |
| 512 string16(1, 0x00E1)); | 517 base::string16(1, 0x00E1)); |
| 513 // HIRAGANA LETTER A (U+3042) with dead_acute ignored. | 518 // HIRAGANA LETTER A (U+3042) with dead_acute ignored. |
| 514 ExpectKeyFiltered(&character_composer, GDK_KEY_U, | 519 ExpectKeyFiltered(&character_composer, GDK_KEY_U, |
| 515 EF_SHIFT_DOWN | EF_CONTROL_DOWN); | 520 EF_SHIFT_DOWN | EF_CONTROL_DOWN); |
| 516 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, | 521 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, |
| 517 GDK_KEY_dead_acute, GDK_KEY_4, GDK_KEY_2, | 522 GDK_KEY_dead_acute, GDK_KEY_4, GDK_KEY_2, |
| 518 GDK_KEY_space, 0, string16(1, 0x3042)); | 523 GDK_KEY_space, 0, base::string16(1, 0x3042)); |
| 519 // LATIN CAPITAL LETTER U WITH ACUTE while 'U' is pressed with Ctrl+Shift. | 524 // LATIN CAPITAL LETTER U WITH ACUTE while 'U' is pressed with Ctrl+Shift. |
| 520 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); | 525 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); |
| 521 EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_U, 0, | 526 EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_U, 0, |
| 522 EF_SHIFT_DOWN | EF_CONTROL_DOWN)); | 527 EF_SHIFT_DOWN | EF_CONTROL_DOWN)); |
| 523 EXPECT_EQ(string16(1, 0x00DA), character_composer.composed_character()); | 528 EXPECT_EQ(base::string16(1, 0x00DA), character_composer.composed_character()); |
| 524 } | 529 } |
| 525 | 530 |
| 526 TEST_F(CharacterComposerTest, BlacklistedKeyeventsTest) { | 531 TEST_F(CharacterComposerTest, BlacklistedKeyeventsTest) { |
| 527 CharacterComposer character_composer; | 532 CharacterComposer character_composer; |
| 528 EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_dead_acute, 0, 0)); | 533 EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_dead_acute, 0, 0)); |
| 529 EXPECT_FALSE(FilterKeyPress(&character_composer, GDK_KEY_s, 0, 0)); | 534 EXPECT_FALSE(FilterKeyPress(&character_composer, GDK_KEY_s, 0, 0)); |
| 530 ASSERT_EQ(1U, character_composer.composed_character().size()); | 535 ASSERT_EQ(1U, character_composer.composed_character().size()); |
| 531 EXPECT_EQ(GDK_KEY_apostrophe, character_composer.composed_character().at(0)); | 536 EXPECT_EQ(GDK_KEY_apostrophe, character_composer.composed_character().at(0)); |
| 532 } | 537 } |
| 533 | 538 |
| 534 } // namespace ui | 539 } // namespace ui |
| OLD | NEW |