blob: 2cbfa41a08518eaba3be71b9ee0d926ee256886b [file] [log] [blame]
// 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 <XCTest/XCTest.h>
#import "MDCTextControlLabelBehavior.h"
#import "MaterialTextControlsPrivate+BaseStyle.h"
#import "MDCTextControlAssistiveLabelDrawPriority.h"
#import "MaterialTextControlsPrivate+Shared.h"
#import "MaterialTextControlsPrivate+TextFields.h"
@interface MDCBaseTextFieldLayout (Testing)
- (CGFloat)textHeightWithFont:(UIFont *)font;
@end
@interface MDCBaseTextFieldLayoutTests : XCTestCase
@end
@implementation MDCBaseTextFieldLayoutTests
#pragma mark Helpers
- (UIView *)createSideView {
UIView *sideView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
sideView.backgroundColor = [UIColor blueColor];
return sideView;
}
- (MDCBaseTextFieldLayout *)createLayoutWithSideViewsAndViewMode:(UITextFieldViewMode)viewMode
isEditing:(BOOL)isEditing {
CGSize textFieldSize = CGSizeMake(100, 30);
UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]];
UIFont *floatingFont = [font fontWithSize:(font.pointSize * (CGFloat)0.5)];
MDCTextControlAssistiveLabelView *assistiveLabelView =
[[MDCTextControlAssistiveLabelView alloc] init];
MDCTextControlVerticalPositioningReferenceBase *positioningReference =
[[MDCTextControlVerticalPositioningReferenceBase alloc] init];
MDCBaseTextFieldLayout *layout = [[MDCBaseTextFieldLayout alloc]
initWithTextFieldSize:textFieldSize
positioningReference:positioningReference
horizontalPositioningReference:[[MDCTextControlHorizontalPositioningReference alloc] init]
text:@"Text"
font:font
floatingFont:floatingFont
label:[[UILabel alloc] init]
labelPosition:MDCTextControlLabelPositionFloating
labelBehavior:MDCTextControlLabelBehaviorFloats
sideViewAlignment:MDCTextControlTextFieldSideViewAlignmentCenteredInContainer
leadingView:[self createSideView]
leadingViewMode:viewMode
trailingView:[self createSideView]
trailingViewMode:viewMode
clearButtonSideLength:19
clearButtonMode:viewMode
leadingAssistiveLabel:assistiveLabelView.leadingAssistiveLabel
trailingAssistiveLabel:assistiveLabelView.trailingAssistiveLabel
assistiveLabelDrawPriority:MDCTextControlAssistiveLabelDrawPriorityTrailing
customAssistiveLabelDrawPriority:0
isRTL:NO
isEditing:isEditing];
return layout;
}
#pragma mark Tests
- (void)testTextHeightWithFont {
// Given
MDCBaseTextFieldLayout *emptyLayout = [[MDCBaseTextFieldLayout alloc] init];
UIFont *systemFont = [UIFont systemFontOfSize:[UIFont systemFontSize]];
// When
CGFloat ceiledLineHeight = (CGFloat)ceil((double)systemFont.lineHeight);
CGFloat calculatedTextHeight = [emptyLayout textHeightWithFont:systemFont];
// Then
XCTAssertEqual(ceiledLineHeight, calculatedTextHeight);
}
- (void)testLeftAndRightViewsWithViewModeAlways {
// Given
MDCBaseTextFieldLayout *nonEditingLayout =
[self createLayoutWithSideViewsAndViewMode:UITextFieldViewModeAlways isEditing:NO];
MDCBaseTextFieldLayout *editingLayout =
[self createLayoutWithSideViewsAndViewMode:UITextFieldViewModeAlways isEditing:YES];
// Then
XCTAssertTrue(nonEditingLayout.displaysLeadingView);
XCTAssertTrue(nonEditingLayout.displaysTrailingView);
XCTAssertTrue(editingLayout.displaysLeadingView);
XCTAssertTrue(editingLayout.displaysTrailingView);
}
- (void)testLeftAndRightViewsWithViewModeWhileEditing {
// Given
MDCBaseTextFieldLayout *nonEditingLayout =
[self createLayoutWithSideViewsAndViewMode:UITextFieldViewModeWhileEditing isEditing:NO];
MDCBaseTextFieldLayout *editingLayout =
[self createLayoutWithSideViewsAndViewMode:UITextFieldViewModeWhileEditing isEditing:YES];
// Then
XCTAssertFalse(nonEditingLayout.displaysLeadingView);
XCTAssertFalse(nonEditingLayout.displaysTrailingView);
XCTAssertTrue(editingLayout.displaysLeadingView);
XCTAssertTrue(editingLayout.displaysTrailingView);
}
- (void)testLeftAndRightViewsWithViewModeUnlessEditing {
// Given
MDCBaseTextFieldLayout *nonEditingLayout =
[self createLayoutWithSideViewsAndViewMode:UITextFieldViewModeUnlessEditing isEditing:NO];
MDCBaseTextFieldLayout *editingLayout =
[self createLayoutWithSideViewsAndViewMode:UITextFieldViewModeUnlessEditing isEditing:YES];
// Then
XCTAssertTrue(nonEditingLayout.displaysLeadingView);
XCTAssertTrue(nonEditingLayout.displaysTrailingView);
XCTAssertFalse(editingLayout.displaysLeadingView);
XCTAssertFalse(editingLayout.displaysTrailingView);
}
- (void)testLeftAndRightViewsWithViewModeNever {
// Given
MDCBaseTextFieldLayout *nonEditingLayout =
[self createLayoutWithSideViewsAndViewMode:UITextFieldViewModeNever isEditing:NO];
MDCBaseTextFieldLayout *editingLayout =
[self createLayoutWithSideViewsAndViewMode:UITextFieldViewModeNever isEditing:YES];
// Then
XCTAssertFalse(nonEditingLayout.displaysLeadingView);
XCTAssertFalse(nonEditingLayout.displaysTrailingView);
XCTAssertFalse(editingLayout.displaysLeadingView);
XCTAssertFalse(editingLayout.displaysTrailingView);
}
- (void)testLabelFrameWithLabelPosition {
// Given
MDCBaseTextFieldLayout *layout = [[MDCBaseTextFieldLayout alloc] init];
// When
layout.labelFrameNormal = CGRectMake(5, 5, 100, 20);
layout.labelFrameFloating = CGRectMake(5, 0, 100, 20);
// Then
CGRect labelFrameWithLabelPositionFloating =
[layout labelFrameWithLabelPosition:MDCTextControlLabelPositionFloating];
CGRect labelFrameWithLabelPositionNormal =
[layout labelFrameWithLabelPosition:MDCTextControlLabelPositionNormal];
CGRect labelFrameWithLabelPositionNone =
[layout labelFrameWithLabelPosition:MDCTextControlLabelPositionNone];
XCTAssertTrue(CGRectEqualToRect(labelFrameWithLabelPositionFloating, layout.labelFrameFloating));
XCTAssertTrue(CGRectEqualToRect(labelFrameWithLabelPositionNormal, layout.labelFrameNormal));
XCTAssertTrue(CGRectEqualToRect(labelFrameWithLabelPositionNone, CGRectZero));
}
@end