blob: c8eeb0df62766e92ab98c491a2569a4a58eb251e [file] [log] [blame] [edit]
// 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)
}
}