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

Unified 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/ime/character_composer_unittest.cc
diff --git a/ui/base/ime/character_composer_unittest.cc b/ui/base/ime/character_composer_unittest.cc
index 8f93da271283b182e3a28908c7a64bfe9b4d3763..e12a121fe4f22668a91537495834b7ce77ef1dbd 100644
--- a/ui/base/ime/character_composer_unittest.cc
+++ b/ui/base/ime/character_composer_unittest.cc
@@ -17,16 +17,25 @@ namespace {
// Expects key is not filtered and no character is composed.
void ExpectKeyNotFiltered(CharacterComposer* character_composer,
uint key,
- uint flags) {
- EXPECT_FALSE(character_composer->FilterKeyPress(key, flags));
+ int flags) {
+ EXPECT_FALSE(character_composer->FilterKeyPress(key, 0, flags));
EXPECT_TRUE(character_composer->composed_character().empty());
}
// Expects key is filtered and no character is composed.
void ExpectKeyFiltered(CharacterComposer* character_composer,
uint key,
- uint flags) {
- EXPECT_TRUE(character_composer->FilterKeyPress(key, flags));
+ int flags) {
+ EXPECT_TRUE(character_composer->FilterKeyPress(key, 0, flags));
+ EXPECT_TRUE(character_composer->composed_character().empty());
+}
+
+// Expects key is filtered and no character is composed.
+void ExpectKeyFilteredWithKeycode(CharacterComposer* character_composer,
+ uint key,
+ uint keycode,
+ int flags) {
+ EXPECT_TRUE(character_composer->FilterKeyPress(key, keycode, flags));
EXPECT_TRUE(character_composer->composed_character().empty());
}
@@ -34,10 +43,10 @@ void ExpectKeyFiltered(CharacterComposer* character_composer,
void ExpectCharacterComposed(CharacterComposer* character_composer,
uint key1,
uint key2,
- uint flags,
+ int flags,
const string16& expected_character) {
ExpectKeyFiltered(character_composer, key1, flags);
- EXPECT_TRUE(character_composer->FilterKeyPress(key2, flags));
+ EXPECT_TRUE(character_composer->FilterKeyPress(key2, 0, flags));
EXPECT_EQ(expected_character, character_composer->composed_character());
}
@@ -46,7 +55,7 @@ void ExpectCharacterComposed(CharacterComposer* character_composer,
uint key1,
uint key2,
uint key3,
- uint flags,
+ int flags,
const string16& expected_character) {
ExpectKeyFiltered(character_composer, key1, flags);
ExpectCharacterComposed(character_composer, key2, key3, flags,
@@ -60,7 +69,7 @@ void ExpectCharacterComposed(CharacterComposer* character_composer,
uint key2,
uint key3,
uint key4,
- uint flags,
+ int flags,
const string16& expected_character) {
ExpectKeyFiltered(character_composer, key1, flags);
ExpectCharacterComposed(character_composer, key2, key3, key4, flags,
@@ -75,7 +84,7 @@ void ExpectCharacterComposed(CharacterComposer* character_composer,
uint key3,
uint key4,
uint key5,
- uint flags,
+ int flags,
const string16& expected_character) {
ExpectKeyFiltered(character_composer, key1, flags);
ExpectCharacterComposed(character_composer, key2, key3, key4, key5, flags,
@@ -91,13 +100,22 @@ void ExpectCharacterComposed(CharacterComposer* character_composer,
uint key4,
uint key5,
uint key6,
- uint flags,
+ int flags,
const string16& expected_character) {
ExpectKeyFiltered(character_composer, key1, flags);
ExpectCharacterComposed(character_composer, key2, key3, key4, key5, key6,
flags, expected_character);
}
+// Expects |expected_character| is composed after sequence [{key1, keycode1}].
+void ExpectCharacterComposedWithKeyCode(CharacterComposer* character_composer,
+ uint key1, uint keycode1,
+ int flags,
+ const string16& expected_character) {
+ EXPECT_TRUE(character_composer->FilterKeyPress(key1, keycode1, flags));
+ EXPECT_EQ(expected_character, character_composer->composed_character());
+}
+
} // namespace
TEST(CharacterComposerTest, InitialState) {
@@ -121,13 +139,13 @@ TEST(CharacterComposerTest, PartiallyMatchingSequence) {
// Composition with sequence ['dead acute', '1'] will fail.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0));
+ EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0));
EXPECT_TRUE(character_composer.composed_character().empty());
// Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0));
+ EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0));
EXPECT_TRUE(character_composer.composed_character().empty());
}
@@ -162,7 +180,7 @@ TEST(CharacterComposerTest, FullyMatchingSequencesAfterMatchingFailure) {
// Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0));
+ EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0));
EXPECT_TRUE(character_composer.composed_character().empty());
// LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute,
@@ -184,7 +202,7 @@ TEST(CharacterComposerTest, CompositionStateIsClearedAfterReset) {
// no character is composed here because of reset.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
character_composer.Reset();
- EXPECT_FALSE(character_composer.FilterKeyPress(GDK_KEY_a, 0));
+ EXPECT_FALSE(character_composer.FilterKeyPress(GDK_KEY_a, 0, 0));
EXPECT_TRUE(character_composer.composed_character().empty());
}
@@ -194,7 +212,7 @@ TEST(CharacterComposerTest, KeySequenceCompositionPreedit) {
// preedit_string() is always empty in key sequence composition mode.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
EXPECT_TRUE(character_composer.preedit_string().empty());
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_a, 0));
+ EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_a, 0, 0));
EXPECT_EQ(string16(1, 0x00E1), character_composer.composed_character());
EXPECT_TRUE(character_composer.preedit_string().empty());
}
@@ -382,6 +400,62 @@ TEST(CharacterComposerTest, CancelHexadecimalCompositionWithBackspace) {
ExpectKeyNotFiltered(&character_composer, GDK_KEY_3, 0);
}
+TEST(CharacterComposerTest, HexadecimalCompositionPreeditWithModifierPressed) {
+ // This test case supposes X Window System uses 101 keyboard layout.
+ CharacterComposer character_composer;
+ const int control_shift = EF_CONTROL_DOWN | EF_SHIFT_DOWN;
+ // HIRAGANA LETTER A (U+3042)
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_U, 30, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_numbersign, 12, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_parenright, 19, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_dollar, 13, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_A, 38, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u304a"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_BackSpace, 22, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_at, 11, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u3042"), character_composer.preedit_string());
+ ExpectCharacterComposedWithKeyCode(&character_composer,
+ GDK_KEY_Return, 36,
+ control_shift,
+ string16(1, 0x3042));
+ EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string());
+
+ // Sequence with an ignored character (control + shift + 'x') and Escape.
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_U, 30, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_numbersign, 12, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u3"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_parenright, 19, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_X, 53, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u30"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_dollar, 13, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u304"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_at, 11, control_shift);
+ EXPECT_EQ(ASCIIToUTF16("u3042"), character_composer.preedit_string());
+ ExpectKeyFilteredWithKeycode(&character_composer,
+ GDK_KEY_Escape, 9, control_shift);
+ EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string());
+}
+
TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
CharacterComposer character_composer;
// U+FFFFFFFF
@@ -389,7 +463,7 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
EF_SHIFT_DOWN | EF_CONTROL_DOWN);
for (int i = 0; i < 8; ++i)
ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0));
+ EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
EXPECT_TRUE(character_composer.composed_character().empty());
// U+0000 (Actually, this is a valid unicode character, but we don't
@@ -398,7 +472,7 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
EF_SHIFT_DOWN | EF_CONTROL_DOWN);
for (int i = 0; i < 4; ++i)
ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0));
+ EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
EXPECT_TRUE(character_composer.composed_character().empty());
// U+10FFFF
@@ -408,7 +482,7 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0);
for (int i = 0; i < 4; ++i)
ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0));
+ EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
EXPECT_TRUE(character_composer.composed_character().empty());
// U+110000
@@ -418,7 +492,7 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0);
for (int i = 0; i < 4; ++i)
ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0));
+ EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
EXPECT_TRUE(character_composer.composed_character().empty());
}
@@ -436,7 +510,7 @@ TEST(CharacterComposerTest, HexadecimalSequenceAndDeadKey) {
// LATIN CAPITAL LETTER U WITH ACUTE while 'U' is pressed with Ctrl+Shift.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
EXPECT_TRUE(character_composer.FilterKeyPress(
- GDK_KEY_U, EF_SHIFT_DOWN | EF_CONTROL_DOWN));
+ GDK_KEY_U, 0, EF_SHIFT_DOWN | EF_CONTROL_DOWN));
EXPECT_EQ(string16(1, 0x00DA), character_composer.composed_character());
}
« 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