blob: bd29d6b9ca75345edfcd4bfe1d448ff4cf100ab8 [file] [log] [blame] [edit]
// Copyright 2019-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 <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
#import "../../src/private/MDCBottomNavigationItemView.h"
#import "MaterialBottomNavigation.h"
#import "MaterialInk.h"
#import "MaterialSnapshot.h"
#import "supplemental/MDCBottomNavigationSnapshotTestMutableTraitCollection.h"
#import "supplemental/MDCFakeBottomNavigationBar.h"
/** Snapshot tests for MDCBottomNavigationBar's @c alignment property. */
@interface MDCBottomNavigationBarAlignmentSnapshotTests : MDCSnapshotTestCase
@property(nonatomic, strong) MDCFakeBottomNavigationBar *navigationBar;
@end
@implementation MDCBottomNavigationBarAlignmentSnapshotTests
- (void)setUp {
[super setUp];
// Uncomment below to recreate all the goldens (or add the following line to the specific
// test you wish to recreate the golden for).
// self.recordMode = YES;
self.navigationBar = [[MDCFakeBottomNavigationBar alloc] init];
CGSize imageSize = CGSizeMake(24, 24);
UITabBarItem *tabItem1 = [[UITabBarItem alloc]
initWithTitle:@"Item 1"
image:[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleEllipses]
tag:1];
UITabBarItem *tabItem2 = [[UITabBarItem alloc]
initWithTitle:@"Item 2"
image:[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleCheckerboard]
tag:2];
tabItem2.badgeValue = @"888+";
UITabBarItem *tabItem3 = [[UITabBarItem alloc]
initWithTitle:@"Item 3"
image:[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleFramedX]
tag:3];
UITabBarItem *tabItem4 = [[UITabBarItem alloc]
initWithTitle:@"Item 4"
image:[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleRectangles]
tag:4];
UITabBarItem *tabItem5 = [[UITabBarItem alloc]
initWithTitle:@"Item 5"
image:[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleDiagonalLines]
tag:5];
self.navigationBar.items = @[ tabItem1, tabItem2, tabItem3, tabItem4, tabItem5 ];
self.navigationBar.titleVisibility = MDCBottomNavigationBarTitleVisibilityAlways;
self.navigationBar.selectedItem = tabItem2;
}
#pragma mark - Helpers
- (void)generateAndVerifySnapshot {
CGSize fitSize = [self.navigationBar sizeThatFits:CGSizeMake(1600, 120)];
self.navigationBar.frame = CGRectMake(0, 0, fitSize.width, fitSize.height);
[self performInkTouchOnBar:self.navigationBar item:self.navigationBar.items.firstObject];
UIView *backgroundView = [self.navigationBar mdc_addToBackgroundView];
[self snapshotVerifyView:backgroundView];
}
- (void)performInkTouchOnBar:(MDCBottomNavigationBar *)navigationBar item:(UITabBarItem *)item {
[navigationBar layoutIfNeeded];
MDCBottomNavigationItemView *itemView =
(MDCBottomNavigationItemView *)[navigationBar viewForItem:item];
[itemView.inkView startTouchBeganAtPoint:CGPointMake(CGRectGetMidX(itemView.bounds),
CGRectGetMidY(itemView.bounds))
animated:NO
withCompletion:nil];
}
- (void)changeToRTLAndArabic {
static UIFont *urduFont;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
urduFont = [UIFont fontWithName:@"NotoNastaliqUrdu" size:12];
});
self.navigationBar.itemTitleFont = urduFont;
self.navigationBar.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;
for (UITabBarItem *item in self.navigationBar.items) {
item.title = @"ما تنفّس.";
UIView *view = [self.navigationBar viewForItem:item];
view.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;
}
self.navigationBar.items[1].badgeValue = @"أورا";
}
#pragma mark - Alignment .Justified
- (void)testJustifiedAlignmentWithUnspecifiedHorizontalSizeClassInLTR {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassUnspecified;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustified;
self.navigationBar.traitCollectionOverride = traitCollection;
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAlignmentWithUnspecifiedHorizontalSizeClassInRTL {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassUnspecified;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustified;
self.navigationBar.traitCollectionOverride = traitCollection;
[self changeToRTLAndArabic];
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAlignmentWithCompactHorizontalSizeClassInLTR {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassCompact;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustified;
self.navigationBar.traitCollectionOverride = traitCollection;
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAlignmentWithCompactHorizontalSizeClassInRTL {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassCompact;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustified;
self.navigationBar.traitCollectionOverride = traitCollection;
[self changeToRTLAndArabic];
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAlignmentWithRegularHorizontalSizeClassInLTR {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassRegular;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustified;
self.navigationBar.traitCollectionOverride = traitCollection;
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAlignmentWithRegularHorizontalSizeClassInRTL {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassRegular;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustified;
self.navigationBar.traitCollectionOverride = traitCollection;
[self changeToRTLAndArabic];
// Then
[self generateAndVerifySnapshot];
}
#pragma mark - Alignment .JustifiedAdjacent
- (void)testJustifiedAdjacentAlignmentWithUnspecifiedHorizontalSizeClassInLTR {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassUnspecified;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustifiedAdjacentTitles;
self.navigationBar.traitCollectionOverride = traitCollection;
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAdjacentAlignmentWithUnspecifiedHorizontalSizeClassInRTL {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassUnspecified;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustifiedAdjacentTitles;
self.navigationBar.traitCollectionOverride = traitCollection;
[self changeToRTLAndArabic];
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAdjacentAlignmentWithCompactHorizontalSizeClassInLTR {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassCompact;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustifiedAdjacentTitles;
self.navigationBar.traitCollectionOverride = traitCollection;
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAdjacentAlignmentWithCompactHorizontalSizeClassInRTL {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassCompact;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustifiedAdjacentTitles;
self.navigationBar.traitCollectionOverride = traitCollection;
[self changeToRTLAndArabic];
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAdjacentAlignmentWithRegularHorizontalSizeClassInLTR {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassRegular;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustifiedAdjacentTitles;
self.navigationBar.traitCollectionOverride = traitCollection;
// Then
[self generateAndVerifySnapshot];
}
- (void)testJustifiedAdjacentAlignmentWithRegularHorizontalSizeClassInRTL {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassRegular;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentJustifiedAdjacentTitles;
self.navigationBar.traitCollectionOverride = traitCollection;
[self changeToRTLAndArabic];
// Then
[self generateAndVerifySnapshot];
}
#pragma mark - Alignment .Centered
- (void)testCenteredAlignmentWithUnspecifiedHorizontalSizeClassInLTR {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassUnspecified;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentCentered;
self.navigationBar.traitCollectionOverride = traitCollection;
// Then
[self generateAndVerifySnapshot];
}
- (void)testCenteredAlignmentWithUnspecifiedHorizontalSizeClassInRTL {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassUnspecified;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentCentered;
self.navigationBar.traitCollectionOverride = traitCollection;
[self changeToRTLAndArabic];
// Then
[self generateAndVerifySnapshot];
}
- (void)testCenteredAlignmentWithCompactHorizontalSizeClassInLTR {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassCompact;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentCentered;
self.navigationBar.traitCollectionOverride = traitCollection;
// Then
[self generateAndVerifySnapshot];
}
- (void)testCenteredAlignmentWithCompactHorizontalSizeClassInRTL {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassCompact;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentCentered;
self.navigationBar.traitCollectionOverride = traitCollection;
[self changeToRTLAndArabic];
// Then
[self generateAndVerifySnapshot];
}
- (void)testCenteredAlignmentWithRegularHorizontalSizeClassInLTR {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassRegular;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentCentered;
self.navigationBar.traitCollectionOverride = traitCollection;
// Then
[self generateAndVerifySnapshot];
}
- (void)testCenteredAlignmentWithRegularHorizontalSizeClassInRTL {
// Given
MDCBottomNavigationSnapshotTestMutableTraitCollection *traitCollection =
[[MDCBottomNavigationSnapshotTestMutableTraitCollection alloc] init];
traitCollection.horizontalSizeClassOverride = UIUserInterfaceSizeClassRegular;
// When
self.navigationBar.alignment = MDCBottomNavigationBarAlignmentCentered;
self.navigationBar.traitCollectionOverride = traitCollection;
[self changeToRTLAndArabic];
// Then
[self generateAndVerifySnapshot];
}
@end