@@ -426,9 +426,11 @@ - (bool)getPressedState;
426426- (bool )keyboardChannelGetPressedState ;
427427- (bool )racingConditionBetweenKeyAndText ;
428428- (bool )correctLogicalKeyForLayouts ;
429+ - (bool )shouldNotHoldStrongReferenceToViewDelegate ;
429430@end
430431
431432namespace flutter ::testing {
433+
432434TEST (FlutterKeyboardManagerUnittests, SinglePrimaryResponder) {
433435 ASSERT_TRUE ([[FlutterKeyboardManagerUnittestsObjC alloc ] singlePrimaryResponder ]);
434436}
@@ -461,6 +463,11 @@ - (bool)correctLogicalKeyForLayouts;
461463 ASSERT_TRUE ([[FlutterKeyboardManagerUnittestsObjC alloc ] correctLogicalKeyForLayouts ]);
462464}
463465
466+ TEST (FlutterKeyboardManagerUnittests, ShouldNotHoldStrongReferenceToViewDelegate) {
467+ ASSERT_TRUE (
468+ [[FlutterKeyboardManagerUnittestsObjC alloc ] shouldNotHoldStrongReferenceToViewDelegate ]);
469+ }
470+
464471} // namespace flutter::testing
465472
466473@implementation FlutterKeyboardManagerUnittestsObjC
@@ -809,4 +816,30 @@ - (bool)correctLogicalKeyForLayouts {
809816 return TRUE ;
810817}
811818
819+ - (bool )shouldNotHoldStrongReferenceToViewDelegate {
820+ __strong FlutterKeyboardManager* strongKeyboardManager;
821+ __weak id weakViewDelegate;
822+
823+ @autoreleasepool {
824+ id binaryMessengerMock = OCMStrictProtocolMock (@protocol (FlutterBinaryMessenger));
825+ OCMStub ([binaryMessengerMock setMessageHandlerOnChannel: [OCMArg any ]
826+ binaryMessageHandler: [OCMArg any ]]);
827+
828+ id viewDelegateMock = OCMStrictProtocolMock (@protocol (FlutterKeyboardViewDelegate));
829+ OCMStub ([viewDelegateMock getBinaryMessenger ]).andReturn (binaryMessengerMock);
830+ OCMStub ([viewDelegateMock subscribeToKeyboardLayoutChange: [OCMArg any ]]);
831+
832+ LayoutClue layoutClue;
833+ OCMStub ([viewDelegateMock lookUpLayoutForKeyCode: 0 shift: NO ])
834+ .ignoringNonObjectArgs ()
835+ .andReturn (layoutClue);
836+ FlutterKeyboardManager* keyboardManager =
837+ [[FlutterKeyboardManager alloc ] initWithViewDelegate: viewDelegateMock];
838+ strongKeyboardManager = keyboardManager;
839+ weakViewDelegate = viewDelegateMock;
840+ }
841+
842+ return weakViewDelegate == nil ;
843+ }
844+
812845@end
0 commit comments