Flutter macOS Embedder
FlutterInputPluginTestObjc Class Reference
Inheritance diagram for FlutterInputPluginTestObjc:

Instance Methods

(bool) - testEmptyCompositionRange
 
(bool) - testClearClientDuringComposing
 

Detailed Description

Definition at line 62 of file FlutterTextInputPluginTest.mm.

Method Documentation

◆ testClearClientDuringComposing

- (bool) testClearClientDuringComposing

Definition at line 77 of file FlutterTextInputPluginTest.mm.

372  {
373  // Set up FlutterTextInputPlugin.
374  id engineMock = flutter::testing::CreateMockFlutterEngine(@"");
375  id binaryMessengerMock = OCMProtocolMock(@protocol(FlutterBinaryMessenger));
376  OCMStub( // NOLINT(google-objc-avoid-throwing-exception)
377  [engineMock binaryMessenger])
378  .andReturn(binaryMessengerMock);
379  FlutterViewController* viewController = [[FlutterViewController alloc] initWithEngine:engineMock
380  nibName:@""
381  bundle:nil];
383  [[FlutterTextInputPluginTestDelegate alloc] initWithBinaryMessenger:binaryMessengerMock
384  viewController:viewController];
385 
386  FlutterTextInputPlugin* plugin = [[FlutterTextInputPlugin alloc] initWithDelegate:delegate];
387 
388  // Set input client 1.
389  NSDictionary* setClientConfig = @{
390  @"viewId" : @(kViewId),
391  @"inputAction" : @"action",
392  @"inputType" : @{@"name" : @"inputName"},
393  };
394  [plugin handleMethodCall:[FlutterMethodCall methodCallWithMethodName:@"TextInput.setClient"
395  arguments:@[ @(1), setClientConfig ]]
396  result:^(id){
397  }];
398 
399  // Set editing state with an active composing range.
400  [plugin handleMethodCall:[FlutterMethodCall methodCallWithMethodName:@"TextInput.setEditingState"
401  arguments:@{
402  @"text" : @"Text",
403  @"selectionBase" : @(0),
404  @"selectionExtent" : @(0),
405  @"composingBase" : @(0),
406  @"composingExtent" : @(1),
407  }]
408  result:^(id){
409  }];
410 
411  // Verify composing range is (0, 1).
412  NSDictionary* editingState = [plugin editingState];
413  EXPECT_EQ([editingState[@"composingBase"] intValue], 0);
414  EXPECT_EQ([editingState[@"composingExtent"] intValue], 1);
415 
416  // Clear input client.
417  [plugin handleMethodCall:[FlutterMethodCall methodCallWithMethodName:@"TextInput.clearClient"
418  arguments:@[]]
419  result:^(id){
420  }];
421 
422  // Verify composing range is collapsed.
423  editingState = [plugin editingState];
424  EXPECT_EQ([editingState[@"composingBase"] intValue], [editingState[@"composingExtent"] intValue]);
425  return true;
426 }
static const FlutterViewIdentifier kViewId
instancetype methodCallWithMethodName:arguments:(NSString *method,[arguments] id _Nullable arguments)
void handleMethodCall:result:(FlutterMethodCall *call,[result] FlutterResult result)
NSDictionary * editingState()
id CreateMockFlutterEngine(NSString *pasteboardString)

References _binaryMessenger, and FlutterTextInputPluginTestDelegate::_viewController.

◆ testEmptyCompositionRange

- (bool) testEmptyCompositionRange

Definition at line 77 of file FlutterTextInputPluginTest.mm.

116  {
117  id engineMock = flutter::testing::CreateMockFlutterEngine(@"");
118  id binaryMessengerMock = OCMProtocolMock(@protocol(FlutterBinaryMessenger));
119  OCMStub( // NOLINT(google-objc-avoid-throwing-exception)
120  [engineMock binaryMessenger])
121  .andReturn(binaryMessengerMock);
122 
123  FlutterViewController* viewController = [[FlutterViewController alloc] initWithEngine:engineMock
124  nibName:@""
125  bundle:nil];
126 
128  [[FlutterTextInputPluginTestDelegate alloc] initWithBinaryMessenger:binaryMessengerMock
129  viewController:viewController];
130 
131  FlutterTextInputPlugin* plugin = [[FlutterTextInputPlugin alloc] initWithDelegate:delegate];
132 
133  NSDictionary* setClientConfig = @{
134  @"viewId" : @(kViewId),
135  @"inputAction" : @"action",
136  @"inputType" : @{@"name" : @"inputName"},
137  };
138  [plugin handleMethodCall:[FlutterMethodCall methodCallWithMethodName:@"TextInput.setClient"
139  arguments:@[ @(1), setClientConfig ]]
140  result:^(id){
141  }];
142 
143  FlutterMethodCall* call = [FlutterMethodCall methodCallWithMethodName:@"TextInput.setEditingState"
144  arguments:@{
145  @"text" : @"Text",
146  @"selectionBase" : @(0),
147  @"selectionExtent" : @(0),
148  @"composingBase" : @(-1),
149  @"composingExtent" : @(-1),
150  }];
151 
152  [plugin handleMethodCall:call
153  result:^(id){
154  }];
155 
156  // Verify editing state was set.
157  NSDictionary* editingState = [plugin editingState];
158  EXPECT_STREQ([editingState[@"text"] UTF8String], "Text");
159  EXPECT_STREQ([editingState[@"selectionAffinity"] UTF8String], "TextAffinity.upstream");
160  EXPECT_FALSE([editingState[@"selectionIsDirectional"] boolValue]);
161  EXPECT_EQ([editingState[@"selectionBase"] intValue], 0);
162  EXPECT_EQ([editingState[@"selectionExtent"] intValue], 0);
163  EXPECT_EQ([editingState[@"composingBase"] intValue], -1);
164  EXPECT_EQ([editingState[@"composingExtent"] intValue], -1);
165  return true;
166 }

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