mirror of
https://github.com/material-components/material-components-ios.git
synced 2026-02-20 08:27:32 +08:00
607 lines
20 KiB
Objective-C
607 lines
20 KiB
Objective-C
// Copyright 2016-present the Material Components for iOS authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#import <XCTest/XCTest.h>
|
|
|
|
#import "MaterialButtonBar.h"
|
|
#import "MaterialNavigationBar.h"
|
|
#import "MaterialNavigationBar+TypographyThemer.h"
|
|
#import "MaterialTypographyScheme.h"
|
|
|
|
static const CGFloat kEpsilonAccuracy = (CGFloat)0.001;
|
|
|
|
@interface MDCNavigationBar (Testing)
|
|
@property(nonatomic) UILabel *titleLabel;
|
|
- (MDCButtonBar *)leadingButtonBar;
|
|
- (MDCButtonBar *)trailingButtonBar;
|
|
@end
|
|
|
|
@interface NavigationBarTests : XCTestCase
|
|
@property(nonatomic) MDCNavigationBar *navBar;
|
|
@end
|
|
|
|
@implementation NavigationBarTests
|
|
|
|
- (void)setUp {
|
|
[super setUp];
|
|
self.navBar = [[MDCNavigationBar alloc] init];
|
|
}
|
|
|
|
- (void)tearDown {
|
|
self.navBar = nil;
|
|
[super tearDown];
|
|
}
|
|
|
|
- (void)setUpNavBarWithTitleViewLayoutBehavior:
|
|
(MDCNavigationBarTitleViewLayoutBehavior)layoutBahavior {
|
|
self.navBar.frame = CGRectMake(0, 0, 300, 25);
|
|
self.navBar.titleView = [[UIView alloc] init];
|
|
self.navBar.titleViewLayoutBehavior = layoutBahavior;
|
|
}
|
|
|
|
- (void)testSettingTextAlignmentToCenterMustCenterTheTitleLabel {
|
|
// Given
|
|
self.navBar.frame = CGRectMake(0, 0, 300, 25);
|
|
self.navBar.title = @"this is a Title";
|
|
|
|
// When
|
|
self.navBar.titleAlignment = MDCNavigationBarTitleAlignmentCenter;
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.navBar.titleLabel.center.x, CGRectGetMidX(self.navBar.bounds),
|
|
kEpsilonAccuracy);
|
|
}
|
|
|
|
- (void)testChangingTextOfACenterTextAlignmentMustCenterTheTitleLabel {
|
|
// Given
|
|
self.navBar.frame = CGRectMake(0, 0, 300, 25);
|
|
self.navBar.title = @"this is a Title";
|
|
self.navBar.titleAlignment = MDCNavigationBarTitleAlignmentCenter;
|
|
|
|
// When
|
|
self.navBar.title = @"..";
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.navBar.titleLabel.center.x, CGRectGetMidX(self.navBar.bounds),
|
|
kEpsilonAccuracy);
|
|
}
|
|
|
|
- (void)testSettingTextAlignmentToLeftMustLeftAlignTheTitleLabel {
|
|
// Given
|
|
self.navBar.frame = CGRectMake(0, 0, 200, 25);
|
|
self.navBar.title = @"this is a Title";
|
|
self.navBar.titleAlignment = MDCNavigationBarTitleAlignmentCenter;
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// When
|
|
self.navBar.titleAlignment = MDCNavigationBarTitleAlignmentLeading;
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
XCTAssertLessThan(self.navBar.titleLabel.center.x, CGRectGetMidX(self.navBar.bounds));
|
|
}
|
|
|
|
- (void)testDefaultTextAlignment {
|
|
// When
|
|
MDCNavigationBarTitleAlignment alignment = self.navBar.titleAlignment;
|
|
|
|
// Then
|
|
XCTAssertEqual(alignment, MDCNavigationBarTitleAlignmentCenter);
|
|
}
|
|
|
|
- (void)testTitleViewIsCenteredWithNoButtonsAndFillBehavior {
|
|
// Given
|
|
[self setUpNavBarWithTitleViewLayoutBehavior:MDCNavigationBarTitleViewLayoutBehaviorFill];
|
|
|
|
// When
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.navBar.titleView.center.x, CGRectGetMidX(self.navBar.bounds),
|
|
kEpsilonAccuracy);
|
|
}
|
|
|
|
- (void)testTitleViewShiftedRightWithLeadingButtonsAndFillBehavior {
|
|
// Given
|
|
[self setUpNavBarWithTitleViewLayoutBehavior:MDCNavigationBarTitleViewLayoutBehaviorFill];
|
|
self.navBar.leadingBarButtonItems =
|
|
@[ [[UIBarButtonItem alloc] initWithTitle:@"Button"
|
|
style:UIBarButtonItemStylePlain
|
|
target:nil
|
|
action:nil] ];
|
|
|
|
// When
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
XCTAssertGreaterThan(self.navBar.titleView.center.x, CGRectGetMidX(self.navBar.bounds));
|
|
}
|
|
|
|
- (void)testTitleViewShiftedLeftWithTrailingButtonsAndFillBehavior {
|
|
// Given
|
|
[self setUpNavBarWithTitleViewLayoutBehavior:MDCNavigationBarTitleViewLayoutBehaviorFill];
|
|
self.navBar.trailingBarButtonItems =
|
|
@[ [[UIBarButtonItem alloc] initWithTitle:@"Button"
|
|
style:UIBarButtonItemStylePlain
|
|
target:nil
|
|
action:nil] ];
|
|
|
|
// When
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
XCTAssertLessThan(self.navBar.titleView.center.x, CGRectGetMidX(self.navBar.bounds));
|
|
}
|
|
|
|
- (void)testTitleViewCenteredWithLeadingButtonsAndCenterBehavior {
|
|
// Given
|
|
[self setUpNavBarWithTitleViewLayoutBehavior:MDCNavigationBarTitleViewLayoutBehaviorCenter];
|
|
self.navBar.leadingBarButtonItems =
|
|
@[ [[UIBarButtonItem alloc] initWithTitle:@"Button"
|
|
style:UIBarButtonItemStylePlain
|
|
target:nil
|
|
action:nil] ];
|
|
|
|
// When
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.navBar.titleView.center.x, CGRectGetMidX(self.navBar.bounds),
|
|
kEpsilonAccuracy);
|
|
}
|
|
|
|
- (void)testTitleViewCenteredWithTrailingButtonsAndCenterBehavior {
|
|
// Given
|
|
[self setUpNavBarWithTitleViewLayoutBehavior:MDCNavigationBarTitleViewLayoutBehaviorCenter];
|
|
self.navBar.trailingBarButtonItems =
|
|
@[ [[UIBarButtonItem alloc] initWithTitle:@"Button"
|
|
style:UIBarButtonItemStylePlain
|
|
target:nil
|
|
action:nil] ];
|
|
|
|
// When
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.navBar.titleView.center.x, CGRectGetMidX(self.navBar.bounds),
|
|
kEpsilonAccuracy);
|
|
}
|
|
|
|
- (void)testTitleViewDefaultInsets {
|
|
// Given
|
|
[self setUpNavBarWithTitleViewLayoutBehavior:MDCNavigationBarTitleViewLayoutBehaviorCenter];
|
|
|
|
// When
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
CGRect expectedRect = CGRectMake(16, 0, 268, 25);
|
|
[self helperTestView:self.navBar.titleView withExpectedRect:expectedRect];
|
|
}
|
|
|
|
- (void)testTitleViewWithCustomInsets {
|
|
// Given
|
|
[self setUpNavBarWithTitleViewLayoutBehavior:MDCNavigationBarTitleViewLayoutBehaviorCenter];
|
|
|
|
// When
|
|
self.navBar.titleInsets = UIEdgeInsetsZero;
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
CGRect expectedRect = CGRectMake(0, 0, 300, 25);
|
|
[self helperTestView:self.navBar.titleView withExpectedRect:expectedRect];
|
|
}
|
|
|
|
- (void)testTitleViewWithDefaultInsetsAndFillBehavior {
|
|
// Given
|
|
[self setUpNavBarWithTitleViewLayoutBehavior:MDCNavigationBarTitleViewLayoutBehaviorFill];
|
|
|
|
// When
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
CGRect expectedRect = CGRectMake(16, 0, 268, 25);
|
|
[self helperTestView:self.navBar.titleView withExpectedRect:expectedRect];
|
|
}
|
|
|
|
- (void)testTitleViewWithCustomInsetsAndFillBehavior {
|
|
// Given
|
|
[self setUpNavBarWithTitleViewLayoutBehavior:MDCNavigationBarTitleViewLayoutBehaviorFill];
|
|
|
|
// When
|
|
self.navBar.titleInsets = UIEdgeInsetsZero;
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
CGRect expectedRect = CGRectMake(0, 0, 300, 25);
|
|
[self helperTestView:self.navBar.titleView withExpectedRect:expectedRect];
|
|
}
|
|
|
|
- (void)testTitleLabelWithDefaultInsets {
|
|
// Given
|
|
self.navBar.title = @"Foo";
|
|
|
|
// When
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
CGRect expectedRect = CGRectMake(16, 0, 268, 25);
|
|
[self helperTestView:self.navBar.titleLabel withExpectedRect:expectedRect];
|
|
}
|
|
|
|
- (void)testTitleLabelWithCustomInsets {
|
|
// Given
|
|
self.navBar.title = @"Foo";
|
|
|
|
// When
|
|
self.navBar.titleInsets = UIEdgeInsetsZero;
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
CGRect expectedRect = CGRectMake(0, 0, 300, 25);
|
|
[self helperTestView:self.navBar.titleLabel withExpectedRect:expectedRect];
|
|
}
|
|
|
|
- (void)testTitleLabelWithDefaultInsetsAndLeadingAlignment {
|
|
// Given
|
|
self.navBar.title = @"Foo";
|
|
|
|
// When
|
|
self.navBar.titleAlignment = MDCNavigationBarTitleAlignmentLeading;
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
CGRect expectedRect = CGRectMake(16, 0, 268, 25);
|
|
[self helperTestView:self.navBar.titleLabel withExpectedRect:expectedRect];
|
|
}
|
|
|
|
- (void)testTitleLabelWithCustomInsetsAndLeadingAlignment {
|
|
// Given
|
|
self.navBar.title = @"Foo";
|
|
|
|
// When
|
|
self.navBar.titleInsets = UIEdgeInsetsZero;
|
|
self.navBar.titleAlignment = MDCNavigationBarTitleAlignmentLeading;
|
|
[self.navBar layoutIfNeeded];
|
|
|
|
// Then
|
|
CGRect expectedRect = CGRectMake(0, 0, 300, 25);
|
|
[self helperTestView:self.navBar.titleLabel withExpectedRect:expectedRect];
|
|
}
|
|
|
|
- (void)helperTestView:(UIView *)view withExpectedRect:(CGRect)expectedRect {
|
|
CGRect viewRect = CGRectStandardize(view.frame);
|
|
XCTAssertEqualWithAccuracy(viewRect.origin.x, expectedRect.origin.x, 0.001);
|
|
XCTAssertEqualWithAccuracy(viewRect.origin.y, expectedRect.origin.y, 0.001);
|
|
if (![view isKindOfClass:[UILabel class]]) {
|
|
XCTAssertEqualWithAccuracy(viewRect.size.width, expectedRect.size.width, 0.001);
|
|
XCTAssertEqualWithAccuracy(viewRect.size.height, expectedRect.size.height, 0.001);
|
|
}
|
|
}
|
|
|
|
- (void)testTitleFontProperty {
|
|
// Given
|
|
self.navBar.title = @"this is a Title";
|
|
|
|
// Then
|
|
XCTAssertNotNil(self.navBar.titleFont);
|
|
XCTAssertEqualObjects(self.navBar.titleLabel.font, self.navBar.titleFont);
|
|
|
|
// When
|
|
UIFont *font = [UIFont systemFontOfSize:24];
|
|
self.navBar.titleFont = font;
|
|
|
|
// Then
|
|
UIFont *resultFont = self.navBar.titleLabel.font;
|
|
XCTAssertEqualObjects(resultFont.fontName, font.fontName);
|
|
XCTAssertEqualWithAccuracy(resultFont.pointSize, 20, 0.01);
|
|
|
|
// When
|
|
NSDictionary<NSString *, NSNumber *> *fontTraits =
|
|
[[font fontDescriptor] objectForKey:UIFontDescriptorTraitsAttribute];
|
|
NSDictionary<NSString *, NSNumber *> *resultTraits =
|
|
[[resultFont fontDescriptor] objectForKey:UIFontDescriptorTraitsAttribute];
|
|
|
|
// Then
|
|
XCTAssertEqualObjects(fontTraits, resultTraits);
|
|
}
|
|
|
|
- (void)testTitleFontPropertyWithAllowAnyTitleFontSizeEnabled {
|
|
// Given
|
|
self.navBar.title = @"this is a Title";
|
|
self.navBar.allowAnyTitleFontSize = YES;
|
|
|
|
// Then
|
|
XCTAssertNotNil(self.navBar.titleFont);
|
|
XCTAssertEqualObjects(self.navBar.titleLabel.font, self.navBar.titleFont);
|
|
|
|
// When
|
|
UIFont *font = [UIFont systemFontOfSize:24];
|
|
self.navBar.titleFont = font;
|
|
|
|
// Then
|
|
UIFont *resultFont = self.navBar.titleLabel.font;
|
|
XCTAssertEqualObjects(resultFont.fontName, font.fontName);
|
|
XCTAssertEqualWithAccuracy(resultFont.pointSize, 24, 0.01);
|
|
|
|
// When
|
|
NSDictionary<NSString *, NSNumber *> *fontTraits =
|
|
[[font fontDescriptor] objectForKey:UIFontDescriptorTraitsAttribute];
|
|
NSDictionary<NSString *, NSNumber *> *resultTraits =
|
|
[[resultFont fontDescriptor] objectForKey:UIFontDescriptorTraitsAttribute];
|
|
|
|
// Then
|
|
XCTAssertEqualObjects(fontTraits, resultTraits);
|
|
}
|
|
|
|
#pragma mark - Accessibility
|
|
|
|
- (void)testNavigationBarIsNotAccessibilityElement {
|
|
// Then
|
|
XCTAssertFalse(self.navBar.isAccessibilityElement);
|
|
}
|
|
|
|
- (void)testAccessibilityItemsCountWithNoTitle {
|
|
// Then
|
|
const NSInteger elementsCount = 3; // Leading bar, titleLabel, trailing bar
|
|
XCTAssertEqual(elementsCount, self.navBar.accessibilityElementCount);
|
|
}
|
|
|
|
- (void)testAccessibilityItemsCountWithTitleView {
|
|
// When
|
|
self.navBar.titleView = [[UIView alloc] init];
|
|
|
|
// Then
|
|
const NSInteger elementsCount = 3; // Leading bar, titleView, trailing bar
|
|
XCTAssertEqual(elementsCount, self.navBar.accessibilityElementCount);
|
|
}
|
|
|
|
- (void)testAccessibilityItemAtIndexDefault {
|
|
// Then
|
|
XCTAssertTrue([[self.navBar accessibilityElementAtIndex:0] isKindOfClass:[MDCButtonBar class]]);
|
|
XCTAssertEqual(self.navBar.titleLabel, [self.navBar accessibilityElementAtIndex:1]);
|
|
XCTAssertTrue([[self.navBar accessibilityElementAtIndex:2] isKindOfClass:[MDCButtonBar class]]);
|
|
}
|
|
|
|
- (void)testIndexOfAccessibilityElementDefault {
|
|
// Then
|
|
XCTAssertEqual(1, [self.navBar indexOfAccessibilityElement:self.navBar.titleLabel]);
|
|
XCTAssertEqual(NSNotFound,
|
|
[self.navBar indexOfAccessibilityElement:self.navBar.leftBarButtonItem]);
|
|
}
|
|
|
|
- (void)testIndexOfAccessibilityElementWithTitleView {
|
|
// When
|
|
self.navBar.titleView = [[UIView alloc] init];
|
|
|
|
// Then
|
|
XCTAssertEqual(1, [self.navBar indexOfAccessibilityElement:self.navBar.titleView]);
|
|
XCTAssertEqual(NSNotFound, [self.navBar indexOfAccessibilityElement:self.navBar.titleLabel]);
|
|
}
|
|
|
|
- (void)testAccessibilityElementsWithNoTitle {
|
|
// Given
|
|
UIBarButtonItem *leadingItem = [[UIBarButtonItem alloc] init];
|
|
leadingItem.title = @"Leading";
|
|
UIBarButtonItem *trailingItem = [[UIBarButtonItem alloc] init];
|
|
trailingItem.title = @"Trailing";
|
|
|
|
// When
|
|
self.navBar.leadingBarButtonItem = leadingItem;
|
|
self.navBar.trailingBarButtonItems = @[ leadingItem, trailingItem ];
|
|
|
|
// Then
|
|
NSArray *elements = self.navBar.accessibilityElements;
|
|
XCTAssertNotNil(elements);
|
|
XCTAssertEqual(3U, elements.count);
|
|
id firstItem = elements[0];
|
|
XCTAssertTrue([firstItem isKindOfClass:[MDCButtonBar class]]);
|
|
if ([firstItem isKindOfClass:[MDCButtonBar class]]) {
|
|
MDCButtonBar *leadingButtonBar = (MDCButtonBar *)firstItem;
|
|
XCTAssertEqual(1U, leadingButtonBar.subviews.count);
|
|
}
|
|
XCTAssertEqualObjects(self.navBar.titleLabel, elements[1]);
|
|
id secondItem = elements[2];
|
|
XCTAssertTrue([secondItem isKindOfClass:[MDCButtonBar class]]);
|
|
if ([secondItem isKindOfClass:[MDCButtonBar class]]) {
|
|
MDCButtonBar *trailingButtonBar = (MDCButtonBar *)secondItem;
|
|
XCTAssertEqual(2U, trailingButtonBar.subviews.count);
|
|
}
|
|
}
|
|
|
|
- (void)testAccessibilityElementsWithTitleView {
|
|
// Given
|
|
UIBarButtonItem *leadingItem = [[UIBarButtonItem alloc] init];
|
|
leadingItem.title = @"Leading";
|
|
UIBarButtonItem *trailingItem = [[UIBarButtonItem alloc] init];
|
|
trailingItem.title = @"Trailing";
|
|
|
|
// When
|
|
self.navBar.titleView = [[UIView alloc] init];
|
|
self.navBar.leadingBarButtonItem = leadingItem;
|
|
self.navBar.trailingBarButtonItems = @[ leadingItem, trailingItem ];
|
|
|
|
// Then
|
|
NSArray *elements = self.navBar.accessibilityElements;
|
|
XCTAssertNotNil(elements);
|
|
XCTAssertEqual(3U, elements.count);
|
|
id firstItem = elements[0];
|
|
XCTAssertTrue([firstItem isKindOfClass:[MDCButtonBar class]]);
|
|
if ([firstItem isKindOfClass:[MDCButtonBar class]]) {
|
|
MDCButtonBar *leadingButtonBar = (MDCButtonBar *)firstItem;
|
|
XCTAssertEqual(1U, leadingButtonBar.subviews.count);
|
|
}
|
|
XCTAssertEqualObjects(self.navBar.titleView, elements[1]);
|
|
id secondItem = elements[2];
|
|
XCTAssertTrue([secondItem isKindOfClass:[MDCButtonBar class]]);
|
|
if ([secondItem isKindOfClass:[MDCButtonBar class]]) {
|
|
MDCButtonBar *trailingButtonBar = (MDCButtonBar *)secondItem;
|
|
XCTAssertEqual(2U, trailingButtonBar.subviews.count);
|
|
}
|
|
}
|
|
|
|
#pragma mark - Typography
|
|
|
|
- (void)testTypographyThemer {
|
|
MDCTypographyScheme *scheme = [[MDCTypographyScheme alloc] init];
|
|
[MDCNavigationBarTypographyThemer applyTypographyScheme:scheme toNavigationBar:self.navBar];
|
|
|
|
// To enforce 20 point size we are using fontWithName:size: and for some reason even though the
|
|
// printout looks idential comparing the fonts returns false. (Using fontWithSize: did not work
|
|
// for system font medium, instead it returned a regular font).
|
|
UIFont *titleFont = self.navBar.titleLabel.font;
|
|
XCTAssertEqualObjects(titleFont.fontName, scheme.headline6.fontName);
|
|
XCTAssertEqual(titleFont.pointSize, scheme.headline6.pointSize);
|
|
|
|
// Weight for Fonts was not introduced on iOS 8
|
|
// TODO: remove this when we drop iOS 8 support.
|
|
#if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0
|
|
XCTAssertEqual([NavigationBarTests weightForFont:titleFont],
|
|
[NavigationBarTests weightForFont:scheme.headline6]);
|
|
#endif
|
|
}
|
|
|
|
// I really don't like doing this but just to make sure the font has the right weight for the test
|
|
// I had to do this. Couldn't find any other way around it. When Apple support FontWithSize:
|
|
// properly for all fonts we can get rid of this.
|
|
+ (CGFloat)weightForFont:(UIFont *)font {
|
|
// The default font weight is UIFontWeightRegular, which is 0.0.
|
|
CGFloat weight = 0.0;
|
|
|
|
NSDictionary *fontTraits = [font.fontDescriptor objectForKey:UIFontDescriptorTraitsAttribute];
|
|
if (fontTraits) {
|
|
NSNumber *weightNumber = fontTraits[UIFontWeightTrait];
|
|
if (weightNumber != nil) {
|
|
weight = [weightNumber floatValue];
|
|
}
|
|
}
|
|
|
|
return weight;
|
|
}
|
|
|
|
#pragma mark - Color
|
|
|
|
- (void)testLeadingButtonBarItemsTintColorDefaultsToNil {
|
|
// Then
|
|
XCTAssertNil(self.navBar.leadingBarItemsTintColor);
|
|
}
|
|
|
|
- (void)testLeadingButtonBarItemsTintColorOverridesButtonBarTintColor {
|
|
// When
|
|
self.navBar.tintColor = UIColor.purpleColor;
|
|
self.navBar.leadingBarItemsTintColor = UIColor.orangeColor;
|
|
|
|
// Then
|
|
XCTAssertEqualObjects([self.navBar leadingButtonBar].tintColor, UIColor.orangeColor);
|
|
}
|
|
|
|
- (void)testSetLeadingButtonBarItemsTintColorToNilRevertsToTintColor {
|
|
// Given
|
|
self.navBar.tintColor = UIColor.purpleColor;
|
|
self.navBar.leadingBarItemsTintColor = UIColor.orangeColor;
|
|
|
|
// When
|
|
self.navBar.leadingBarItemsTintColor = nil;
|
|
|
|
// Then
|
|
XCTAssertEqualObjects([self.navBar leadingButtonBar].tintColor, UIColor.purpleColor);
|
|
}
|
|
|
|
- (void)testTrailingButtonBarItemsTintColorDefaultsToNil {
|
|
// Then
|
|
XCTAssertNil(self.navBar.trailingBarItemsTintColor);
|
|
}
|
|
|
|
- (void)testTrailingButtonBarItemsTintColorOverridesButtonBarTintColor {
|
|
// When
|
|
self.navBar.tintColor = UIColor.cyanColor;
|
|
self.navBar.trailingBarItemsTintColor = UIColor.greenColor;
|
|
|
|
// Then
|
|
XCTAssertEqualObjects([self.navBar trailingButtonBar].tintColor, UIColor.greenColor);
|
|
}
|
|
|
|
- (void)testSetTrailingButtonBarItemsTintColorToNilRevertsToTintColor {
|
|
// Given
|
|
self.navBar.tintColor = UIColor.cyanColor;
|
|
self.navBar.trailingBarItemsTintColor = UIColor.greenColor;
|
|
|
|
// When
|
|
self.navBar.trailingBarItemsTintColor = nil;
|
|
|
|
// then
|
|
XCTAssertEqualObjects([self.navBar trailingButtonBar].tintColor, UIColor.cyanColor);
|
|
}
|
|
|
|
- (void)testTraitCollectionDidChangeBlockCalledWhenTraitCollectionChanges {
|
|
// Given
|
|
MDCNavigationBar *navigationBar = [[MDCNavigationBar alloc] init];
|
|
XCTestExpectation *expectation =
|
|
[self expectationWithDescription:@"Called traitCollectionDidChange"];
|
|
navigationBar.traitCollectionDidChangeBlock =
|
|
^(MDCNavigationBar *_Nonnull navBar, UITraitCollection *_Nullable previousTraitCollection) {
|
|
[expectation fulfill];
|
|
};
|
|
|
|
// When
|
|
[navigationBar traitCollectionDidChange:nil];
|
|
|
|
// Then
|
|
[self waitForExpectations:@[ expectation ] timeout:1];
|
|
}
|
|
|
|
- (void)testTraitCollectionDidChangeBlockCalledWithExpectedParameters {
|
|
// Given
|
|
MDCNavigationBar *navigationBar = [[MDCNavigationBar alloc] init];
|
|
XCTestExpectation *expectation =
|
|
[self expectationWithDescription:@"Called traitCollectionDidChange"];
|
|
__block UITraitCollection *passedTraitCollection;
|
|
__block MDCNavigationBar *passedNavigationBar;
|
|
navigationBar.traitCollectionDidChangeBlock =
|
|
^(MDCNavigationBar *_Nonnull navBar, UITraitCollection *_Nullable previousTraitCollection) {
|
|
passedTraitCollection = previousTraitCollection;
|
|
passedNavigationBar = navBar;
|
|
[expectation fulfill];
|
|
};
|
|
|
|
// When
|
|
UITraitCollection *testCollection = [UITraitCollection traitCollectionWithDisplayScale:77];
|
|
[navigationBar traitCollectionDidChange:testCollection];
|
|
|
|
// Then
|
|
[self waitForExpectations:@[ expectation ] timeout:1];
|
|
XCTAssertEqual(passedTraitCollection, testCollection);
|
|
XCTAssertEqual(passedNavigationBar, navigationBar);
|
|
}
|
|
|
|
- (void)testDefaultElevations {
|
|
XCTAssertEqualWithAccuracy(self.navBar.mdc_currentElevation, 0, 0.001);
|
|
XCTAssertLessThan(self.navBar.mdc_overrideBaseElevation, 0);
|
|
}
|
|
|
|
- (void)testSettingBaseOverrideBaseElevationReturnsSetValue {
|
|
// Given
|
|
CGFloat fakeElevation = 99;
|
|
|
|
// When
|
|
self.navBar.mdc_overrideBaseElevation = fakeElevation;
|
|
|
|
// Then
|
|
XCTAssertEqualWithAccuracy(self.navBar.mdc_overrideBaseElevation, fakeElevation, 0.001);
|
|
}
|
|
|
|
@end
|