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 |