Commit f88882e9 authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Fix JS dialog egtests.

This CL updates the JS dialog egtests to work with both modal and non-
modal dialog implementations in preparation for updating the non-modal
dialog feature to be enabled by default.

This required introducing a11y identifier functionality to the
AlertConsumer protocol to allow the tests to properly wait for the
dialogs to be displayed.

Bug: none
Change-Id: I26010b73501442db729f8c561d925d70b8c5eca5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1925775
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#718384}
parent 17b00560
......@@ -27,6 +27,9 @@
// Sets the actions for this alert.
- (void)setActions:(NSArray<AlertAction*>*)actions;
// Sets the accessibility identifier for the alert view.
- (void)setAlertAccessibilityIdentifier:(NSString*)identifier;
@end
#endif // IOS_CHROME_BROWSER_UI_ALERT_VIEW_CONTROLLER_ALERT_CONSUMER_H_
......@@ -86,6 +86,9 @@ constexpr NSUInteger kUIViewAnimationCurveToOptionsShift = 16;
@property(nonatomic, copy)
NSArray<TextFieldConfiguration*>* textFieldConfigurations;
// The alert view's accessibility identifier.
@property(nonatomic, copy) NSString* alertAccessibilityIdentifier;
// The text fields that had been added to this alert.
@property(nonatomic, strong) NSArray<UITextField*>* textFields;
......@@ -137,6 +140,7 @@ constexpr NSUInteger kUIViewAnimationCurveToOptionsShift = 16;
[self.view addGestureRecognizer:self.tapRecognizer];
self.contentView = [[UIView alloc] init];
self.contentView.accessibilityIdentifier = self.alertAccessibilityIdentifier;
self.contentView.clipsToBounds = YES;
self.contentView.backgroundColor = UIColor.cr_systemBackgroundColor;
self.contentView.layer.cornerRadius = kCornerRadius;
......
......@@ -15,6 +15,7 @@
@property(nonatomic, copy)
NSArray<TextFieldConfiguration*>* textFieldConfigurations;
@property(nonatomic, copy) NSArray<AlertAction*>* actions;
@property(nonatomic, copy) NSString* alertAccessibilityIdentifier;
@end
......
......@@ -137,6 +137,7 @@ source_set("eg_tests") {
]
deps = [
":constants",
":feature_flags",
"//base",
"//base/test:test_support",
"//components/strings",
......@@ -175,6 +176,7 @@ source_set("eg2_tests") {
]
deps = [
":constants",
":feature_flags",
"//base",
"//base/test:test_support",
"//components/strings",
......
......@@ -7,6 +7,8 @@
#import <Foundation/Foundation.h>
// Accessibility identifier for a JavaScript dialog.
extern NSString* const kJavaScriptDialogAccessibilityIdentifier;
// Accessibility identifier added to the text field of JavaScript prompts.
extern NSString* const kJavaScriptDialogTextFieldAccessibilityIdentifier;
......
......@@ -8,6 +8,8 @@
#error "This file requires ARC support."
#endif
// Externed accessibility identifier.
// Externed accessibility identifiers.
NSString* const kJavaScriptDialogAccessibilityIdentifier =
@"JavaScriptDialogAccessibilityIdentifier";
NSString* const kJavaScriptDialogTextFieldAccessibilityIdentifier =
@"JavaScriptDialogTextFieldAccessibilityIdentifier";
@"JavaScriptDialogTextFieldAccessibiltyIdentifier";
......@@ -442,6 +442,8 @@ using completion_block_util::GetSafeHTTPAuthCompletion;
[self.delegate dialogPresenter:self
willShowDialogForWebState:self.presentedDialogWebState];
[self.presentedDialogCoordinator start];
self.presentedDialogCoordinator.alertController.view.accessibilityIdentifier =
kJavaScriptDialogAccessibilityIdentifier;
}
- (void)dialogCoordinatorWasStopped:(AlertCoordinator*)coordinator {
......
......@@ -14,20 +14,24 @@
// implement these functions using the data from their request configurations.
@interface AlertOverlayMediator (Subclassing)
// The title to supply to the AlertConsumer. Default values is nil.
// The title to supply to the AlertConsumer. Default value is nil.
@property(nonatomic, readonly) NSString* alertTitle;
// The message to supply to the AlertConsumer. Default values is nil.
// The message to supply to the AlertConsumer. Default value is nil.
@property(nonatomic, readonly) NSString* alertMessage;
// The text field configurations to supply to the AlertConsumer. Default values
// The text field configurations to supply to the AlertConsumer. Default value
// is nil.
@property(nonatomic, readonly)
NSArray<TextFieldConfiguration*>* alertTextFieldConfigurations;
// The alert actions to supply to the AlertConsumer. Default values is nil.
// The alert actions to supply to the AlertConsumer. Default value is nil.
@property(nonatomic, readonly) NSArray<AlertAction*>* alertActions;
// The accessibility identifier to use for the alert view. Default value is
// nil.
@property(nonatomic, readonly) NSString* alertAccessibilityIdentifier;
@end
#endif // IOS_CHROME_BROWSER_UI_OVERLAYS_COMMON_ALERTS_ALERT_OVERLAY_MEDIATOR_SUBCLASSING_H_
......@@ -27,6 +27,7 @@
[_consumer setTextFieldConfigurations:self.alertTextFieldConfigurations];
NSArray<AlertAction*>* alertActions = self.alertActions;
[_consumer setActions:alertActions];
[_consumer setAlertAccessibilityIdentifier:self.alertAccessibilityIdentifier];
DCHECK_GT(alertTitle.length + alertMessage.length, 0U);
DCHECK_GT(alertActions.count, 0U);
}
......@@ -55,4 +56,9 @@
return nil;
}
- (NSString*)alertAccessibilityIdentifier {
// Subclasses implement.
return nil;
}
@end
......@@ -24,6 +24,7 @@
@property(nonatomic, readwrite)
NSArray<TextFieldConfiguration*>* alertTextFieldConfigurations;
@property(nonatomic, readwrite) NSArray<AlertAction*>* alertActions;
@property(nonatomic, readwrite) NSString* alertAccessibilityIdentifier;
@end
@implementation FakeAlertOverlayMediator
......@@ -44,6 +45,7 @@ TEST_F(AlertOverlayMediatorTest, SetUpConsumer) {
@[ [AlertAction actionWithTitle:@"Title"
style:UIAlertActionStyleDefault
handler:nil] ];
mediator.alertAccessibilityIdentifier = @"identifier";
SetMediator(mediator);
EXPECT_NSEQ(mediator.alertTitle, consumer().title);
......@@ -51,4 +53,6 @@ TEST_F(AlertOverlayMediatorTest, SetUpConsumer) {
EXPECT_NSEQ(mediator.alertTextFieldConfigurations,
consumer().textFieldConfigurations);
EXPECT_NSEQ(mediator.alertActions, consumer().actions);
EXPECT_NSEQ(mediator.alertAccessibilityIdentifier,
consumer().alertAccessibilityIdentifier);
}
......@@ -46,6 +46,7 @@ source_set("alerts") {
"//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/web_content_area",
"//ios/chrome/browser/ui/alert_view_controller",
"//ios/chrome/browser/ui/dialogs:constants",
"//ios/chrome/browser/ui/elements",
"//ios/chrome/browser/ui/overlays:coordinators",
"//ios/chrome/browser/ui/overlays/common/alerts",
......@@ -71,6 +72,7 @@ source_set("confirmations") {
"//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/web_content_area",
"//ios/chrome/browser/ui/alert_view_controller",
"//ios/chrome/browser/ui/dialogs:constants",
"//ios/chrome/browser/ui/elements",
"//ios/chrome/browser/ui/overlays:coordinators",
"//ios/chrome/browser/ui/overlays/common/alerts",
......@@ -96,6 +98,7 @@ source_set("prompts") {
"//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/web_content_area",
"//ios/chrome/browser/ui/alert_view_controller",
"//ios/chrome/browser/ui/dialogs:constants",
"//ios/chrome/browser/ui/elements",
"//ios/chrome/browser/ui/overlays:coordinators",
"//ios/chrome/browser/ui/overlays/common/alerts",
......@@ -128,6 +131,7 @@ source_set("unit_tests") {
"//ios/chrome/browser/ui/alert_view_controller",
"//ios/chrome/browser/ui/alert_view_controller/test",
"//ios/chrome/browser/ui/dialogs",
"//ios/chrome/browser/ui/dialogs:constants",
"//ios/chrome/browser/ui/elements",
"//ios/chrome/browser/ui/overlays/common/alerts/test",
"//ios/chrome/browser/ui/overlays/test",
......
......@@ -10,6 +10,7 @@
#import "ios/chrome/browser/overlays/public/web_content_area/java_script_alert_overlay.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_action.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_consumer.h"
#import "ios/chrome/browser/ui/dialogs/dialog_constants.h"
#import "ios/chrome/browser/ui/overlays/common/alerts/alert_overlay_mediator+subclassing.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_dialog_blocking_action.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_overlay_mediator_util.h"
......@@ -72,4 +73,8 @@
return actions;
}
- (NSString*)alertAccessibilityIdentifier {
return kJavaScriptDialogAccessibilityIdentifier;
}
@end
......@@ -10,6 +10,7 @@
#import "ios/chrome/browser/overlays/public/web_content_area/java_script_confirmation_overlay.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_action.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_consumer.h"
#import "ios/chrome/browser/ui/dialogs/dialog_constants.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_dialog_blocking_action.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_overlay_mediator_util.h"
#include "ui/base/l10n/l10n_util.h"
......@@ -95,4 +96,8 @@
return actions;
}
- (NSString*)alertAccessibilityIdentifier {
return kJavaScriptDialogAccessibilityIdentifier;
}
@end
......@@ -9,9 +9,6 @@
class OverlayRequest;
// The accessibility ID for prompt's text field.
extern NSString* const kJavaScriptPromptTextFieldAccessibilityIdentifier;
// Mediator object that uses a JavaScriptPromptOverlayRequestConfig to set
// up the UI for a JavaScript prompt overlay.
@interface JavaScriptPromptOverlayMediator : AlertOverlayMediator
......
......@@ -11,6 +11,7 @@
#import "ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_overlay.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_action.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_view_controller.h"
#import "ios/chrome/browser/ui/dialogs/dialog_constants.h"
#import "ios/chrome/browser/ui/elements/text_field_configuration.h"
#import "ios/chrome/browser/ui/overlays/common/alerts/alert_overlay_mediator+subclassing.h"
#import "ios/chrome/browser/ui/overlays/overlay_request_coordinator_delegate.h"
......@@ -23,9 +24,6 @@
#error "This file requires ARC support."
#endif
NSString* const kJavaScriptPromptTextFieldAccessibilityIdentifier =
@"JavaScriptPromptTextFieldAccessibilityIdentifier";
@interface JavaScriptPromptOverlayMediator ()
@property(nonatomic, readonly) OverlayRequest* request;
@property(nonatomic, readonly) JavaScriptPromptOverlayRequestConfig* config;
......@@ -80,7 +78,7 @@ NSString* const kJavaScriptPromptTextFieldAccessibilityIdentifier =
return @[ [[TextFieldConfiguration alloc]
initWithText:defaultPromptValue
placeholder:nil
accessibilityIdentifier:kJavaScriptPromptTextFieldAccessibilityIdentifier
accessibilityIdentifier:kJavaScriptDialogTextFieldAccessibilityIdentifier
secureTextEntry:NO] ];
}
......@@ -111,4 +109,8 @@ NSString* const kJavaScriptPromptTextFieldAccessibilityIdentifier =
return actions;
}
- (NSString*)alertAccessibilityIdentifier {
return kJavaScriptDialogAccessibilityIdentifier;
}
@end
......@@ -12,6 +12,7 @@
#import "ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_overlay.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_action.h"
#import "ios/chrome/browser/ui/alert_view_controller/test/fake_alert_consumer.h"
#import "ios/chrome/browser/ui/dialogs/dialog_constants.h"
#import "ios/chrome/browser/ui/dialogs/java_script_dialog_blocking_state.h"
#import "ios/chrome/browser/ui/elements/text_field_configuration.h"
#import "ios/chrome/browser/ui/overlays/common/alerts/test/alert_overlay_mediator_test.h"
......@@ -98,7 +99,7 @@ TEST_F(JavaScriptPromptOverlayMediatorTest, PromptSetupMainFrame) {
EXPECT_NSEQ(base::SysUTF8ToNSString(default_prompt_value()),
consumer().textFieldConfigurations[0].text);
EXPECT_FALSE(!!consumer().textFieldConfigurations[0].placeholder);
EXPECT_NSEQ(kJavaScriptPromptTextFieldAccessibilityIdentifier,
EXPECT_NSEQ(kJavaScriptDialogTextFieldAccessibilityIdentifier,
consumer().textFieldConfigurations[0].accessibilityIdentifier);
ASSERT_EQ(2U, consumer().actions.count);
EXPECT_EQ(UIAlertActionStyleDefault, consumer().actions[0].style);
......@@ -117,7 +118,7 @@ TEST_F(JavaScriptPromptOverlayMediatorTest, PromptSetupIframe) {
EXPECT_NSEQ(base::SysUTF8ToNSString(default_prompt_value()),
consumer().textFieldConfigurations[0].text);
EXPECT_FALSE(!!consumer().textFieldConfigurations[0].placeholder);
EXPECT_NSEQ(kJavaScriptPromptTextFieldAccessibilityIdentifier,
EXPECT_NSEQ(kJavaScriptDialogTextFieldAccessibilityIdentifier,
consumer().textFieldConfigurations[0].accessibilityIdentifier);
ASSERT_EQ(2U, consumer().actions.count);
EXPECT_EQ(UIAlertActionStyleDefault, consumer().actions[0].style);
......@@ -138,7 +139,7 @@ TEST_F(JavaScriptPromptOverlayMediatorTest, PromptSetupWithBlockingOption) {
EXPECT_NSEQ(base::SysUTF8ToNSString(default_prompt_value()),
consumer().textFieldConfigurations[0].text);
EXPECT_FALSE(!!consumer().textFieldConfigurations[0].placeholder);
EXPECT_NSEQ(kJavaScriptPromptTextFieldAccessibilityIdentifier,
EXPECT_NSEQ(kJavaScriptDialogTextFieldAccessibilityIdentifier,
consumer().textFieldConfigurations[0].accessibilityIdentifier);
ASSERT_EQ(3U, consumer().actions.count);
EXPECT_EQ(UIAlertActionStyleDefault, consumer().actions[0].style);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment