From a0c3779244f79ffcdb447384047b8602f108676e Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Fri, 2 Jul 2021 16:11:14 -0700 Subject: [PATCH 1/2] Follow up cleanup of some unit tests for right click handling. --- .../ScenariosUITests/iPadGestureTests.m | 96 +++++++++++-------- 1 file changed, 56 insertions(+), 40 deletions(-) diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/iPadGestureTests.m b/testing/scenario_app/ios/Scenarios/ScenariosUITests/iPadGestureTests.m index 2f6d9c9237f12..64ef259020fa8 100644 --- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/iPadGestureTests.m +++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/iPadGestureTests.m @@ -17,50 +17,66 @@ - (void)setUp { self.continueAfterFailure = NO; } -#ifdef __IPHONE_15_0 +static BOOL performBoolSelector(id target, SEL selector) { + NSInvocation* invocation = [NSInvocation + invocationWithMethodSignature:[[target class] instanceMethodSignatureForSelector:selector]]; + [invocation setSelector:selector]; + [invocation setTarget:target]; + [invocation invoke]; + BOOL returnValue; + [invocation getReturnValue:&returnValue]; + return returnValue; +} + - (void)testPointerButtons { - if (@available(iOS 15, *)) { - XCTSkipUnless([XCUIDevice.sharedDevice supportsPointerInteraction], - "Device does not support pointer interaction"); - XCUIApplication* app = [[XCUIApplication alloc] init]; - app.launchArguments = @[ @"--pointer-events" ]; - [app launch]; + BOOL supportsPointerInteraction = NO; + // TODO(85810): Remove reflection in this test when Xcode version is upgraded to 13. + SEL supportsPointerInteractionSelector = @selector(supportsPointerInteraction); + if ([XCUIDevice.sharedDevice respondsToSelector:supportsPointerInteractionSelector]) { + supportsPointerInteraction = + performBoolSelector(XCUIDevice.sharedDevice, supportsPointerInteractionSelector); + } + XCTSkipUnless(supportsPointerInteraction, "Device does not support pointer interaction."); + XCUIApplication* app = [[XCUIApplication alloc] init]; + app.launchArguments = @[ @"--pointer-events" ]; + [app launch]; - NSPredicate* predicateToFindFlutterView = - [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, - NSDictionary* _Nullable bindings) { - XCUIElement* element = evaluatedObject; - return [element.identifier hasPrefix:@"flutter_view"]; - }]; - XCUIElement* flutterView = [[app descendantsMatchingType:XCUIElementTypeAny] - elementMatchingPredicate:predicateToFindFlutterView]; - if (![flutterView waitForExistenceWithTimeout:kSecondsToWaitForFlutterView]) { - NSLog(@"%@", app.debugDescription); - XCTFail(@"Failed due to not able to find any flutterView with %@ seconds", - @(kSecondsToWaitForFlutterView)); - } + NSPredicate* predicateToFindFlutterView = + [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, + NSDictionary* _Nullable bindings) { + XCUIElement* element = evaluatedObject; + return [element.identifier hasPrefix:@"flutter_view"]; + }]; + XCUIElement* flutterView = [[app descendantsMatchingType:XCUIElementTypeAny] + elementMatchingPredicate:predicateToFindFlutterView]; + if (![flutterView waitForExistenceWithTimeout:kSecondsToWaitForFlutterView]) { + NSLog(@"%@", app.debugDescription); + XCTFail(@"Failed due to not able to find any flutterView with %@ seconds", + @(kSecondsToWaitForFlutterView)); + } - XCTAssertNotNil(flutterView); + XCTAssertNotNil(flutterView); - [flutterView tap]; - // Initial add event should have buttons = 0 - XCTAssertTrue([app.textFields[@"PointerChange.add:0"] waitForExistenceWithTimeout:1], - @"PointerChange.add event did not occur"); - // Normal tap should have buttons = 0, the flutter framework will ensure it has buttons = 1 - XCTAssertTrue([app.textFields[@"PointerChange.down:0"] waitForExistenceWithTimeout:1], - @"PointerChange.down event did not occur for a normal tap"); - XCTAssertTrue([app.textFields[@"PointerChange.up:0"] waitForExistenceWithTimeout:1], - @"PointerChange.up event did not occur for a normal tap"); - [flutterView rightClick]; - // Since each touch is its own device, we can't distinguish the other add event(s) - // Right click should have buttons = 2 - XCTAssertTrue([app.textFields[@"PointerChange.down:2"] waitForExistenceWithTimeout:1], - @"PointerChange.down event did not occur for a right-click"); - XCTAssertTrue([app.textFields[@"PointerChange.up:2"] waitForExistenceWithTimeout:1], - @"PointerChange.up event did not occur for a right-click"); - NSLog(@"DebugDescriptionX: %@", app.debugDescription); - } + [flutterView tap]; + // Initial add event should have buttons = 0 + XCTAssertTrue([app.textFields[@"PointerChange.add:0"] waitForExistenceWithTimeout:1], + @"PointerChange.add event did not occur"); + // Normal tap should have buttons = 0, the flutter framework will ensure it has buttons = 1 + XCTAssertTrue([app.textFields[@"PointerChange.down:0"] waitForExistenceWithTimeout:1], + @"PointerChange.down event did not occur for a normal tap"); + XCTAssertTrue([app.textFields[@"PointerChange.up:0"] waitForExistenceWithTimeout:1], + @"PointerChange.up event did not occur for a normal tap"); + SEL rightClick = @selector(rightClick); + XCTAssertTrue([flutterView respondsToSelector:rightClick], + @"If supportsPointerInteraction is true, this should be true too."); + // TODO(85810): Remove reflection in this test when Xcode version is upgraded to 13. + [flutterView performSelector:rightClick]; + // Since each touch is its own device, we can't distinguish the other add event(s) + // Right click should have buttons = 2 + XCTAssertTrue([app.textFields[@"PointerChange.down:2"] waitForExistenceWithTimeout:1], + @"PointerChange.down event did not occur for a right-click"); + XCTAssertTrue([app.textFields[@"PointerChange.up:2"] waitForExistenceWithTimeout:1], + @"PointerChange.up event did not occur for a right-click"); } -#endif @end From a146e76a28394d8e88779d3acfc7c8c7e49481fb Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Fri, 2 Jul 2021 17:16:26 -0700 Subject: [PATCH 2/2] removed warnings --- .../ios/Scenarios/ScenariosUITests/iPadGestureTests.m | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/iPadGestureTests.m b/testing/scenario_app/ios/Scenarios/ScenariosUITests/iPadGestureTests.m index 64ef259020fa8..57149ea741831 100644 --- a/testing/scenario_app/ios/Scenarios/ScenariosUITests/iPadGestureTests.m +++ b/testing/scenario_app/ios/Scenarios/ScenariosUITests/iPadGestureTests.m @@ -28,9 +28,12 @@ static BOOL performBoolSelector(id target, SEL selector) { return returnValue; } +// TODO(85810): Remove reflection in this test when Xcode version is upgraded to 13. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - (void)testPointerButtons { BOOL supportsPointerInteraction = NO; - // TODO(85810): Remove reflection in this test when Xcode version is upgraded to 13. SEL supportsPointerInteractionSelector = @selector(supportsPointerInteraction); if ([XCUIDevice.sharedDevice respondsToSelector:supportsPointerInteractionSelector]) { supportsPointerInteraction = @@ -69,7 +72,6 @@ - (void)testPointerButtons { SEL rightClick = @selector(rightClick); XCTAssertTrue([flutterView respondsToSelector:rightClick], @"If supportsPointerInteraction is true, this should be true too."); - // TODO(85810): Remove reflection in this test when Xcode version is upgraded to 13. [flutterView performSelector:rightClick]; // Since each touch is its own device, we can't distinguish the other add event(s) // Right click should have buttons = 2 @@ -78,5 +80,6 @@ - (void)testPointerButtons { XCTAssertTrue([app.textFields[@"PointerChange.up:2"] waitForExistenceWithTimeout:1], @"PointerChange.up event did not occur for a right-click"); } +#pragma clang diagnostic pop @end