blob: 42e9ca4b1ccab39029397b682cec096d306733e2 [file]
// 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 "MaterialSnapshot.h"
#import "MaterialTabs.h"
static NSString *const kItemTitleShort1Latin = @"Quando";
static NSString *const kItemTitleShort2Latin = @"No";
static NSString *const kItemTitleShort3Latin = @"Facer";
static NSString *const kItemTitleLong1Latin =
@"Quando volumus maluisset cum ei, ad zril quodsi cum.";
static NSString *const kItemTitleLong2Latin = @"No quis modo nam, sea ea dicit tollit.";
static NSString *const kItemTitleLong3Latin =
@"Facer maluisset torquatos ad has, ad vix audiam assueverit mediocritatem.";
static NSString *const kItemTitleShort1Arabic = @"عل";
static NSString *const kItemTitleShort2Arabic = @"قد";
static NSString *const kItemTitleShort3Arabic = @"وتم";
static NSString *const kItemTitleLong1Arabic =
@"عل أخذ استطاعوا الانجليزية. قد وحتّى بزمام التبرعات مكن.";
static NSString *const kItemTitleLong2Arabic =
@"وتم عل والقرى إتفاقية, عن هذا وباءت الغالي وفرنسا.";
static NSString *const kItemTitleLong3Arabic = @"تحت أي قدما وإقامة. ودول بشرية اليابانية لان ما.";
/** Snapshot tests for MDCTabBar rendering .*/
@interface MDCTabBarSnapshotTests : MDCSnapshotTestCase
/** The view being tested. */
@property(nonatomic, strong) MDCTabBar *tabBar;
@property(nonatomic, strong) UITabBarItem *item1;
@property(nonatomic, strong) UITabBarItem *item2;
@property(nonatomic, strong) UITabBarItem *item3;
@property(nonatomic, strong) UITabBarItem *item4;
@property(nonatomic, strong) UITabBarItem *item5;
@end
@implementation MDCTabBarSnapshotTests
- (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;
CGSize imageSize = CGSizeMake(24, 24);
self.tabBar = [[MDCTabBar alloc] init];
self.item1 = [[UITabBarItem alloc]
initWithTitle:kItemTitleShort1Latin
image:[[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleCheckerboard]
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
tag:1];
self.item2 = [[UITabBarItem alloc]
initWithTitle:kItemTitleShort2Latin
image:[[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleDiagonalLines]
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
tag:2];
self.item3 = [[UITabBarItem alloc]
initWithTitle:kItemTitleShort3Latin
image:[[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleFramedX]
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
tag:3];
self.item3.badgeValue = kItemTitleShort1Latin;
self.item4 = [[UITabBarItem alloc]
initWithTitle:kItemTitleShort1Latin
image:[[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleEllipses]
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
tag:4];
self.item5 = [[UITabBarItem alloc]
initWithTitle:kItemTitleShort2Latin
image:[[UIImage mdc_testImageOfSize:imageSize
withStyle:MDCSnapshotTestImageStyleRectangles]
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
tag:5];
self.tabBar.items = @[ self.item1, self.item2, self.item3, self.item4, self.item5 ];
}
- (void)tearDown {
self.tabBar = nil;
self.item1 = nil;
self.item2 = nil;
self.item3 = nil;
self.item4 = nil;
self.item5 = nil;
[super tearDown];
}
- (void)changeLayoutToRTL {
[self changeViewToRTL:self.tabBar];
}
- (void)setTitlesToLatinLong {
self.item1.title = kItemTitleLong1Latin;
self.item2.title = kItemTitleLong2Latin;
self.item3.title = kItemTitleLong3Latin;
self.item3.badgeValue = kItemTitleLong1Latin;
self.item4.title = kItemTitleLong1Latin;
self.item5.title = kItemTitleLong2Latin;
}
- (void)setTitlesToArabicShort {
self.item1.title = kItemTitleShort1Arabic;
self.item2.title = kItemTitleShort2Arabic;
self.item3.title = kItemTitleShort3Arabic;
self.item3.badgeValue = kItemTitleShort1Arabic;
self.item4.title = kItemTitleShort1Arabic;
self.item5.title = kItemTitleShort2Arabic;
}
- (void)setTitlesToArabicLong {
self.item1.title = kItemTitleLong1Arabic;
self.item2.title = kItemTitleLong2Arabic;
self.item3.title = kItemTitleLong3Arabic;
self.item3.badgeValue = kItemTitleLong1Arabic;
self.item4.title = kItemTitleLong1Arabic;
self.item5.title = kItemTitleLong2Arabic;
}
- (void)generateSnapshotAndVerifyForView:(UIView *)view {
UIView *snapshotView = [view mdc_addToBackgroundView];
[self snapshotVerifyView:snapshotView];
}
#pragma mark - Alignment tests
- (void)testTabBarDefaultItemsFitLatinLTR {
// When
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarDefaultItemsFitArabicRTL {
// When
[self setTitlesToArabicShort];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarJustifiedItemsFitLatinLTR {
// When
self.tabBar.alignment = MDCTabBarAlignmentJustified;
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarJustifiedItemsFitArabicRTL {
// When
self.tabBar.alignment = MDCTabBarAlignmentJustified;
[self setTitlesToArabicShort];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarCenterItemsFitLatinLTR {
// When
self.tabBar.alignment = MDCTabBarAlignmentCenter;
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarCenterItemsFitArabicRTL {
// When
self.tabBar.alignment = MDCTabBarAlignmentCenter;
[self setTitlesToArabicShort];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarCenterSelectedItemsFitLatinLTR {
// When
self.tabBar.alignment = MDCTabBarAlignmentCenterSelected;
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarCenterSelectedItemsFitArabicRTL {
// When
self.tabBar.alignment = MDCTabBarAlignmentCenterSelected;
[self setTitlesToArabicShort];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarLeadingItemsFitLatinLTR {
// When
self.tabBar.alignment = MDCTabBarAlignmentLeading;
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarLeadingItemsFitArabicRTL {
// When
self.tabBar.alignment = MDCTabBarAlignmentLeading;
[self setTitlesToArabicShort];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
#pragma mark - Long Strings
- (void)testTabBarDefaultItemsDontFitLatinLTR {
// When
[self setTitlesToLatinLong];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarDefaultItemsDontFitArabicRTL {
// When
[self setTitlesToArabicLong];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarJustifiedItemsDontFitLatinLTR {
// When
self.tabBar.alignment = MDCTabBarAlignmentJustified;
[self setTitlesToLatinLong];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarJustifiedItemsDontFitArabicRTL {
// When
self.tabBar.alignment = MDCTabBarAlignmentJustified;
[self setTitlesToArabicLong];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarCenterItemsDontFitLatinLTR {
// When
self.tabBar.alignment = MDCTabBarAlignmentCenter;
[self setTitlesToLatinLong];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarCenterItemsDontFitArabicRTL {
// When
self.tabBar.alignment = MDCTabBarAlignmentCenter;
[self setTitlesToArabicLong];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarCenterSelectedItemsDontFitLatinLTR {
// When
self.tabBar.alignment = MDCTabBarAlignmentCenterSelected;
[self setTitlesToLatinLong];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarCenterSelectedItemsDontFitArabicRTL {
// When
self.tabBar.alignment = MDCTabBarAlignmentCenterSelected;
[self setTitlesToArabicLong];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarLeadingItemsDontFitLatinLTR {
// When
self.tabBar.alignment = MDCTabBarAlignmentLeading;
[self setTitlesToLatinLong];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarLeadingItemsDontFitArabicRTL {
// When
self.tabBar.alignment = MDCTabBarAlignmentLeading;
[self setTitlesToArabicLong];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
#pragma mark - Style Tests
- (void)testTabBarDefaultAlignmentTitledImagesAppearanceLatinLTR {
// When
self.tabBar.itemAppearance = MDCTabBarItemAppearanceTitledImages;
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarDefaultAlignmentTitledImagesAppearanceArabicRTL {
// When
self.tabBar.itemAppearance = MDCTabBarItemAppearanceTitledImages;
[self setTitlesToArabicShort];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarDefaultAlignmentImagesAppearanceLatinLTR {
// When
self.tabBar.itemAppearance = MDCTabBarItemAppearanceImages;
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarDefaultAlignmentImagesAppearanceArabicRTL {
// When
self.tabBar.itemAppearance = MDCTabBarItemAppearanceImages;
[self setTitlesToArabicShort];
[self changeLayoutToRTL];
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
- (void)testTabBarItemBadgeColors {
// When
self.tabBar.itemAppearance = MDCTabBarItemAppearanceTitledImages;
self.item1.badgeValue = kItemTitleShort3Latin;
self.item1.badgeColor = UIColor.cyanColor;
self.item2.badgeValue = kItemTitleShort1Latin;
self.item2.badgeColor = UIColor.orangeColor;
self.item3.badgeValue = kItemTitleShort2Latin;
self.item3.badgeColor = UIColor.blackColor;
self.item4.badgeValue = kItemTitleShort1Latin;
self.item4.badgeColor = UIColor.blueColor;
self.item5.badgeValue = kItemTitleShort3Latin;
self.item5.badgeColor = UIColor.whiteColor;
self.tabBar.frame = CGRectMake(0, 0, 480, 100);
[self.tabBar sizeToFit];
// Then
[self generateSnapshotAndVerifyForView:self.tabBar];
}
@end