Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit d6bfcb8

Browse files
committed
[macOS] Fix tests failing on Sonoma
1 parent 39819e6 commit d6bfcb8

File tree

2 files changed

+46
-5
lines changed

2 files changed

+46
-5
lines changed

shell/platform/darwin/macos/framework/Source/FlutterKeyboardManagerTest.mm

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,9 @@ - (nonnull instancetype)init {
276276
OCMStub([viewDelegateMock onTextInputKeyEvent:[OCMArg any]])
277277
.andCall(self, @selector(handleTextInputKeyEvent:));
278278
OCMStub([viewDelegateMock getBinaryMessenger]).andReturn(_messengerMock);
279-
OCMStub([viewDelegateMock sendKeyEvent:FlutterKeyEvent {} callback:nil userData:nil])
279+
OCMStub([viewDelegateMock sendKeyEvent:*(const FlutterKeyEvent*)[OCMArg anyPointer]
280+
callback:nil
281+
userData:nil])
280282
.ignoringNonObjectArgs()
281283
.andCall(self, @selector(handleEmbedderEvent:callback:userData:));
282284
OCMStub([viewDelegateMock subscribeToKeyboardLayoutChange:[OCMArg any]])

shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,42 @@ - (void)dealloc {
3838
}
3939
@end
4040

41+
/// Responder wrapper that forwards key events to another responder. This is a necessary middle step
42+
/// for mocking responder because when setting the responder AppKit will access ivars of the
43+
/// responder, which means the responder must extend NSResponder instead of just implementing the
44+
/// selectors.
45+
@interface FlutterResponderWrapper : NSResponder {
46+
NSResponder* _responder;
47+
}
48+
@end
49+
50+
@implementation FlutterResponderWrapper
51+
52+
- (instancetype)initWithResponder:(NSResponder*)responder {
53+
if (self = [super init]) {
54+
_responder = responder;
55+
}
56+
return self;
57+
}
58+
59+
- (void)keyDown:(NSEvent*)event {
60+
[_responder keyDown:event];
61+
}
62+
63+
- (void)keyUp:(NSEvent*)event {
64+
[_responder keyUp:event];
65+
}
66+
67+
- (BOOL)performKeyEquivalent:(NSEvent*)event {
68+
return [_responder performKeyEquivalent:event];
69+
}
70+
71+
- (void)flagsChanged:(NSEvent*)event {
72+
[_responder flagsChanged:event];
73+
}
74+
75+
@end
76+
4177
// A FlutterViewController subclass for testing that mouseDown/mouseUp get called when
4278
// mouse events are sent to the associated view.
4379
@interface MouseEventFlutterViewController : FlutterViewController
@@ -417,7 +453,8 @@ - (bool)testKeyEventsArePropagatedIfNotHandled {
417453
nibName:@""
418454
bundle:nil];
419455
id responderMock = flutter::testing::mockResponder();
420-
viewController.nextResponder = responderMock;
456+
id responderWrapper = [[FlutterResponderWrapper alloc] initWithResponder:responderMock];
457+
viewController.nextResponder = responderWrapper;
421458
NSDictionary* expectedEvent = @{
422459
@"keymap" : @"macos",
423460
@"type" : @"keydown",
@@ -493,7 +530,8 @@ - (bool)testFlagsChangedEventsArePropagatedIfNotHandled {
493530
nibName:@""
494531
bundle:nil];
495532
id responderMock = flutter::testing::mockResponder();
496-
viewController.nextResponder = responderMock;
533+
id responderWrapper = [[FlutterResponderWrapper alloc] initWithResponder:responderMock];
534+
viewController.nextResponder = responderWrapper;
497535
NSDictionary* expectedEvent = @{
498536
@"keymap" : @"macos",
499537
@"type" : @"keydown",
@@ -546,7 +584,8 @@ - (bool)testKeyEventsAreNotPropagatedIfHandled {
546584
nibName:@""
547585
bundle:nil];
548586
id responderMock = flutter::testing::mockResponder();
549-
viewController.nextResponder = responderMock;
587+
id responderWrapper = [[FlutterResponderWrapper alloc] initWithResponder:responderMock];
588+
viewController.nextResponder = responderWrapper;
550589
NSDictionary* expectedEvent = @{
551590
@"keymap" : @"macos",
552591
@"type" : @"keydown",
@@ -825,7 +864,7 @@ - (bool)testTrackpadGesturesAreSentToFramework {
825864
CGEventRef cgEventDiscreteShift =
826865
CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitPixel, 1, 0);
827866
CGEventSetType(cgEventDiscreteShift, kCGEventScrollWheel);
828-
CGEventSetFlags(cgEventDiscreteShift, kCGEventFlagMaskShift);
867+
CGEventSetFlags(cgEventDiscreteShift, kCGEventFlagMaskShift | flutter::kModifierFlagShiftLeft);
829868
CGEventSetIntegerValueField(cgEventDiscreteShift, kCGScrollWheelEventIsContinuous, 0);
830869
CGEventSetIntegerValueField(cgEventDiscreteShift, kCGScrollWheelEventDeltaAxis2,
831870
0); // scroll_delta_x

0 commit comments

Comments
 (0)