31
31
32
32
#include < unistd.h> // for getpid()
33
33
34
+ #include " base/coordinates.h"
34
35
#include " protocol/renderer_command.pb.h"
35
36
#include " renderer/renderer_mock.h"
36
37
#include " testing/base/public/gmock.h"
@@ -110,6 +111,40 @@ MATCHER_P(VisibilityEq, visibility, "") {
110
111
return true ;
111
112
}
112
113
114
+ MATCHER_P (PreeditRectangleEq, rect, " " ) {
115
+ if (!arg.has_preedit_rectangle ()) {
116
+ *result_listener
117
+ << " RendererCommand::preedit_rectangle does not exist" ;
118
+ return false ;
119
+ }
120
+ const auto &actual_rect = arg.preedit_rectangle ();
121
+ if (rect.Left () != actual_rect.left ()) {
122
+ *result_listener << " left field does not match\n "
123
+ << " expected: " << rect.Left () << " \n "
124
+ << " actual: " << actual_rect.left ();
125
+ return false ;
126
+ }
127
+ if (rect.Top () != actual_rect.top ()) {
128
+ *result_listener << " top field does not match\n "
129
+ << " expected: " << rect.Top () << " \n "
130
+ << " actual: " << actual_rect.top ();
131
+ return false ;
132
+ }
133
+ if (rect.Right () != actual_rect.right ()) {
134
+ *result_listener << " right field does not match\n "
135
+ << " expected: " << rect.Right () << " \n "
136
+ << " actual: " << actual_rect.right ();
137
+ return false ;
138
+ }
139
+ if (rect.Bottom () != actual_rect.bottom ()) {
140
+ *result_listener << " bottom field does not match\n "
141
+ << " expected: " << rect.Bottom () << " \n "
142
+ << " actual: " << actual_rect.bottom ();
143
+ return false ;
144
+ }
145
+ return true ;
146
+ }
147
+
113
148
MATCHER_P (OutputEq, expected, " " ) {
114
149
if (expected.Utf8DebugString () != arg.Utf8DebugString ()) {
115
150
*result_listener
@@ -129,47 +164,73 @@ MATCHER_P(OutputEq, expected, "") {
129
164
} // namespace
130
165
131
166
TEST (GtkCandidateWindowHandlerTest, SendUpdateCommandTest) {
167
+ const Rect kExpectedCursorArea (10 , 20 , 200 , 100 );
168
+
169
+ IBusEngine engine = {};
170
+ engine.cursor_area .x = kExpectedCursorArea .Left ();
171
+ engine.cursor_area .y = kExpectedCursorArea .Top ();
172
+ engine.cursor_area .width = kExpectedCursorArea .Width ();
173
+ engine.cursor_area .height = kExpectedCursorArea .Height ();
174
+
132
175
{
133
176
SCOPED_TRACE (" visibility check. false case" );
134
177
Output output;
135
178
RendererMock *renderer_mock = new RendererMock ();
136
179
TestableGtkCandidateWindowHandler gtk_candidate_window_handler (
137
180
renderer_mock);
138
- EXPECT_CALL_EXEC_COMMAND (*renderer_mock, VisibilityEq (false ));
139
- gtk_candidate_window_handler.SendUpdateCommand (output, false );
181
+ EXPECT_CALL_EXEC_COMMAND (*renderer_mock,
182
+ VisibilityEq (false ),
183
+ PreeditRectangleEq (kExpectedCursorArea ));
184
+ gtk_candidate_window_handler.SendUpdateCommand (&engine, output, false );
140
185
}
141
186
{
142
187
SCOPED_TRACE (" visibility check. true case" );
143
188
Output output;
144
189
RendererMock *renderer_mock = new RendererMock ();
145
190
TestableGtkCandidateWindowHandler gtk_candidate_window_handler (
146
191
renderer_mock);
147
- EXPECT_CALL_EXEC_COMMAND (*renderer_mock, VisibilityEq (true ));
148
- gtk_candidate_window_handler.SendUpdateCommand (output, true );
192
+ EXPECT_CALL_EXEC_COMMAND (*renderer_mock,
193
+ VisibilityEq (true ),
194
+ PreeditRectangleEq (kExpectedCursorArea ));
195
+ gtk_candidate_window_handler.SendUpdateCommand (&engine, output, true );
149
196
}
150
197
{
151
198
SCOPED_TRACE (" return value check. false case." );
152
199
Output output;
153
200
RendererMock *renderer_mock = new RendererMock ();
154
201
TestableGtkCandidateWindowHandler gtk_candidate_window_handler (
155
202
renderer_mock);
156
- EXPECT_CALL_EXEC_COMMAND (*renderer_mock, VisibilityEq (true ))
203
+ EXPECT_CALL_EXEC_COMMAND (*renderer_mock,
204
+ VisibilityEq (true ),
205
+ PreeditRectangleEq (kExpectedCursorArea ))
157
206
.WillOnce (Return (false ));
158
- EXPECT_FALSE (gtk_candidate_window_handler.SendUpdateCommand (output, true ));
207
+ EXPECT_FALSE (gtk_candidate_window_handler.SendUpdateCommand (
208
+ &engine, output, true ));
159
209
}
160
210
{
161
211
SCOPED_TRACE (" return value check. true case." );
162
212
Output output;
163
213
RendererMock *renderer_mock = new RendererMock ();
164
214
TestableGtkCandidateWindowHandler gtk_candidate_window_handler (
165
215
renderer_mock);
166
- EXPECT_CALL_EXEC_COMMAND (*renderer_mock, VisibilityEq (true ))
216
+ EXPECT_CALL_EXEC_COMMAND (*renderer_mock,
217
+ VisibilityEq (true ),
218
+ PreeditRectangleEq (kExpectedCursorArea ))
167
219
.WillOnce (Return (true ));
168
- EXPECT_TRUE (gtk_candidate_window_handler.SendUpdateCommand (output, true ));
220
+ EXPECT_TRUE (gtk_candidate_window_handler.SendUpdateCommand (
221
+ &engine, output, true ));
169
222
}
170
223
}
171
224
172
225
TEST (GtkCandidateWindowHandlerTest, UpdateTest) {
226
+ const Rect kExpectedCursorArea (10 , 20 , 200 , 100 );
227
+
228
+ IBusEngine engine = {};
229
+ engine.cursor_area .x = kExpectedCursorArea .Left ();
230
+ engine.cursor_area .y = kExpectedCursorArea .Top ();
231
+ engine.cursor_area .width = kExpectedCursorArea .Width ();
232
+ engine.cursor_area .height = kExpectedCursorArea .Height ();
233
+
173
234
const int sample_idx1 = 0 ;
174
235
const int sample_idx2 = 1 ;
175
236
const char *sample_candidate1 = " SAMPLE_CANDIDATE1" ;
@@ -180,8 +241,10 @@ TEST(GtkCandidateWindowHandlerTest, UpdateTest) {
180
241
RendererMock *renderer_mock = new RendererMock ();
181
242
TestableGtkCandidateWindowHandler gtk_candidate_window_handler (
182
243
renderer_mock);
183
- EXPECT_CALL_EXEC_COMMAND (*renderer_mock, VisibilityEq (false ));
184
- gtk_candidate_window_handler.Update (NULL , output);
244
+ EXPECT_CALL_EXEC_COMMAND (*renderer_mock,
245
+ VisibilityEq (false ),
246
+ PreeditRectangleEq (kExpectedCursorArea ));
247
+ gtk_candidate_window_handler.Update (&engine, output);
185
248
}
186
249
{
187
250
SCOPED_TRACE (" If there is at least one candidate, "
@@ -194,8 +257,10 @@ TEST(GtkCandidateWindowHandlerTest, UpdateTest) {
194
257
RendererMock *renderer_mock = new RendererMock ();
195
258
TestableGtkCandidateWindowHandler gtk_candidate_window_handler (
196
259
renderer_mock);
197
- EXPECT_CALL_EXEC_COMMAND (*renderer_mock, VisibilityEq (true ));
198
- gtk_candidate_window_handler.Update (NULL , output);
260
+ EXPECT_CALL_EXEC_COMMAND (*renderer_mock,
261
+ VisibilityEq (true ),
262
+ PreeditRectangleEq (kExpectedCursorArea ));
263
+ gtk_candidate_window_handler.Update (&engine, output);
199
264
}
200
265
{
201
266
SCOPED_TRACE (" Update last updated output protobuf object." );
@@ -221,29 +286,49 @@ TEST(GtkCandidateWindowHandlerTest, UpdateTest) {
221
286
Property (&RendererCommand::output,
222
287
OutputEq (output2)))
223
288
.WillOnce (Return (true ));
224
- gtk_candidate_window_handler.Update (NULL , output1);
289
+ gtk_candidate_window_handler.Update (&engine , output1);
225
290
EXPECT_THAT (*(gtk_candidate_window_handler.last_update_output_ .get ()),
226
291
OutputEq (output1));
227
- gtk_candidate_window_handler.Update (NULL , output2);
292
+ gtk_candidate_window_handler.Update (&engine , output2);
228
293
EXPECT_THAT (*(gtk_candidate_window_handler.last_update_output_ .get ()),
229
294
OutputEq (output2));
230
295
}
231
296
}
232
297
233
298
TEST (GtkCandidateWindowHandlerTest, HideTest) {
299
+ const Rect kExpectedCursorArea (10 , 20 , 200 , 100 );
300
+
301
+ IBusEngine engine = {};
302
+ engine.cursor_area .x = kExpectedCursorArea .Left ();
303
+ engine.cursor_area .y = kExpectedCursorArea .Top ();
304
+ engine.cursor_area .width = kExpectedCursorArea .Width ();
305
+ engine.cursor_area .height = kExpectedCursorArea .Height ();
306
+
234
307
RendererMock *renderer_mock = new RendererMock ();
235
308
TestableGtkCandidateWindowHandler gtk_candidate_window_handler (
236
309
renderer_mock);
237
- EXPECT_CALL_EXEC_COMMAND (*renderer_mock, VisibilityEq (false ));
238
- gtk_candidate_window_handler.Hide (NULL );
310
+ EXPECT_CALL_EXEC_COMMAND (*renderer_mock,
311
+ VisibilityEq (false ),
312
+ PreeditRectangleEq (kExpectedCursorArea ));
313
+ gtk_candidate_window_handler.Hide (&engine);
239
314
}
240
315
241
316
TEST (GtkCandidateWindowHandlerTest, ShowTest) {
317
+ const Rect kExpectedCursorArea (10 , 20 , 200 , 100 );
318
+
319
+ IBusEngine engine = {};
320
+ engine.cursor_area .x = kExpectedCursorArea .Left ();
321
+ engine.cursor_area .y = kExpectedCursorArea .Top ();
322
+ engine.cursor_area .width = kExpectedCursorArea .Width ();
323
+ engine.cursor_area .height = kExpectedCursorArea .Height ();
324
+
242
325
RendererMock *renderer_mock = new RendererMock ();
243
326
TestableGtkCandidateWindowHandler gtk_candidate_window_handler (
244
327
renderer_mock);
245
- EXPECT_CALL_EXEC_COMMAND (*renderer_mock, VisibilityEq (true ));
246
- gtk_candidate_window_handler.Show (NULL );
328
+ EXPECT_CALL_EXEC_COMMAND (*renderer_mock,
329
+ VisibilityEq (true ),
330
+ PreeditRectangleEq (kExpectedCursorArea ));
331
+ gtk_candidate_window_handler.Show (&engine);
247
332
}
248
333
249
334
} // namespace ibus
0 commit comments