Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Member Functions | Package Attributes | List of all members
io.flutter.plugin.editing.ListenableEditingStateTest Class Reference

Classes

class  Listener
 

Public Member Functions

void setUp ()
 
void testConstructor ()
 
void testBatchEditing ()
 
void testBatchingEditing_callEndBeforeBegin ()
 
void testBatchingEditing_addListenerDuringBatchEdit ()
 
void testBatchingEditing_removeListenerDuringBatchEdit ()
 
void testBatchingEditing_listenerCallsReplaceWhenBatchEditEnds ()
 
void testSetComposingRegion ()
 
void testClearBatchDeltas ()
 
void testExtractBatchTextEditingDeltas ()
 
void inputMethod_batchEditingBeginAndEnd ()
 
void inputMethod_testSetSelection ()
 
void inputMethod_testSetComposition ()
 
void inputMethod_testCommitText ()
 

Package Attributes

KeyboardManager mockKeyboardManager
 

Detailed Description

Definition at line 28 of file ListenableEditingStateTest.java.

Member Function Documentation

◆ inputMethod_batchEditingBeginAndEnd()

void io.flutter.plugin.editing.ListenableEditingStateTest.inputMethod_batchEditingBeginAndEnd ( )
inline

Definition at line 259 of file ListenableEditingStateTest.java.

259 {
260 final ArrayList<String> batchMarkers = new ArrayList<>();
261 final ListenableEditingState editingState =
262 new ListenableEditingState(null, new View(ctx)) {
263 @Override
264 public final void beginBatchEdit() {
265 super.beginBatchEdit();
266 batchMarkers.add("begin");
267 }
268
269 @Override
270 public void endBatchEdit() {
271 super.endBatchEdit();
272 batchMarkers.add("end");
273 }
274 };
275
276 final Listener listener = new Listener();
277 final View testView = new View(ctx);
278 final InputConnectionAdaptor inputConnection =
279 new InputConnectionAdaptor(
280 testView,
281 0,
282 mock(TextInputChannel.class),
284 editingState,
285 new EditorInfo());
286
287 // Make sure begin/endBatchEdit is called on the Editable when the input method calls
288 // InputConnection#begin/endBatchEdit.
289 inputConnection.beginBatchEdit();
290 assertEquals(1, batchMarkers.size());
291 assertEquals("begin", batchMarkers.get(0));
292
293 inputConnection.endBatchEdit();
294 assertEquals(2, batchMarkers.size());
295 assertEquals("end", batchMarkers.get(1));
296 }

◆ inputMethod_testCommitText()

void io.flutter.plugin.editing.ListenableEditingStateTest.inputMethod_testCommitText ( )
inline

Definition at line 393 of file ListenableEditingStateTest.java.

393 {
394 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
395 final Listener listener = new Listener();
396 final View testView = new View(ctx);
397 final InputConnectionAdaptor inputConnection =
398 new InputConnectionAdaptor(
399 testView,
400 0,
401 mock(TextInputChannel.class),
403 editingState,
404 new EditorInfo());
405 editingState.replace(0, editingState.length(), "initial text");
406
407 editingState.addEditingStateListener(listener);
408 }

◆ inputMethod_testSetComposition()

void io.flutter.plugin.editing.ListenableEditingStateTest.inputMethod_testSetComposition ( )
inline

Definition at line 333 of file ListenableEditingStateTest.java.

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 // setComposingRegion test.
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 // setComposingText test: non-empty text, does not move cursor.
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 // setComposingText test: non-empty text, moves cursor.
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 // setComposingText test: empty text.
376 inputConnection.setComposingText("", 1);
377 assertTrue(listener.isCalled());
378 assertTrue(listener.textChanged);
379 assertTrue(listener.selectionChanged);
380 assertTrue(listener.composingRegionChanged);
381
382 // finishComposingText test.
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 }

◆ inputMethod_testSetSelection()

void io.flutter.plugin.editing.ListenableEditingStateTest.inputMethod_testSetSelection ( )
inline

Definition at line 299 of file ListenableEditingStateTest.java.

299 {
300 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
301 final Listener listener = new Listener();
302 final View testView = new View(ctx);
303 final InputConnectionAdaptor inputConnection =
304 new InputConnectionAdaptor(
305 testView,
306 0,
307 mock(TextInputChannel.class),
309 editingState,
310 new EditorInfo());
311 editingState.replace(0, editingState.length(), "initial text");
312
313 editingState.addEditingStateListener(listener);
314
315 inputConnection.setSelection(0, 0);
316
317 assertTrue(listener.isCalled());
318 assertFalse(listener.textChanged);
319 assertTrue(listener.selectionChanged);
320 assertFalse(listener.composingRegionChanged);
321
322 listener.reset();
323
324 inputConnection.setSelection(5, 5);
325
326 assertTrue(listener.isCalled());
327 assertFalse(listener.textChanged);
328 assertTrue(listener.selectionChanged);
329 assertFalse(listener.composingRegionChanged);
330 }

