// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/testing/earl_grey/matchers.h"
#import "ios/testing/earl_grey/earl_grey_test.h"
namespace testing {
id<GREYMatcher> ButtonWithAccessibilityLabel(NSString* label) {
return grey_allOf(grey_accessibilityLabel(label),
grey_accessibilityTrait(UIAccessibilityTraitButton), nil);
}
id<GREYMatcher> ElementToDismissAlert(NSString* cancel_text) {
UIUserInterfaceIdiom idiom = [[UIDevice currentDevice] userInterfaceIdiom];
if (idiom == UIUserInterfaceIdiomPad) {
// On iPad the context menu is dismissed by tapping on something
// that isn't the popover. UIKit conveniently labels this element.
return grey_accessibilityID(@"PopoverDismissRegion");
} else {
// On iPhone the context menu is dismissed by tapping on the "Cancel" item.
return ButtonWithAccessibilityLabel(cancel_text);
}
}
id<GREYMatcher> ElementWithAccessibilityLabelSubstring(NSString* substring) {
GREYMatchesBlock matches = ^BOOL(NSObject* element) {
NSString* accessibilityLabel =
[(UIAccessibilityElement*)element accessibilityLabel];
return [accessibilityLabel rangeOfString:substring].location != NSNotFound;
};
GREYDescribeToBlock describe = ^void(id<GREYDescription> description) {
NSString* describeStr = [NSString
stringWithFormat:@"ElementWithAccessibilityLabelSubstring(\"%@\")",
substring];
[description appendText:describeStr];
};
return grey_allOf(
grey_accessibilityElement(),
[[GREYElementMatcherBlock alloc] initWithMatchesBlock:matches
descriptionBlock:describe],
nil);
}
id<GREYMatcher> NavigationBarBackButton() {
return grey_accessibilityID(@"BackButton");
}
} // namespace testing