mirror of
https://github.com/material-components/material-components-ios.git
synced 2026-02-20 08:27:32 +08:00
Adds conformance to MDCElevatable and MDCElevationOverriding to MDCMultilineTextField. Closes #8011
186 lines
7.2 KiB
Swift
186 lines
7.2 KiB
Swift
// Copyright 2016-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.
|
|
|
|
// swiftlint:disable function_body_length
|
|
// swiftlint:disable type_body_length
|
|
|
|
import XCTest
|
|
import MaterialComponents.MaterialTextFields
|
|
|
|
class MultilineTextFieldTests: XCTestCase {
|
|
func testAttributedSetters() {
|
|
let textField = MDCMultilineTextField()
|
|
|
|
XCTAssertNotNil(textField.textView)
|
|
|
|
let string = "attributed"
|
|
textField.attributedPlaceholder = NSAttributedString(string: string)
|
|
XCTAssertEqual(textField.attributedPlaceholder?.string, string)
|
|
|
|
textField.attributedText = NSAttributedString(string: string)
|
|
XCTAssertEqual(textField.attributedText?.string, string)
|
|
}
|
|
|
|
func testCopying() {
|
|
let textField = MDCMultilineTextField()
|
|
|
|
textField.textInsetsMode = .never
|
|
textField.borderView?.borderFillColor = .blue
|
|
textField.borderView?.borderPath = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 100, height: 100))
|
|
textField.borderView?.borderPath?.lineWidth = 2
|
|
textField.borderView?.borderStrokeColor = .green
|
|
textField.clearButton.tintColor = .red
|
|
textField.clearButtonMode = .always
|
|
textField.cursorColor = .white
|
|
textField.font = UIFont.systemFont(ofSize: UIFont.labelFontSize)
|
|
textField.hidesPlaceholderOnInput = false
|
|
textField.isEnabled = false
|
|
textField.placeholder = "test"
|
|
textField.text = "test"
|
|
textField.textColor = .red
|
|
textField.trailingViewMode = .never
|
|
textField.underline?.color = .red
|
|
textField.underline?.lineHeight = 10
|
|
|
|
if let textFieldCopy = textField.copy() as? MDCMultilineTextField {
|
|
XCTAssertNotNil(textField.textView)
|
|
XCTAssertTrue(textField.subviews.contains(textField.textView!))
|
|
|
|
XCTAssertEqual(textField.textInsetsMode, textFieldCopy.textInsetsMode)
|
|
XCTAssertEqual(textField.attributedPlaceholder, textFieldCopy.attributedPlaceholder)
|
|
XCTAssertEqual(textField.attributedText, textFieldCopy.attributedText)
|
|
XCTAssertEqual(textField.borderView?.borderFillColor, textFieldCopy.borderView?.borderFillColor)
|
|
XCTAssertEqual(textField.borderView?.borderPath?.bounds, textFieldCopy.borderView?.borderPath?.bounds)
|
|
XCTAssertEqual(textField.borderView?.borderPath?.lineWidth, textFieldCopy.borderView?.borderPath?.lineWidth)
|
|
XCTAssertEqual(textField.borderView?.borderStrokeColor, textFieldCopy.borderView?.borderStrokeColor)
|
|
XCTAssertEqual(textField.clearButton.tintColor, textFieldCopy.clearButton.tintColor)
|
|
XCTAssertEqual(textField.clearButtonMode, textFieldCopy.clearButtonMode)
|
|
XCTAssertEqual(textField.cursorColor, textFieldCopy.cursorColor)
|
|
XCTAssertEqual(textField.font, textFieldCopy.font)
|
|
XCTAssertEqual(textField.hidesPlaceholderOnInput, textFieldCopy.hidesPlaceholderOnInput)
|
|
XCTAssertEqual(textField.isEnabled, textFieldCopy.isEnabled)
|
|
XCTAssertEqual(textField.mdc_adjustsFontForContentSizeCategory,
|
|
textFieldCopy.mdc_adjustsFontForContentSizeCategory)
|
|
XCTAssertEqual(textField.placeholder, textFieldCopy.placeholder)
|
|
XCTAssertEqual(textField.text, textFieldCopy.text)
|
|
XCTAssertEqual(textField.textColor, textFieldCopy.textColor)
|
|
XCTAssertEqual(textField.trailingViewMode, textFieldCopy.trailingViewMode)
|
|
XCTAssertEqual(textField.underline?.color, textFieldCopy.underline?.color)
|
|
XCTAssertEqual(textField.underline?.lineHeight, textFieldCopy.underline?.lineHeight)
|
|
} else {
|
|
XCTFail("No copy or copy is wrong class")
|
|
}
|
|
}
|
|
|
|
func testFontChange() {
|
|
let textField = MDCMultilineTextField()
|
|
|
|
textField.font = UIFont.systemFont(ofSize: UIFont.labelFontSize)
|
|
XCTAssertEqual(UIFont.systemFont(ofSize: UIFont.labelFontSize), textField.font)
|
|
XCTAssertNotEqual(UIFont.systemFont(ofSize: UIFont.smallSystemFontSize), textField.font)
|
|
}
|
|
|
|
func testMDCDynamicTypeAPI() {
|
|
let textField = MDCMultilineTextField()
|
|
|
|
textField.mdc_adjustsFontForContentSizeCategory = true
|
|
XCTAssertTrue(textField.mdc_adjustsFontForContentSizeCategory)
|
|
}
|
|
|
|
func testSizing() {
|
|
let textField = MDCMultilineTextField(frame: CGRect(x: 0, y: 0, width: 300, height: 0))
|
|
XCTAssertEqual(textField.frame.height, 0)
|
|
|
|
textField.frame = CGRect(x: 0, y: 0, width: 300, height: 40)
|
|
XCTAssertEqual(textField.frame.height, 40)
|
|
|
|
textField.sizeToFit()
|
|
XCTAssertEqual(textField.frame.height, 49)
|
|
|
|
textField.leadingUnderlineLabel.text = "Helper"
|
|
textField.sizeToFit()
|
|
XCTAssertEqual(textField.frame.height, 66)
|
|
|
|
textField.textInsetsMode = .never
|
|
XCTAssertEqual(textField.textInsetsMode, .never)
|
|
}
|
|
|
|
func testTrailingView() {
|
|
let trailingView = UIView()
|
|
let textField = MDCMultilineTextField()
|
|
|
|
textField.trailingView = trailingView
|
|
XCTAssertEqual(textField.trailingView, trailingView)
|
|
}
|
|
|
|
func testUnderlineSetters() {
|
|
let textField = MDCMultilineTextField()
|
|
|
|
textField.underline?.color = .red
|
|
textField.underline?.lineHeight = 10
|
|
|
|
XCTAssertEqual(textField.underline?.color, .red)
|
|
if let underline = textField.underline {
|
|
XCTAssertEqual(underline.color, .red)
|
|
XCTAssertEqual(underline.color, textField.underline?.color)
|
|
|
|
XCTAssertEqual(underline.lineHeight, 10)
|
|
XCTAssertEqual(underline.lineHeight, textField.underline?.lineHeight)
|
|
} else {
|
|
XCTFail("No underline or underline is wrong class")
|
|
}
|
|
}
|
|
|
|
func testTraitCollectionDidChangeBlockCalledWithExpectedParameters() {
|
|
// Given
|
|
let testTextField = MDCMultilineTextField()
|
|
let expectation = XCTestExpectation(description: "traitCollection")
|
|
var passedTraitCollection: UITraitCollection? = nil
|
|
var passedTextField: MDCMultilineTextField? = nil
|
|
testTextField.traitCollectionDidChangeBlock = { (textField, traitCollection) in
|
|
passedTraitCollection = traitCollection
|
|
passedTextField = textField
|
|
expectation.fulfill()
|
|
}
|
|
let fakeTraitCollection = UITraitCollection(displayScale: 7)
|
|
|
|
// When
|
|
testTextField.traitCollectionDidChange(fakeTraitCollection)
|
|
|
|
// Then
|
|
self.wait(for: [expectation], timeout: 1)
|
|
XCTAssertEqual(passedTraitCollection, fakeTraitCollection)
|
|
XCTAssertEqual(passedTextField, testTextField)
|
|
}
|
|
|
|
// MARK - Material Elevation
|
|
|
|
func testDefaultBaseElevationOverrideIsNegative() {
|
|
// Then
|
|
XCTAssertLessThan(MDCMultilineTextField().mdc_overrideBaseElevation, 0);
|
|
}
|
|
|
|
func testSettingOverrideBaseElevationReturnsSetValue() {
|
|
// Given
|
|
let expectedBaseElevation: CGFloat = 99
|
|
let textField = MDCMultilineTextField()
|
|
|
|
// When
|
|
textField.mdc_overrideBaseElevation = expectedBaseElevation
|
|
|
|
// Then
|
|
XCTAssertEqual(textField.mdc_overrideBaseElevation, expectedBaseElevation, accuracy: 0.001)
|
|
}
|
|
}
|