◆ setUp()

void io.flutter.plugin.editing.ListenableEditingStateTest.setUp ( )
inline

Definition at line 43 of file ListenableEditingStateTest.java.

43 {
44 MockitoAnnotations.openMocks(this);
45 }

◆ testBatchEditing()

void io.flutter.plugin.editing.ListenableEditingStateTest.testBatchEditing ( )
inline

Definition at line 56 of file ListenableEditingStateTest.java.

56 {
57 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
58 final Listener listener = new Listener();
59 final View testView = new View(ctx);
60 final BaseInputConnection inputConnection = getTestInputConnection(testView, editingState);
61
62 editingState.addEditingStateListener(listener);
63
64 editingState.replace(0, editingState.length(), "update");
65 assertTrue(listener.isCalled());
66 assertTrue(listener.textChanged);
67 assertFalse(listener.selectionChanged);
68 assertFalse(listener.composingRegionChanged);
69
70 assertEquals(-1, editingState.getSelectionStart());
71 assertEquals(-1, editingState.getSelectionEnd());
72
73 listener.reset();
74
75 // Batch edit depth = 1.
76 editingState.beginBatchEdit();
77 editingState.replace(0, editingState.length(), "update1");
78 assertFalse(listener.isCalled());
79 // Batch edit depth = 2.
80 editingState.beginBatchEdit();
81 editingState.replace(0, editingState.length(), "update2");
82 inputConnection.setComposingRegion(0, editingState.length());
83 assertFalse(listener.isCalled());
84 // Batch edit depth = 1.
85 editingState.endBatchEdit();
86 assertFalse(listener.isCalled());
87
88 // Batch edit depth = 2.
89 editingState.beginBatchEdit();
90 assertFalse(listener.isCalled());
91 inputConnection.setSelection(0, 0);
92 assertFalse(listener.isCalled());
93 // Batch edit depth = 1.
94 editingState.endBatchEdit();
95 assertFalse(listener.isCalled());
96
97 // Remove composing region.
98 inputConnection.finishComposingText();
99
100 // Batch edit depth = 0. Last endBatchEdit.
101 editingState.endBatchEdit();
102
103 // Now notify the listener.
104 assertTrue(listener.isCalled());
105 assertTrue(listener.textChanged);
106 assertFalse(listener.composingRegionChanged);
107 }

◆ testBatchingEditing_addListenerDuringBatchEdit()

void io.flutter.plugin.editing.ListenableEditingStateTest.testBatchingEditing_addListenerDuringBatchEdit ( )
inline

Definition at line 132 of file ListenableEditingStateTest.java.

132 {
133 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
134 final Listener listener = new Listener();
135
136 editingState.beginBatchEdit();
137 editingState.addEditingStateListener(listener);
138 editingState.replace(0, editingState.length(), "update");
139 editingState.endBatchEdit();
140
141 assertTrue(listener.isCalled());
142 assertTrue(listener.textChanged);
143 assertTrue(listener.selectionChanged);
144 assertTrue(listener.composingRegionChanged);
145
146 listener.reset();
147
148 // Verifies the listener is officially added.
149 editingState.replace(0, editingState.length(), "more updates");
150 assertTrue(listener.isCalled());
151 assertTrue(listener.textChanged);
152 editingState.removeEditingStateListener(listener);
153
154 listener.reset();
155 // Now remove before endBatchEdit();
156 editingState.beginBatchEdit();
157 editingState.addEditingStateListener(listener);
158 editingState.replace(0, editingState.length(), "update");
159 editingState.removeEditingStateListener(listener);
160 editingState.endBatchEdit();
161
162 assertFalse(listener.isCalled());
163 }

◆ testBatchingEditing_callEndBeforeBegin()

void io.flutter.plugin.editing.ListenableEditingStateTest.testBatchingEditing_callEndBeforeBegin ( )
inline

Definition at line 110 of file ListenableEditingStateTest.java.

110 {
111 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
112 final Listener listener = new Listener();
113 editingState.addEditingStateListener(listener);
114
115 editingState.endBatchEdit();
116 assertFalse(listener.isCalled());
117
118 editingState.replace(0, editingState.length(), "text");
119 assertTrue(listener.isCalled());
120 assertTrue(listener.textChanged);
121
122 listener.reset();
123 // Does not disrupt the followup events.
124 editingState.beginBatchEdit();
125 editingState.replace(0, editingState.length(), "more text");
126 assertFalse(listener.isCalled());
127 editingState.endBatchEdit();
128 assertTrue(listener.isCalled());
129 }

