Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(323)

Side by Side Diff: ui/base/ime/character_composer_unittest.cc

Issue 15816003: Supports unicode composition(Ctrl+Shift+U) with C-S pressed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added a TODO. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/base/ime/character_composer.cc ('k') | ui/base/ime/input_method_ibus.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/character_composer.h" 5 #include "ui/base/ime/character_composer.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/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/events/event_constants.h" 10 #include "ui/base/events/event_constants.h"
11 #include "ui/base/glib/glib_integers.h" 11 #include "ui/base/glib/glib_integers.h"
12 12
13 namespace ui { 13 namespace ui {
14 14
15 namespace { 15 namespace {
16 16
17 // Expects key is not filtered and no character is composed. 17 // Expects key is not filtered and no character is composed.
18 void ExpectKeyNotFiltered(CharacterComposer* character_composer, 18 void ExpectKeyNotFiltered(CharacterComposer* character_composer,
19 uint key, 19 uint key,
20 uint flags) { 20 int flags) {
21 EXPECT_FALSE(character_composer->FilterKeyPress(key, flags)); 21 EXPECT_FALSE(character_composer->FilterKeyPress(key, 0, flags));
22 EXPECT_TRUE(character_composer->composed_character().empty()); 22 EXPECT_TRUE(character_composer->composed_character().empty());
23 } 23 }
24 24
25 // Expects key is filtered and no character is composed. 25 // Expects key is filtered and no character is composed.
26 void ExpectKeyFiltered(CharacterComposer* character_composer, 26 void ExpectKeyFiltered(CharacterComposer* character_composer,
27 uint key, 27 uint key,
28 uint flags) { 28 int flags) {
29 EXPECT_TRUE(character_composer->FilterKeyPress(key, flags)); 29 EXPECT_TRUE(character_composer->FilterKeyPress(key, 0, flags));
30 EXPECT_TRUE(character_composer->composed_character().empty()); 30 EXPECT_TRUE(character_composer->composed_character().empty());
31 } 31 }
32 32
33 // Expects key is filtered and no character is composed.
34 void ExpectKeyFilteredWithKeycode(CharacterComposer* character_composer,
35 uint key,
36 uint keycode,
37 int flags) {
38 EXPECT_TRUE(character_composer->FilterKeyPress(key, keycode, flags));
39 EXPECT_TRUE(character_composer->composed_character().empty());
40 }
41
33 // Expects |expected_character| is composed after sequence [key1, key2]. 42 // Expects |expected_character| is composed after sequence [key1, key2].
34 void ExpectCharacterComposed(CharacterComposer* character_composer, 43 void ExpectCharacterComposed(CharacterComposer* character_composer,
35 uint key1, 44 uint key1,
36 uint key2, 45 uint key2,
37 uint flags, 46 int flags,
38 const string16& expected_character) { 47 const string16& expected_character) {
39 ExpectKeyFiltered(character_composer, key1, flags); 48 ExpectKeyFiltered(character_composer, key1, flags);
40 EXPECT_TRUE(character_composer->FilterKeyPress(key2, flags)); 49 EXPECT_TRUE(character_composer->FilterKeyPress(key2, 0, flags));
41 EXPECT_EQ(expected_character, character_composer->composed_character()); 50 EXPECT_EQ(expected_character, character_composer->composed_character());
42 } 51 }
43 52
44 // Expects |expected_character| is composed after sequence [key1, key2, key3]. 53 // Expects |expected_character| is composed after sequence [key1, key2, key3].
45 void ExpectCharacterComposed(CharacterComposer* character_composer, 54 void ExpectCharacterComposed(CharacterComposer* character_composer,
46 uint key1, 55 uint key1,
47 uint key2, 56 uint key2,
48 uint key3, 57 uint key3,
49 uint flags, 58 int flags,
50 const string16& expected_character) { 59 const string16& expected_character) {
51 ExpectKeyFiltered(character_composer, key1, flags); 60 ExpectKeyFiltered(character_composer, key1, flags);
52 ExpectCharacterComposed(character_composer, key2, key3, flags, 61 ExpectCharacterComposed(character_composer, key2, key3, flags,
53 expected_character); 62 expected_character);
54 } 63 }
55 64
56 // Expects |expected_character| is composed after sequence [key1, key2, key3, 65 // Expects |expected_character| is composed after sequence [key1, key2, key3,
57 // key 4]. 66 // key 4].
58 void ExpectCharacterComposed(CharacterComposer* character_composer, 67 void ExpectCharacterComposed(CharacterComposer* character_composer,
59 uint key1, 68 uint key1,
60 uint key2, 69 uint key2,
61 uint key3, 70 uint key3,
62 uint key4, 71 uint key4,
63 uint flags, 72 int flags,
64 const string16& expected_character) { 73 const string16& expected_character) {
65 ExpectKeyFiltered(character_composer, key1, flags); 74 ExpectKeyFiltered(character_composer, key1, flags);
66 ExpectCharacterComposed(character_composer, key2, key3, key4, flags, 75 ExpectCharacterComposed(character_composer, key2, key3, key4, flags,
67 expected_character); 76 expected_character);
68 } 77 }
69 78
70 // Expects |expected_character| is composed after sequence [key1, key2, key3, 79 // Expects |expected_character| is composed after sequence [key1, key2, key3,
71 // key 4, key5]. 80 // key 4, key5].
72 void ExpectCharacterComposed(CharacterComposer* character_composer, 81 void ExpectCharacterComposed(CharacterComposer* character_composer,
73 uint key1, 82 uint key1,
74 uint key2, 83 uint key2,
75 uint key3, 84 uint key3,
76 uint key4, 85 uint key4,
77 uint key5, 86 uint key5,
78 uint flags, 87 int flags,
79 const string16& expected_character) { 88 const string16& expected_character) {
80 ExpectKeyFiltered(character_composer, key1, flags); 89 ExpectKeyFiltered(character_composer, key1, flags);
81 ExpectCharacterComposed(character_composer, key2, key3, key4, key5, flags, 90 ExpectCharacterComposed(character_composer, key2, key3, key4, key5, flags,
82 expected_character); 91 expected_character);
83 } 92 }
84 93
85 // Expects |expected_character| is composed after sequence [key1, key2, key3, 94 // Expects |expected_character| is composed after sequence [key1, key2, key3,
86 // key 4, key5, key6]. 95 // key 4, key5, key6].
87 void ExpectCharacterComposed(CharacterComposer* character_composer, 96 void ExpectCharacterComposed(CharacterComposer* character_composer,
88 uint key1, 97 uint key1,
89 uint key2, 98 uint key2,
90 uint key3, 99 uint key3,
91 uint key4, 100 uint key4,
92 uint key5, 101 uint key5,
93 uint key6, 102 uint key6,
94 uint flags, 103 int flags,
95 const string16& expected_character) { 104 const string16& expected_character) {
96 ExpectKeyFiltered(character_composer, key1, flags); 105 ExpectKeyFiltered(character_composer, key1, flags);
97 ExpectCharacterComposed(character_composer, key2, key3, key4, key5, key6, 106 ExpectCharacterComposed(character_composer, key2, key3, key4, key5, key6,
98 flags, expected_character); 107 flags, expected_character);
99 } 108 }
100 109
110 // Expects |expected_character| is composed after sequence [{key1, keycode1}].
111 void ExpectCharacterComposedWithKeyCode(CharacterComposer* character_composer,
112 uint key1, uint keycode1,
113 int flags,
114 const string16& expected_character) {
115 EXPECT_TRUE(character_composer->FilterKeyPress(key1, keycode1, flags));
116 EXPECT_EQ(expected_character, character_composer->composed_character());
117 }
118
101 } // namespace 119 } // namespace
102 120
103 TEST(CharacterComposerTest, InitialState) { 121 TEST(CharacterComposerTest, InitialState) {
104 CharacterComposer character_composer; 122 CharacterComposer character_composer;
105 EXPECT_TRUE(character_composer.composed_character().empty()); 123 EXPECT_TRUE(character_composer.composed_character().empty());
106 } 124 }
107 125
108 TEST(CharacterComposerTest, NormalKeyIsNotFiltered) { 126 TEST(CharacterComposerTest, NormalKeyIsNotFiltered) {
109 CharacterComposer character_composer; 127 CharacterComposer character_composer;
110 ExpectKeyNotFiltered(&character_composer, GDK_KEY_B, 0); 128 ExpectKeyNotFiltered(&character_composer, GDK_KEY_B, 0);
111 ExpectKeyNotFiltered(&character_composer, GDK_KEY_Z, 0); 129 ExpectKeyNotFiltered(&character_composer, GDK_KEY_Z, 0);
112 ExpectKeyNotFiltered(&character_composer, GDK_KEY_c, 0); 130 ExpectKeyNotFiltered(&character_composer, GDK_KEY_c, 0);
113 ExpectKeyNotFiltered(&character_composer, GDK_KEY_m, 0); 131 ExpectKeyNotFiltered(&character_composer, GDK_KEY_m, 0);
114 ExpectKeyNotFiltered(&character_composer, GDK_KEY_0, 0); 132 ExpectKeyNotFiltered(&character_composer, GDK_KEY_0, 0);
115 ExpectKeyNotFiltered(&character_composer, GDK_KEY_1, 0); 133 ExpectKeyNotFiltered(&character_composer, GDK_KEY_1, 0);
116 ExpectKeyNotFiltered(&character_composer, GDK_KEY_8, 0); 134 ExpectKeyNotFiltered(&character_composer, GDK_KEY_8, 0);
117 } 135 }
118 136
119 TEST(CharacterComposerTest, PartiallyMatchingSequence) { 137 TEST(CharacterComposerTest, PartiallyMatchingSequence) {
120 CharacterComposer character_composer; 138 CharacterComposer character_composer;
121 139
122 // Composition with sequence ['dead acute', '1'] will fail. 140 // Composition with sequence ['dead acute', '1'] will fail.
123 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); 141 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
124 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0)); 142 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0));
125 EXPECT_TRUE(character_composer.composed_character().empty()); 143 EXPECT_TRUE(character_composer.composed_character().empty());
126 144
127 // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail. 145 // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail.
128 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); 146 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
129 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0); 147 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0);
130 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0)); 148 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0));
131 EXPECT_TRUE(character_composer.composed_character().empty()); 149 EXPECT_TRUE(character_composer.composed_character().empty());
132 } 150 }
133 151
134 TEST(CharacterComposerTest, FullyMatchingSequences) { 152 TEST(CharacterComposerTest, FullyMatchingSequences) {
135 CharacterComposer character_composer; 153 CharacterComposer character_composer;
136 // LATIN SMALL LETTER A WITH ACUTE 154 // LATIN SMALL LETTER A WITH ACUTE
137 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, 155 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0,
138 string16(1, 0x00E1)); 156 string16(1, 0x00E1));
139 // LATIN CAPITAL LETTER A WITH ACUTE 157 // LATIN CAPITAL LETTER A WITH ACUTE
140 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_A, 0, 158 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_A, 0,
(...skipping 14 matching lines...) Expand all
155 // LATIN SMALL LETTER C WITH CEDILLA 173 // LATIN SMALL LETTER C WITH CEDILLA
156 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_c, 0, 174 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_c, 0,
157 string16(1, 0x00E7)); 175 string16(1, 0x00E7));
158 } 176 }
159 177
160 TEST(CharacterComposerTest, FullyMatchingSequencesAfterMatchingFailure) { 178 TEST(CharacterComposerTest, FullyMatchingSequencesAfterMatchingFailure) {
161 CharacterComposer character_composer; 179 CharacterComposer character_composer;
162 // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail. 180 // Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail.
163 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); 181 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
164 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0); 182 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0);
165 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0)); 183 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0));
166 EXPECT_TRUE(character_composer.composed_character().empty()); 184 EXPECT_TRUE(character_composer.composed_character().empty());
167 // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE 185 // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
168 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, 186 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute,
169 GDK_KEY_dead_circumflex, GDK_KEY_a, 0, 187 GDK_KEY_dead_circumflex, GDK_KEY_a, 0,
170 string16(1, 0x1EA5)); 188 string16(1, 0x1EA5));
171 } 189 }
172 190
173 TEST(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) { 191 TEST(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) {
174 CharacterComposer character_composer; 192 CharacterComposer character_composer;
175 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, 193 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0,
176 string16(1, 0x00E1)); 194 string16(1, 0x00E1));
177 character_composer.Reset(); 195 character_composer.Reset();
178 EXPECT_TRUE(character_composer.composed_character().empty()); 196 EXPECT_TRUE(character_composer.composed_character().empty());
179 } 197 }
180 198
181 TEST(CharacterComposerTest, CompositionStateIsClearedAfterReset) { 199 TEST(CharacterComposerTest, CompositionStateIsClearedAfterReset) {
182 CharacterComposer character_composer; 200 CharacterComposer character_composer;
183 // Even though sequence ['dead acute', 'a'] will compose 'a with acute', 201 // Even though sequence ['dead acute', 'a'] will compose 'a with acute',
184 // no character is composed here because of reset. 202 // no character is composed here because of reset.
185 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); 203 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
186 character_composer.Reset(); 204 character_composer.Reset();
187 EXPECT_FALSE(character_composer.FilterKeyPress(GDK_KEY_a, 0)); 205 EXPECT_FALSE(character_composer.FilterKeyPress(GDK_KEY_a, 0, 0));
188 EXPECT_TRUE(character_composer.composed_character().empty()); 206 EXPECT_TRUE(character_composer.composed_character().empty());
189 } 207 }
190 208
191 TEST(CharacterComposerTest, KeySequenceCompositionPreedit) { 209 TEST(CharacterComposerTest, KeySequenceCompositionPreedit) {
192 CharacterComposer character_composer; 210 CharacterComposer character_composer;
193 // LATIN SMALL LETTER A WITH ACUTE 211 // LATIN SMALL LETTER A WITH ACUTE
194 // preedit_string() is always empty in key sequence composition mode. 212 // preedit_string() is always empty in key sequence composition mode.
195 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); 213 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
196 EXPECT_TRUE(character_composer.preedit_string().empty()); 214 EXPECT_TRUE(character_composer.preedit_string().empty());
197 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_a, 0)); 215 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_a, 0, 0));
198 EXPECT_EQ(string16(1, 0x00E1), character_composer.composed_character()); 216 EXPECT_EQ(string16(1, 0x00E1), character_composer.composed_character());
199 EXPECT_TRUE(character_composer.preedit_string().empty()); 217 EXPECT_TRUE(character_composer.preedit_string().empty());
200 } 218 }
201 219
202 // ComposeCheckerWithCompactTable in character_composer.cc is depending on the 220 // ComposeCheckerWithCompactTable in character_composer.cc is depending on the
203 // assumption that the data in gtkimcontextsimpleseqs.h is correctly ordered. 221 // assumption that the data in gtkimcontextsimpleseqs.h is correctly ordered.
204 TEST(CharacterComposerTest, MainTableIsCorrectlyOrdered) { 222 TEST(CharacterComposerTest, MainTableIsCorrectlyOrdered) {
205 // This file is included here intentionally, instead of the top of the file, 223 // This file is included here intentionally, instead of the top of the file,
206 // because including this file at the top of the file will define a 224 // because including this file at the top of the file will define a
207 // global constant and contaminate the global namespace. 225 // global constant and contaminate the global namespace.
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 393
376 // Backspace twice after Ctrl+Shift+U and 3. 394 // Backspace twice after Ctrl+Shift+U and 3.
377 ExpectKeyFiltered(&character_composer, GDK_KEY_U, 395 ExpectKeyFiltered(&character_composer, GDK_KEY_U,
378 EF_SHIFT_DOWN | EF_CONTROL_DOWN); 396 EF_SHIFT_DOWN | EF_CONTROL_DOWN);
379 ExpectKeyFiltered(&character_composer, GDK_KEY_3, 0); 397 ExpectKeyFiltered(&character_composer, GDK_KEY_3, 0);
380 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0); 398 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0);
381 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0); 399 ExpectKeyFiltered(&character_composer, GDK_KEY_BackSpace, 0);
382 ExpectKeyNotFiltered(&character_composer, GDK_KEY_3, 0); 400 ExpectKeyNotFiltered(&character_composer, GDK_KEY_3, 0);
383 } 401 }
384 402
403 TEST(CharacterComposerTest, HexadecimalCompositionPreeditWithModifierPressed) {
404 // This test case supposes X Window System uses 101 keyboard layout.
405 CharacterComposer character_composer;
406 const int control_shift = EF_CONTROL_DOWN | EF_SHIFT_DOWN;
407 // HIRAGANA LETTER A (U+3042)
408 ExpectKeyFilteredWithKeycode(&character_composer,
409 GDK_KEY_U, 30, control_shift);
410 EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string());
411 ExpectKeyFilteredWithKeycode(&character_composer,
412 GDK_KEY_numbersign, 12, control_shift);
413 EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string());
414 ExpectKeyFilteredWithKeycode(&character_composer,
415 GDK_KEY_parenright, 19, control_shift);
416 EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string());
417 ExpectKeyFilteredWithKeycode(&character_composer,
418 GDK_KEY_dollar, 13, control_shift);
419 EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string());
420 ExpectKeyFilteredWithKeycode(&character_composer,
421 GDK_KEY_A, 38, control_shift);
422 EXPECT_EQ(ASCIIToUTF16("u304a"), character_composer.preedit_string());
423 ExpectKeyFilteredWithKeycode(&character_composer,
424 GDK_KEY_BackSpace, 22, control_shift);
425 EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string());
426 ExpectKeyFilteredWithKeycode(&character_composer,
427 GDK_KEY_at, 11, control_shift);
428 EXPECT_EQ(ASCIIToUTF16("u3042"), character_composer.preedit_string());
429 ExpectCharacterComposedWithKeyCode(&character_composer,
430 GDK_KEY_Return, 36,
431 control_shift,
432 string16(1, 0x3042));
433 EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string());
434
435 // Sequence with an ignored character (control + shift + 'x') and Escape.
436 ExpectKeyFilteredWithKeycode(&character_composer,
437 GDK_KEY_U, 30, control_shift);
438 EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string());
439 ExpectKeyFilteredWithKeycode(&character_composer,
440 GDK_KEY_numbersign, 12, control_shift);
441 EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string());
442 ExpectKeyFilteredWithKeycode(&character_composer,
443 GDK_KEY_parenright, 19, control_shift);
444 EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string());
445 ExpectKeyFilteredWithKeycode(&character_composer,
446 GDK_KEY_X, 53, control_shift);
447 EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string());
448 ExpectKeyFilteredWithKeycode(&character_composer,
449 GDK_KEY_dollar, 13, control_shift);
450 EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string());
451 ExpectKeyFilteredWithKeycode(&character_composer,
452 GDK_KEY_at, 11, control_shift);
453 EXPECT_EQ(ASCIIToUTF16("u3042"), character_composer.preedit_string());
454 ExpectKeyFilteredWithKeycode(&character_composer,
455 GDK_KEY_Escape, 9, control_shift);
456 EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string());
457 }
458
385 TEST(CharacterComposerTest, InvalidHexadecimalSequence) { 459 TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
386 CharacterComposer character_composer; 460 CharacterComposer character_composer;
387 // U+FFFFFFFF 461 // U+FFFFFFFF
388 ExpectKeyFiltered(&character_composer, GDK_KEY_U, 462 ExpectKeyFiltered(&character_composer, GDK_KEY_U,
389 EF_SHIFT_DOWN | EF_CONTROL_DOWN); 463 EF_SHIFT_DOWN | EF_CONTROL_DOWN);
390 for (int i = 0; i < 8; ++i) 464 for (int i = 0; i < 8; ++i)
391 ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0); 465 ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0);
392 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0)); 466 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
393 EXPECT_TRUE(character_composer.composed_character().empty()); 467 EXPECT_TRUE(character_composer.composed_character().empty());
394 468
395 // U+0000 (Actually, this is a valid unicode character, but we don't 469 // U+0000 (Actually, this is a valid unicode character, but we don't
396 // compose a string with a character '\0') 470 // compose a string with a character '\0')
397 ExpectKeyFiltered(&character_composer, GDK_KEY_U, 471 ExpectKeyFiltered(&character_composer, GDK_KEY_U,
398 EF_SHIFT_DOWN | EF_CONTROL_DOWN); 472 EF_SHIFT_DOWN | EF_CONTROL_DOWN);
399 for (int i = 0; i < 4; ++i) 473 for (int i = 0; i < 4; ++i)
400 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); 474 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0);
401 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0)); 475 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
402 EXPECT_TRUE(character_composer.composed_character().empty()); 476 EXPECT_TRUE(character_composer.composed_character().empty());
403 477
404 // U+10FFFF 478 // U+10FFFF
405 ExpectKeyFiltered(&character_composer, GDK_KEY_U, 479 ExpectKeyFiltered(&character_composer, GDK_KEY_U,
406 EF_SHIFT_DOWN | EF_CONTROL_DOWN); 480 EF_SHIFT_DOWN | EF_CONTROL_DOWN);
407 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); 481 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0);
408 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); 482 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0);
409 for (int i = 0; i < 4; ++i) 483 for (int i = 0; i < 4; ++i)
410 ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0); 484 ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0);
411 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0)); 485 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
412 EXPECT_TRUE(character_composer.composed_character().empty()); 486 EXPECT_TRUE(character_composer.composed_character().empty());
413 487
414 // U+110000 488 // U+110000
415 ExpectKeyFiltered(&character_composer, GDK_KEY_U, 489 ExpectKeyFiltered(&character_composer, GDK_KEY_U,
416 EF_SHIFT_DOWN | EF_CONTROL_DOWN); 490 EF_SHIFT_DOWN | EF_CONTROL_DOWN);
417 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); 491 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0);
418 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0); 492 ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0);
419 for (int i = 0; i < 4; ++i) 493 for (int i = 0; i < 4; ++i)
420 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0); 494 ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0);
421 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0)); 495 EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
422 EXPECT_TRUE(character_composer.composed_character().empty()); 496 EXPECT_TRUE(character_composer.composed_character().empty());
423 } 497 }
424 498
425 TEST(CharacterComposerTest, HexadecimalSequenceAndDeadKey) { 499 TEST(CharacterComposerTest, HexadecimalSequenceAndDeadKey) {
426 CharacterComposer character_composer; 500 CharacterComposer character_composer;
427 // LATIN SMALL LETTER A WITH ACUTE 501 // LATIN SMALL LETTER A WITH ACUTE
428 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0, 502 ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0,
429 string16(1, 0x00E1)); 503 string16(1, 0x00E1));
430 // HIRAGANA LETTER A (U+3042) with dead_acute ignored. 504 // HIRAGANA LETTER A (U+3042) with dead_acute ignored.
431 ExpectKeyFiltered(&character_composer, GDK_KEY_U, 505 ExpectKeyFiltered(&character_composer, GDK_KEY_U,
432 EF_SHIFT_DOWN | EF_CONTROL_DOWN); 506 EF_SHIFT_DOWN | EF_CONTROL_DOWN);
433 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0, 507 ExpectCharacterComposed(&character_composer, GDK_KEY_3, GDK_KEY_0,
434 GDK_KEY_dead_acute, GDK_KEY_4, GDK_KEY_2, 508 GDK_KEY_dead_acute, GDK_KEY_4, GDK_KEY_2,
435 GDK_KEY_space, 0, string16(1, 0x3042)); 509 GDK_KEY_space, 0, string16(1, 0x3042));
436 // LATIN CAPITAL LETTER U WITH ACUTE while 'U' is pressed with Ctrl+Shift. 510 // LATIN CAPITAL LETTER U WITH ACUTE while 'U' is pressed with Ctrl+Shift.
437 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0); 511 ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
438 EXPECT_TRUE(character_composer.FilterKeyPress( 512 EXPECT_TRUE(character_composer.FilterKeyPress(
439 GDK_KEY_U, EF_SHIFT_DOWN | EF_CONTROL_DOWN)); 513 GDK_KEY_U, 0, EF_SHIFT_DOWN | EF_CONTROL_DOWN));
440 EXPECT_EQ(string16(1, 0x00DA), character_composer.composed_character()); 514 EXPECT_EQ(string16(1, 0x00DA), character_composer.composed_character());
441 } 515 }
442 516
443 } // namespace ui 517 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/ime/character_composer.cc ('k') | ui/base/ime/input_method_ibus.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698