mirror of
https://github.com/material-components/material-components-ios.git
synced 2026-02-20 08:27:32 +08:00
168 lines
6.9 KiB
Objective-C
168 lines
6.9 KiB
Objective-C
// 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
|