◆ testBatchingEditing_listenerCallsReplaceWhenBatchEditEnds()

void io.flutter.plugin.editing.ListenableEditingStateTest.testBatchingEditing_listenerCallsReplaceWhenBatchEditEnds ( )
inline

Definition at line 180 of file ListenableEditingStateTest.java.

180 {
181 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
182
183 final Listener listener =
184 new Listener() {
185 @Override
186 public void didChangeEditingState(
187 boolean textChanged, boolean selectionChanged, boolean composingRegionChanged) {
188 super.didChangeEditingState(textChanged, selectionChanged, composingRegionChanged);
189 editingState.replace(
190 0, editingState.length(), "one does not simply replace the text in the listener");
191 }
192 };
193 editingState.addEditingStateListener(listener);
194
195 editingState.beginBatchEdit();
196 editingState.replace(0, editingState.length(), "update");
197 editingState.endBatchEdit();
198
199 assertTrue(listener.isCalled());
200 assertEquals(1, listener.timesCalled);
201 assertEquals("one does not simply replace the text in the listener", editingState.toString());
202 }

◆ testBatchingEditing_removeListenerDuringBatchEdit()

void io.flutter.plugin.editing.ListenableEditingStateTest.testBatchingEditing_removeListenerDuringBatchEdit ( )
inline

Definition at line 166 of file ListenableEditingStateTest.java.

166 {
167 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
168 final Listener listener = new Listener();
169 editingState.addEditingStateListener(listener);
170
171 editingState.beginBatchEdit();
172 editingState.replace(0, editingState.length(), "update");
173 editingState.removeEditingStateListener(listener);
174 editingState.endBatchEdit();
175
176 assertFalse(listener.isCalled());
177 }

◆ testClearBatchDeltas()

void io.flutter.plugin.editing.ListenableEditingStateTest.testClearBatchDeltas ( )
inline

Definition at line 235 of file ListenableEditingStateTest.java.

235 {
236 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
237 editingState.replace(0, editingState.length(), "text");
238 editingState.delete(0, 1);
239 editingState.insert(0, "This is t");
240 editingState.clearBatchDeltas();
241 assertEquals(0, editingState.extractBatchTextEditingDeltas().size());
242 }

◆ testConstructor()

void io.flutter.plugin.editing.ListenableEditingStateTest.testConstructor ( )
inline

Definition at line 48 of file ListenableEditingStateTest.java.

48 {
49 // When provided valid composing range, should not fail
50 new ListenableEditingState(
51 new TextInputChannel.TextEditState("hello", 1, 4, 1, 4), new View(ctx));
52 }

◆ testExtractBatchTextEditingDeltas()

void io.flutter.plugin.editing.ListenableEditingStateTest.testExtractBatchTextEditingDeltas ( )
inline

Definition at line 245 of file ListenableEditingStateTest.java.

245 {
246 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
247
248 // Creating some deltas.
249 editingState.replace(0, editingState.length(), "test");
250 editingState.delete(0, 1);
251 editingState.insert(0, "This is a t");
252
253 ArrayList<TextEditingDelta> batchDeltas = editingState.extractBatchTextEditingDeltas();
254 assertEquals(3, batchDeltas.size());
255 }

◆ testSetComposingRegion()

void io.flutter.plugin.editing.ListenableEditingStateTest.testSetComposingRegion ( )
inline

Definition at line 206 of file ListenableEditingStateTest.java.

206 {
207 final ListenableEditingState editingState = new ListenableEditingState(null, new View(ctx));
208 editingState.replace(0, editingState.length(), "text");
209
210 // (-1, -1) clears the composing region.
211 editingState.setComposingRange(-1, -1);
212 assertEquals(-1, editingState.getComposingStart());
213 assertEquals(-1, editingState.getComposingEnd());
214
215 editingState.setComposingRange(-1, 5);
216 assertEquals(-1, editingState.getComposingStart());
217 assertEquals(-1, editingState.getComposingEnd());
218
219 editingState.setComposingRange(2, 3);
220 assertEquals(2, editingState.getComposingStart());
221 assertEquals(3, editingState.getComposingEnd());
222
223 // Empty range is invalid. Clears composing region.
224 editingState.setComposingRange(1, 1);
225 assertEquals(-1, editingState.getComposingStart());
226 assertEquals(-1, editingState.getComposingEnd());
227
228 // Covers everything.
229 editingState.setComposingRange(0, editingState.length());
230 assertEquals(0, editingState.getComposingStart());
231 assertEquals(editingState.length(), editingState.getComposingEnd());
232 }

Member Data Documentation

◆ mockKeyboardManager

KeyboardManager io.flutter.plugin.editing.ListenableEditingStateTest.mockKeyboardManager
package

Definition at line 30 of file ListenableEditingStateTest.java.


The documentation for this class was generated from the following file: