333 {
334 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
335 final Listener listener = new Listener();
336 final View testView = new View(ctx);
337 final InputConnectionAdaptor inputConnection =
338 new InputConnectionAdaptor(
339 testView,
340 0,
341 mock(TextInputChannel.class),
343 editingState,
344 new EditorInfo());
345 editingState.replace(0, editingState.length(), "initial text");
346
347 editingState.addEditingStateListener(listener);
348
349
350 inputConnection.setComposingRegion(1, 3);
351 assertTrue(listener.isCalled());
352 assertFalse(listener.textChanged);
353 assertFalse(listener.selectionChanged);
354 assertTrue(listener.composingRegionChanged);
355
356 Selection.setSelection(editingState, 0, 0);
357 listener.reset();
358
359
360 inputConnection.setComposingText("composing", -1);
361 assertTrue(listener.isCalled());
362 assertTrue(listener.textChanged);
363 assertFalse(listener.selectionChanged);
364 assertTrue(listener.composingRegionChanged);
365
366 listener.reset();
367
368 inputConnection.setComposingText("composing2", 1);
369 assertTrue(listener.isCalled());
370 assertTrue(listener.textChanged);
371 assertTrue(listener.selectionChanged);
372 assertTrue(listener.composingRegionChanged);
373
374 listener.reset();
375
376 inputConnection.setComposingText("", 1);
377 assertTrue(listener.isCalled());
378 assertTrue(listener.textChanged);
379 assertTrue(listener.selectionChanged);
380 assertTrue(listener.composingRegionChanged);
381
382
383 inputConnection.setComposingText("composing text", 1);
384 listener.reset();
385 inputConnection.finishComposingText();
386 assertTrue(listener.isCalled());
387 assertFalse(listener.textChanged);
388 assertFalse(listener.selectionChanged);
389 assertTrue(listener.composingRegionChanged);
390 }