blob: 50626d3860c174b0bb5378297b2d1ee504205f4b [file]
/*
Copyright 2017-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 "MaterialTypography.h"
@interface SystemFontLoaderTests : XCTestCase
@end
@implementation SystemFontLoaderTests
- (void)testWeights {
// Given
CGFloat size = 10.0;
MDCSystemFontLoader *fontLoader = [[MDCSystemFontLoader alloc] init];
// Then
if ([UIFont respondsToSelector:@selector(systemFontOfSize:weight:)]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpartial-availability"
XCTAssertEqual([fontLoader lightFontOfSize:size],
[UIFont systemFontOfSize:size weight:UIFontWeightLight]);
XCTAssertEqual([fontLoader regularFontOfSize:size],
[UIFont systemFontOfSize:size weight:UIFontWeightRegular]);
XCTAssertEqual([fontLoader mediumFontOfSize:size],
[UIFont systemFontOfSize:size weight:UIFontWeightMedium]);
XCTAssertEqual([fontLoader boldFontOfSize:size],
[UIFont systemFontOfSize:size weight:UIFontWeightSemibold]);
#pragma clang diagnostic pop
} else {
// Fallback on earlier versions
XCTAssertEqual([fontLoader lightFontOfSize:size],
[UIFont fontWithName:@"HelveticaNeue-Light" size:size]);
XCTAssertEqual([fontLoader regularFontOfSize:size], [UIFont systemFontOfSize:size]);
XCTAssertEqual([fontLoader mediumFontOfSize:size],
[UIFont fontWithName:@"HelveticaNeue-Medium" size:size]);
XCTAssertEqual([fontLoader boldFontOfSize:size], [UIFont boldSystemFontOfSize:size]);
}
UIFontDescriptor *fontDescriptorWithBoldItalic = [[UIFont systemFontOfSize:size].fontDescriptor
fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold | UIFontDescriptorTraitItalic];
XCTAssertEqual([fontLoader boldItalicFontOfSize:size],
[UIFont fontWithDescriptor:fontDescriptorWithBoldItalic size:size]);
XCTAssertEqual([fontLoader italicFontOfSize:size], [UIFont italicSystemFontOfSize:size]);
}
- (void)testIsLargeForContrastRatio {
// Given
CGFloat smallSize = 10.0f;
CGFloat largeIfBoldSize = 15.0f;
CGFloat largeSize = 18.0f;
MDCSystemFontLoader *fontLoader = [[MDCSystemFontLoader alloc] init];
// Then
XCTAssertFalse([fontLoader isLargeForContrastRatios:[UIFont systemFontOfSize:smallSize]]);
XCTAssertFalse([fontLoader isLargeForContrastRatios:[UIFont boldSystemFontOfSize:smallSize]]);
XCTAssertTrue(
[fontLoader isLargeForContrastRatios:[UIFont boldSystemFontOfSize:largeIfBoldSize]]);
XCTAssertTrue([fontLoader isLargeForContrastRatios:[UIFont systemFontOfSize:largeSize]]);
// Light
XCTAssertFalse([fontLoader isLargeForContrastRatios:[fontLoader lightFontOfSize:smallSize]]);
XCTAssertFalse(
[fontLoader isLargeForContrastRatios:[fontLoader lightFontOfSize:largeIfBoldSize]]);
XCTAssertTrue([fontLoader isLargeForContrastRatios:[fontLoader lightFontOfSize:largeSize]]);
// Regular
XCTAssertFalse([fontLoader isLargeForContrastRatios:[fontLoader regularFontOfSize:smallSize]]);
XCTAssertFalse(
[fontLoader isLargeForContrastRatios:[fontLoader regularFontOfSize:largeIfBoldSize]]);
XCTAssertTrue([fontLoader isLargeForContrastRatios:[fontLoader regularFontOfSize:largeSize]]);
// Medium
XCTAssertFalse([fontLoader isLargeForContrastRatios:[fontLoader mediumFontOfSize:smallSize]]);
// We treat medium as large for MDC accesibility.
XCTAssertTrue(
[fontLoader isLargeForContrastRatios:[fontLoader mediumFontOfSize:largeIfBoldSize]]);
XCTAssertTrue([fontLoader isLargeForContrastRatios:[fontLoader mediumFontOfSize:largeSize]]);
// Bold
XCTAssertFalse([fontLoader isLargeForContrastRatios:[fontLoader boldFontOfSize:smallSize]]);
XCTAssertTrue([fontLoader isLargeForContrastRatios:[fontLoader boldFontOfSize:largeIfBoldSize]]);
XCTAssertTrue([fontLoader isLargeForContrastRatios:[fontLoader boldFontOfSize:largeSize]]);
// Italic
XCTAssertFalse([fontLoader isLargeForContrastRatios:[fontLoader italicFontOfSize:smallSize]]);
XCTAssertFalse(
[fontLoader isLargeForContrastRatios:[fontLoader italicFontOfSize:largeIfBoldSize]]);
XCTAssertTrue([fontLoader isLargeForContrastRatios:[fontLoader italicFontOfSize:largeSize]]);
// Bold Italic
XCTAssertFalse([fontLoader isLargeForContrastRatios:[fontLoader boldItalicFontOfSize:smallSize]]);
XCTAssertTrue(
[fontLoader isLargeForContrastRatios:[fontLoader boldItalicFontOfSize:largeIfBoldSize]]);
XCTAssertTrue([fontLoader isLargeForContrastRatios:[fontLoader boldItalicFontOfSize:largeSize]]);
}
- (void)testUIFontWeightMediumValue {
// Given
CGFloat MDCFontWeightMedium = (CGFloat)0.23;
// Ensure that our placehold value for UIFontWeightMedium matches the real value.
// We are defining it for < iOS 8.2 in MDCTypography.m
// TODO(#2651): Remove the pragmas and pointer check below
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpartial-availability"
#pragma clang diagnostic ignored "-Wtautological-compare"
if (&UIFontWeightMedium != NULL) {
XCTAssertEqualWithAccuracy(UIFontWeightMedium, MDCFontWeightMedium, FLT_EPSILON);
}
#pragma clang diagnostic pop
}
@end