2895
2974
EXPECT_EQ(commands::FULL_KATAKANA, command.output().mode());
2977
TEST_F(SessionTest, Issue2791640) {
2978
// This is a unittest against http://b/2791640.
2979
// Existing preedit should be committed when IME is turned off.
2981
scoped_ptr<Session> session(handler_->NewSession());
2982
InitSessionToPrecomposition(session.get());
2984
commands::Command command;
2985
SendKey("a", session.get(), &command);
2989
SendKey("hankaku/zenkaku", session.get(), &command);
2991
ASSERT_TRUE(command.output().consumed());
2993
ASSERT_TRUE(command.output().has_result());
2995
EXPECT_EQ("\xE3\x81\x82", command.output().result().value());
2996
EXPECT_EQ(commands::DIRECT, command.output().mode());
2998
ASSERT_FALSE(command.output().has_preedit());
3001
TEST_F(SessionTest, CommitExistingPreeditWhenIMEIsTurnedOff) {
3002
// Existing preedit should be committed when IME is turned off.
3004
// Check "hankaku/zenkaku"
3006
scoped_ptr<Session> session(handler_->NewSession());
3007
InitSessionToPrecomposition(session.get());
3009
commands::Command command;
3010
SendKey("a", session.get(), &command);
3014
SendKey("hankaku/zenkaku", session.get(), &command);
3016
ASSERT_TRUE(command.output().consumed());
3018
ASSERT_TRUE(command.output().has_result());
3020
EXPECT_EQ("\xE3\x81\x82", command.output().result().value());
3021
EXPECT_EQ(commands::DIRECT, command.output().mode());
3023
ASSERT_FALSE(command.output().has_preedit());
3028
scoped_ptr<Session> session(handler_->NewSession());
3029
InitSessionToPrecomposition(session.get());
3031
commands::Command command;
3032
SendKey("a", session.get(), &command);
3036
SendKey("kanji", session.get(), &command);
3038
ASSERT_TRUE(command.output().consumed());
3040
ASSERT_TRUE(command.output().has_result());
3042
EXPECT_EQ("\xE3\x81\x82", command.output().result().value());
3043
EXPECT_EQ(commands::DIRECT, command.output().mode());
3045
ASSERT_FALSE(command.output().has_preedit());
3050
TEST_F(SessionTest, SendKeyDirectInputStateTest) {
3051
// InputModeChange commands from direct mode are supported only for Windows
3054
scoped_ptr<Session> session(handler_->NewSession());
3055
InitSessionToPrecomposition(session.get());
3056
commands::Command command;
3057
session->IMEOff(&command);
3059
config::Config config;
3060
config::ConfigHandler::GetConfig(&config);
3061
const string custom_keymap_table =
3062
"status\tkey\tcommand\n"
3063
"DirectInput\tHiragana\tInputModeHiragana\n";
3064
config.set_session_keymap(config::Config::CUSTOM);
3065
config.set_custom_keymap_table(custom_keymap_table);
3066
config::ConfigHandler::SetConfig(config);
3068
session->ReloadConfig();
3071
EXPECT_TRUE(SendKey("Hiragana", session.get(), &command));
3072
SendKey("a", session.get(), &command);
3073
EXPECT_TRUE(command.output().has_preedit());
3074
EXPECT_EQ(1, command.output().preedit().segment_size());
3076
EXPECT_EQ("\xE3\x81\x82", command.output().preedit().segment(0).key());
3077
#endif // OS_WINDOWS
3080
TEST_F(SessionTest, IMEOnWithModeTest) {
3082
scoped_ptr<Session> session(handler_->NewSession());
3083
InitSessionToPrecomposition(session.get());
3084
commands::Command command;
3085
session->IMEOff(&command);
3087
command.mutable_input()->mutable_key()->set_mode(
3088
commands::HIRAGANA);
3089
EXPECT_TRUE(session->IMEOn(&command));
3090
EXPECT_TRUE(command.output().has_consumed());
3091
EXPECT_TRUE(command.output().consumed());
3092
EXPECT_TRUE(command.output().has_mode());
3093
EXPECT_EQ(commands::HIRAGANA,
3094
command.output().mode());
3095
SendKey("a", session.get(), &command);
3096
EXPECT_TRUE(command.output().has_preedit());
3097
EXPECT_EQ(1, command.output().preedit().segment_size());
3099
EXPECT_EQ("\xE3\x81\x82", command.output().preedit().segment(0).key());
3102
scoped_ptr<Session> session(handler_->NewSession());
3103
InitSessionToPrecomposition(session.get());
3104
commands::Command command;
3105
session->IMEOff(&command);
3107
command.mutable_input()->mutable_key()->set_mode(
3108
commands::FULL_KATAKANA);
3109
EXPECT_TRUE(session->IMEOn(&command));
3110
EXPECT_TRUE(command.output().has_mode());
3111
EXPECT_EQ(commands::FULL_KATAKANA,
3112
command.output().mode());
3113
SendKey("a", session.get(), &command);
3114
EXPECT_TRUE(command.output().has_preedit());
3115
EXPECT_EQ(1, command.output().preedit().segment_size());
3117
EXPECT_EQ("\xE3\x82\xA2", command.output().preedit().segment(0).key());
3120
scoped_ptr<Session> session(handler_->NewSession());
3121
InitSessionToPrecomposition(session.get());
3122
commands::Command command;
3123
session->IMEOff(&command);
3125
command.mutable_input()->mutable_key()->set_mode(
3126
commands::HALF_KATAKANA);
3127
EXPECT_TRUE(session->IMEOn(&command));
3128
EXPECT_TRUE(command.output().has_mode());
3129
EXPECT_EQ(commands::HALF_KATAKANA,
3130
command.output().mode());
3131
SendKey("a", session.get(), &command);
3132
EXPECT_TRUE(command.output().has_preedit());
3133
EXPECT_EQ(1, command.output().preedit().segment_size());
3134
// "ア" (half-width Katakana)
3135
EXPECT_EQ("\xEF\xBD\xB1", command.output().preedit().segment(0).key());
3138
scoped_ptr<Session> session(handler_->NewSession());
3139
InitSessionToPrecomposition(session.get());
3140
commands::Command command;
3141
session->IMEOff(&command);
3143
command.mutable_input()->mutable_key()->set_mode(
3144
commands::FULL_ASCII);
3145
EXPECT_TRUE(session->IMEOn(&command));
3146
EXPECT_TRUE(command.output().has_mode());
3147
EXPECT_EQ(commands::FULL_ASCII,
3148
command.output().mode());
3149
SendKey("a", session.get(), &command);
3150
EXPECT_TRUE(command.output().has_preedit());
3151
EXPECT_EQ(1, command.output().preedit().segment_size());
3153
EXPECT_EQ("\xEF\xBD\x81", command.output().preedit().segment(0).key());
3156
scoped_ptr<Session> session(handler_->NewSession());
3157
InitSessionToPrecomposition(session.get());
3158
commands::Command command;
3159
session->IMEOff(&command);
3161
command.mutable_input()->mutable_key()->set_mode(
3162
commands::HALF_ASCII);
3163
EXPECT_TRUE(session->IMEOn(&command));
3164
EXPECT_TRUE(command.output().has_mode());
3165
EXPECT_EQ(commands::HALF_ASCII,
3166
command.output().mode());
3167
SendKey("a", session.get(), &command);
3168
EXPECT_TRUE(command.output().has_preedit());
3169
EXPECT_EQ(1, command.output().preedit().segment_size());
3171
EXPECT_EQ("a", command.output().preedit().segment(0).key());
3175
TEST_F(SessionTest, InputModeConsumed) {
3176
scoped_ptr<Session> session(handler_->NewSession());
3177
InitSessionToPrecomposition(session.get());
3178
commands::Command command;
3179
EXPECT_TRUE(session->InputModeHiragana(&command));
3180
EXPECT_TRUE(command.output().consumed());
3181
EXPECT_EQ(mozc::commands::HIRAGANA, command.output().mode());
3183
EXPECT_TRUE(session->InputModeFullKatakana(&command));
3184
EXPECT_TRUE(command.output().consumed());
3185
EXPECT_EQ(mozc::commands::FULL_KATAKANA, command.output().mode());
3187
EXPECT_TRUE(session->InputModeHalfKatakana(&command));
3188
EXPECT_TRUE(command.output().consumed());
3189
EXPECT_EQ(mozc::commands::HALF_KATAKANA, command.output().mode());
3191
EXPECT_TRUE(session->InputModeFullASCII(&command));
3192
EXPECT_TRUE(command.output().consumed());
3193
EXPECT_EQ(mozc::commands::FULL_ASCII, command.output().mode());
3195
EXPECT_TRUE(session->InputModeHalfASCII(&command));
3196
EXPECT_TRUE(command.output().consumed());
3197
EXPECT_EQ(mozc::commands::HALF_ASCII, command.output().mode());
3200
TEST_F(SessionTest, InputModeConsumedForTestSendKey) {
3201
// This test is only for Windows, because InputModeHiragana bound
3202
// with Hiragana key is only supported on Windows yet.
3204
config::Config config;
3205
config::ConfigHandler::GetConfig(&config);
3206
config.set_session_keymap(config::Config::MSIME);
3207
config::ConfigHandler::SetConfig(config);
3209
scoped_ptr<Session> session(handler_->NewSession());
3210
InitSessionToPrecomposition(session.get());
3211
ASSERT_EQ(config::Config::MSIME, GET_CONFIG(session_keymap));
3212
// In MSIME keymap, Hiragana is assigned for
3213
// ImputModeHiragana in Precomposition.
3215
commands::Command command;
3216
EXPECT_TRUE(TestSendKey("Hiragana", session.get(), &command));
3217
EXPECT_TRUE(command.output().consumed());
3218
#endif // OS_WINDOWS
3221
TEST_F(SessionTest, InputModeOutputHasComposition) {
3222
scoped_ptr<Session> session(handler_->NewSession());
3223
InitSessionToPrecomposition(session.get());
3224
commands::Command command;
3225
SendKey("a", session.get(), &command);
3226
EXPECT_TRUE(command.output().has_preedit());
3227
EXPECT_EQ(1, command.output().preedit().segment_size());
3229
EXPECT_EQ("\xE3\x81\x82", command.output().preedit().segment(0).key());
3232
EXPECT_TRUE(session->InputModeHiragana(&command));
3233
EXPECT_TRUE(command.output().consumed());
3234
EXPECT_EQ(mozc::commands::HIRAGANA, command.output().mode());
3235
EXPECT_TRUE(command.output().has_preedit());
3236
EXPECT_EQ(1, command.output().preedit().segment_size());
3238
EXPECT_EQ("\xE3\x81\x82", command.output().preedit().segment(0).key());
3241
EXPECT_TRUE(session->InputModeFullKatakana(&command));
3242
EXPECT_TRUE(command.output().consumed());
3243
EXPECT_EQ(mozc::commands::FULL_KATAKANA, command.output().mode());
3244
EXPECT_TRUE(command.output().has_preedit());
3245
EXPECT_EQ(1, command.output().preedit().segment_size());
3247
EXPECT_EQ("\xE3\x81\x82", command.output().preedit().segment(0).key());
3250
EXPECT_TRUE(session->InputModeHalfKatakana(&command));
3251
EXPECT_TRUE(command.output().consumed());
3252
EXPECT_EQ(mozc::commands::HALF_KATAKANA, command.output().mode());
3253
EXPECT_TRUE(command.output().has_preedit());
3254
EXPECT_EQ(1, command.output().preedit().segment_size());
3256
EXPECT_EQ("\xE3\x81\x82", command.output().preedit().segment(0).key());
3259
EXPECT_TRUE(session->InputModeFullASCII(&command));
3260
EXPECT_TRUE(command.output().consumed());
3261
EXPECT_EQ(mozc::commands::FULL_ASCII, command.output().mode());
3262
EXPECT_TRUE(command.output().has_preedit());
3263
EXPECT_EQ(1, command.output().preedit().segment_size());
3265
EXPECT_EQ("\xE3\x81\x82", command.output().preedit().segment(0).key());
3268
EXPECT_TRUE(session->InputModeHalfASCII(&command));
3269
EXPECT_TRUE(command.output().consumed());
3270
EXPECT_EQ(mozc::commands::HALF_ASCII, command.output().mode());
3271
EXPECT_TRUE(command.output().has_preedit());
3272
EXPECT_EQ(1, command.output().preedit().segment_size());
3274
EXPECT_EQ("\xE3\x81\x82", command.output().preedit().segment(0).key());
3277
TEST_F(SessionTest, InputModeOutputHasCandidates) {
3278
scoped_ptr<Session> session(handler_->NewSession());
3279
InitSessionToPrecomposition(session.get());
3282
SetAiueo(&segments);
3283
convertermock_->SetStartConversion(&segments, true);
3285
commands::Command command;
3286
InsertCharacterChars("aiueo", session.get(), &command);
3289
session->Convert(&command);
3290
session->ConvertNext(&command);
3291
EXPECT_TRUE(command.output().has_candidates());
3292
EXPECT_TRUE(command.output().has_preedit());
3295
EXPECT_TRUE(session->InputModeHiragana(&command));
3296
EXPECT_TRUE(command.output().consumed());
3297
EXPECT_EQ(mozc::commands::HIRAGANA, command.output().mode());
3298
EXPECT_TRUE(command.output().has_candidates());
3299
EXPECT_TRUE(command.output().has_preedit());
3302
EXPECT_TRUE(session->InputModeFullKatakana(&command));
3303
EXPECT_TRUE(command.output().consumed());
3304
EXPECT_EQ(mozc::commands::FULL_KATAKANA, command.output().mode());
3305
EXPECT_TRUE(command.output().has_candidates());
3306
EXPECT_TRUE(command.output().has_preedit());
3309
EXPECT_TRUE(session->InputModeHalfKatakana(&command));
3310
EXPECT_TRUE(command.output().consumed());
3311
EXPECT_EQ(mozc::commands::HALF_KATAKANA, command.output().mode());
3312
EXPECT_TRUE(command.output().has_candidates());
3313
EXPECT_TRUE(command.output().has_preedit());
3316
EXPECT_TRUE(session->InputModeFullASCII(&command));
3317
EXPECT_TRUE(command.output().consumed());
3318
EXPECT_EQ(mozc::commands::FULL_ASCII, command.output().mode());
3319
EXPECT_TRUE(command.output().has_candidates());
3320
EXPECT_TRUE(command.output().has_preedit());
3323
EXPECT_TRUE(session->InputModeHalfASCII(&command));
3324
EXPECT_TRUE(command.output().consumed());
3325
EXPECT_EQ(mozc::commands::HALF_ASCII, command.output().mode());
3326
EXPECT_TRUE(command.output().has_candidates());
3327
EXPECT_TRUE(command.output().has_preedit());
2898
3331
// since History segments are almost hidden from
2900
3333
class ConverterMockForReset : public ConverterMock {