material-components_materia.../components/TextFields/tests/unit/TextFieldControllerLegacyTests.swift
Will Larche 62d5a4fa85 [TextFields] Feature branch merge: Clarity, Safety, Docs, Comments, Formatting (#2634)
* [TextFields] Full width changes. (#2590)

* [TextFields] Propagating changes to themers. (#2585)

* [TextFields] Propagating changes to themers.

* [TextFields] Updates to themer examples.

* [TextFields] Base controller class files (#2582)

* [TextFields] New Base class files.

* [TextFields] Naming corrections.

* [TextFields] Formatting.

* [TextFields] Replacing -Default with -Underline (#2583)

* [TextFields] Adding underline controller.

* [TextFields] Changes to umbrella import file and removing default controllers.

* [TextFields] Renaming one file.

* [TextFields] Updated controller headers. (#2584)

* [TextFields] Updating examples. (#2586)

* [TextFields] Running clang-format on the elements. (#2587)

* [TextFields] Running format on the element itself.

* [TextFields] Minor formatting.

* [TextFields] Updating tests and formatting. (#2588)

* [TextFields] Filled controller changes. (#2589)

* [TextFields] Legacy controller comments, naming, and formatting. (#2591)

* [TextFields] Legacy controller comments, naming, and formatting.

* [TextFields] Adding safety to legacy default init.

* [TextFields] Adding safety to Legacy Default init.

* [TextFields] Formatting Legacy Default.

* [TextFields] Formatting Legacy Full Width.

* [TextFields] Text area comments, updated super, naming, formatting. (#2593)

* [TextFields] Text area updates.

* [TextFields] Clarifying comment.

* [TextFields] Outline changes and formatting. (#2592)

* [TextFields] Updates to styling doc. (#2594)

* [TextFields] Updates to styling doc.

* [TextFields] Updating doc.

* [TextFields] Full width comments, safety, formatting, and underline support. (#2633)

* [TextFields] Adding safety to full width.

* [TextFields] Formatting Full Width.

* [TextFields] PR feedback.

* [TextFields] Safety in init of Base (#2632)

* [TextFields] Adding safety to base init.

* [TextFields] Formatting Base.

* [TextFields] Updates to controller header. (#2636)

* [TextFields] Updates to controller header.

* [TextFields] Updating misleading comments.

* [TextFields] Supplemental file name changes. (#2635)
2017-12-12 11:07:48 -05:00

410 lines
18 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.MaterialMath
import MaterialComponents.MaterialPalettes
import MaterialComponents.MaterialTextFields
class TextFieldControllerDefaultLegacyTests: XCTestCase {
func testCopyingLegacyDefault() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyDefault(textInput: textField)
controller.characterCountMax = 49
controller.characterCountViewMode = .always
controller.disabledColor = .orange
controller.isFloatingEnabled = false
controller.floatingPlaceholderNormalColor = .purple
controller.floatingPlaceholderScale = 0.1
controller.placeholderText = "Placeholder"
controller.helperText = "Helper"
controller.inlinePlaceholderColor = .green
controller.activeColor = .blue
controller.normalColor = .white
controller.underlineViewMode = .always
controller.leadingUnderlineLabelTextColor = .yellow
controller.trailingUnderlineLabelTextColor = .orange
if let controllerCopy = controller.copy() as? MDCTextInputControllerLegacyDefault {
XCTAssertEqual(controller.characterCountMax, controllerCopy.characterCountMax)
XCTAssertEqual(controller.characterCountViewMode, controllerCopy.characterCountViewMode)
XCTAssertEqual(controller.disabledColor, controllerCopy.disabledColor)
XCTAssertEqual(controller.isFloatingEnabled, controllerCopy.isFloatingEnabled)
XCTAssertEqual(controller.floatingPlaceholderNormalColor, controllerCopy.floatingPlaceholderNormalColor)
XCTAssertEqual(controller.floatingPlaceholderScale, controllerCopy.floatingPlaceholderScale)
XCTAssertEqual(controller.placeholderText, controllerCopy.placeholderText)
XCTAssertEqual(controller.helperText, controllerCopy.helperText)
XCTAssertEqual(controller.inlinePlaceholderColor, controllerCopy.inlinePlaceholderColor)
XCTAssertEqual(controller.activeColor, controllerCopy.activeColor)
XCTAssertEqual(controller.normalColor, controllerCopy.normalColor)
XCTAssertEqual(controller.underlineViewMode, controllerCopy.underlineViewMode)
XCTAssertEqual(controller.leadingUnderlineLabelTextColor,
controllerCopy.leadingUnderlineLabelTextColor)
XCTAssertEqual(controller.trailingUnderlineLabelTextColor,
controllerCopy.trailingUnderlineLabelTextColor)
} else {
XCTFail("No copy or copy is wrong class")
}
}
func testCopyingLegacyFullWidth() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyFullWidth(textInput: textField)
controller.characterCountMax = 49
controller.characterCountViewMode = .always
controller.disabledColor = .yellow
controller.placeholderText = "Placeholder"
controller.helperText = "Helper"
controller.inlinePlaceholderColor = .green
controller.activeColor = .blue
controller.normalColor = .white
controller.underlineViewMode = .always
controller.trailingUnderlineLabelTextColor = .purple
if let controllerCopy = controller.copy() as? MDCTextInputControllerLegacyFullWidth {
XCTAssertEqual(controller.characterCountMax, controllerCopy.characterCountMax)
XCTAssertEqual(controller.characterCountViewMode, controllerCopy.characterCountViewMode)
XCTAssertEqual(controller.disabledColor, controllerCopy.disabledColor)
XCTAssertEqual(controller.placeholderText, controllerCopy.placeholderText)
XCTAssertEqual(controller.helperText, controllerCopy.helperText)
XCTAssertEqual(controller.inlinePlaceholderColor, controllerCopy.inlinePlaceholderColor)
XCTAssertEqual(controller.activeColor, controllerCopy.activeColor)
XCTAssertEqual(controller.normalColor, controllerCopy.normalColor)
XCTAssertEqual(controller.underlineViewMode, controllerCopy.underlineViewMode)
XCTAssertEqual(controller.trailingUnderlineLabelTextColor,
controllerCopy.trailingUnderlineLabelTextColor)
} else {
XCTFail("No copy or copy is wrong class")
}
}
func testDynamicTypeLegacyDefault() {
let textField = MDCTextField()
XCTAssertFalse(textField.mdc_adjustsFontForContentSizeCategory)
textField.mdc_adjustsFontForContentSizeCategory = true
XCTAssertTrue(textField.mdc_adjustsFontForContentSizeCategory)
let controller = MDCTextInputControllerLegacyDefault(textInput: textField)
XCTAssertNotNil(controller.textInput)
controller.mdc_adjustsFontForContentSizeCategory = true
XCTAssertTrue(controller.mdc_adjustsFontForContentSizeCategory)
// The controller takes over listening for dynamic type size changes.
XCTAssertFalse(textField.mdc_adjustsFontForContentSizeCategory)
}
func testDynamicTypeLegacyFullWidth() {
let textField = MDCTextField()
XCTAssertFalse(textField.mdc_adjustsFontForContentSizeCategory)
textField.mdc_adjustsFontForContentSizeCategory = true
XCTAssertTrue(textField.mdc_adjustsFontForContentSizeCategory)
let controller = MDCTextInputControllerLegacyFullWidth(textInput: textField)
XCTAssertNotNil(controller.textInput)
controller.mdc_adjustsFontForContentSizeCategory = true
XCTAssertTrue(controller.mdc_adjustsFontForContentSizeCategory)
// The controller takes over listening for dynamic type size changes.
XCTAssertFalse(textField.mdc_adjustsFontForContentSizeCategory)
}
func testCharacterMaxLegacyDefault() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyDefault(textInput: textField)
let altLeading = "Alternative Helper Test"
controller.helperText = altLeading
controller.characterCountMax = 50
// By setting the folowing text with is 51 characters when the max is set to 50 characters, it
// should trigger an error state.
textField.text = "Lorem ipsum dolor sit amet, consectetuer adipiscing"
XCTAssertTrue("51 / 50".isEqual(textField.trailingUnderlineLabel.text))
XCTAssertEqual(MDCPalette.red.accent400, textField.underline?.color)
XCTAssertEqual(MDCPalette.red.accent400, textField.trailingUnderlineLabel.textColor)
}
func testCharacterMaxLegacyFullWidth() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyFullWidth(textInput: textField)
let altLeading = "Alternative Helper Test"
controller.helperText = altLeading
controller.characterCountMax = 50
// By setting the folowing text with is 51 characters when the max is set to 50 characters, it
// should trigger an error state.
textField.text = "Lorem ipsum dolor sit amet, consectetuer adipiscing"
XCTAssertTrue("51 / 50".isEqual(textField.trailingUnderlineLabel.text))
XCTAssertEqual(MDCPalette.red.accent400, textField.trailingUnderlineLabel.textColor)
}
func testErrorsLegacyDefault() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyDefault(textInput: textField)
// Helper text is shown on the leading underline label. Make sure the color and content are as
// expected.
let altLeading = "Alternative Helper Test"
controller.helperText = altLeading
controller.leadingUnderlineLabelTextColor = .green
XCTAssertEqual(.green, textField.leadingUnderlineLabel.textColor)
XCTAssertEqual(altLeading, textField.leadingUnderlineLabel.text)
controller.trailingUnderlineLabelTextColor = .white
XCTAssertEqual(textField.trailingUnderlineLabel.textColor, .white)
XCTAssertNil(controller.errorText)
// Setting error text should change the color and content of the leading underline label
let error = "Error Test"
controller.setErrorText(error, errorAccessibilityValue: nil)
XCTAssertNotEqual(altLeading, textField.leadingUnderlineLabel.text)
XCTAssertEqual(error, textField.leadingUnderlineLabel.text)
XCTAssertEqual(error, controller.errorText)
let newError = "Different Error Test"
let altErrorAccessibilityValue = "Not the default"
controller.setErrorText(newError, errorAccessibilityValue: altErrorAccessibilityValue)
XCTAssertEqual(newError, controller.errorText)
XCTAssertEqual(newError, textField.leadingUnderlineLabel.text)
XCTAssertNotEqual(error, controller.errorText)
XCTAssertNotEqual(error, textField.leadingUnderlineLabel.text)
// Setting an error should change the leading label's text color.
XCTAssertNotEqual(.green, textField.leadingUnderlineLabel.textColor)
// Setting error color should change the color of the underline, leading, and trailing colors.
controller.errorColor = .blue
XCTAssertEqual(.blue, controller.errorColor)
XCTAssertNotEqual(MDCPalette.red.accent400, textField.leadingUnderlineLabel.textColor)
XCTAssertNotEqual(MDCPalette.red.accent400, textField.trailingUnderlineLabel.textColor)
XCTAssertNotEqual(MDCPalette.red.accent400, textField.underline?.color)
XCTAssertEqual(.blue, textField.leadingUnderlineLabel.textColor)
XCTAssertEqual(.blue, textField.trailingUnderlineLabel.textColor)
XCTAssertEqual(.blue, textField.underline?.color)
// If the controller is also in a character max error state, the leading label should still be
// showing the text from the error that was set.
controller.setErrorText(error, errorAccessibilityValue: nil)
controller.characterCountMax = 50
textField.text = "Lorem ipsum dolor sit amet, consectetuer adipiscing"
XCTAssertEqual(error, textField.leadingUnderlineLabel.text)
// Removing the error should set the leading text back to its previous text.
controller.setErrorText(nil, errorAccessibilityValue: nil)
XCTAssertNotEqual(error, textField.leadingUnderlineLabel.text)
XCTAssertEqual(altLeading, textField.leadingUnderlineLabel.text)
// Test error text being reset but character max still exceded.
XCTAssertEqual(.blue, textField.leadingUnderlineLabel.textColor)
XCTAssertEqual(.blue, textField.trailingUnderlineLabel.textColor)
XCTAssertEqual(.blue, textField.underline?.color)
// Removing the text should remove the error state from character max and therefore remove
// anything from showing the error color.
textField.text = nil
XCTAssertNotEqual(.blue, textField.leadingUnderlineLabel.textColor)
XCTAssertNotEqual(.blue, textField.trailingUnderlineLabel.textColor)
XCTAssertNotEqual(.blue, textField.underline?.color)
}
func testFloatingPlaceholderLegacyDefault() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyDefault(textInput: textField)
textField.sizeToFit()
controller.placeholderText = "Placeholder"
textField.text = "Set Text"
textField.setNeedsLayout()
textField.layoutIfNeeded()
let estimatedTextFrame = UIEdgeInsetsInsetRect(textField.bounds, controller.textInsets(UIEdgeInsets()))
XCTAssertFalse(textField.placeholderLabel.frame.intersects(estimatedTextFrame))
}
func testLabelsLegacyDefault() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyDefault(textInput: textField)
let placeholderString = "Placeholder"
controller.placeholderText = placeholderString
XCTAssertEqual(controller.placeholderText, placeholderString)
XCTAssertEqual(textField.placeholder, controller.placeholderText)
let helperString = "Helper"
controller.helperText = helperString
XCTAssertEqual(controller.helperText, helperString)
XCTAssertEqual(textField.leadingUnderlineLabel.text, controller.helperText)
}
func testLabelsLegacyFullWidth() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyFullWidth(textInput: textField)
let placeholderString = "Placeholder"
controller.placeholderText = placeholderString
XCTAssertEqual(controller.placeholderText, placeholderString)
XCTAssertEqual(textField.placeholder, controller.placeholderText)
controller.helperText = "Helper"
XCTAssertEqual(controller.helperText, nil)
}
func testPresentationLegacyDefault() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyDefault(textInput: textField)
XCTAssertEqual(controller.isFloatingEnabled, true)
controller.isFloatingEnabled = false
XCTAssertEqual(controller.isFloatingEnabled, false)
controller.isFloatingEnabled = true
textField.sizeToFit()
XCTAssertEqual(textField.frame.height, 70)
controller.helperText = "Helper"
textField.sizeToFit()
XCTAssertTrue(MDCCGFloatEqual(MDCCeil(textField.frame.height), 85.0))
controller.characterCountViewMode = .never
XCTAssertEqual(.clear, textField.trailingUnderlineLabel.textColor)
controller.characterCountViewMode = .always
XCTAssertNotEqual(.clear, textField.trailingUnderlineLabel.textColor)
controller.underlineViewMode = .never
XCTAssertEqual(.lightGray, textField.underline?.color)
controller.underlineViewMode = .always
XCTAssertEqual(MDCPalette.blue.accent700, textField.underline?.color)
}
func testPresentationLegacyFullWidth() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyFullWidth(textInput: textField)
textField.sizeToFit()
XCTAssertEqual(textField.frame.height, 57)
controller.characterCountViewMode = .never
XCTAssertEqual(.clear, textField.trailingUnderlineLabel.textColor)
controller.characterCountViewMode = .always
XCTAssertNotEqual(.clear, textField.trailingUnderlineLabel.textColor)
controller.underlineViewMode = .never
XCTAssertEqual(.clear, textField.underline?.color)
controller.underlineViewMode = .always
XCTAssertEqual(.clear, textField.underline?.color)
controller.disabledColor = .red
XCTAssertEqual(controller.disabledColor, .clear)
}
func testSerializationLegacyDefault() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyDefault(textInput: textField)
controller.characterCountMax = 25
controller.characterCountViewMode = .always
controller.disabledColor = .yellow
controller.isFloatingEnabled = false
controller.floatingPlaceholderNormalColor = .purple
controller.floatingPlaceholderScale = 0.1
controller.helperText = "Helper"
controller.inlinePlaceholderColor = .green
controller.activeColor = .blue
controller.normalColor = .white
controller.underlineViewMode = .always
let serializedController = NSKeyedArchiver.archivedData(withRootObject: controller)
XCTAssertNotNil(serializedController)
let unserializedController =
NSKeyedUnarchiver.unarchiveObject(with: serializedController) as?
MDCTextInputControllerLegacyDefault
XCTAssertNotNil(unserializedController)
unserializedController?.textInput = textField
XCTAssertEqual(controller.characterCountMax, unserializedController?.characterCountMax)
XCTAssertEqual(controller.characterCountViewMode,
unserializedController?.characterCountViewMode)
XCTAssertEqual(controller.disabledColor, unserializedController?.disabledColor)
XCTAssertEqual(controller.isFloatingEnabled, unserializedController?.isFloatingEnabled)
XCTAssertEqual(controller.floatingPlaceholderNormalColor,
unserializedController?.floatingPlaceholderNormalColor)
XCTAssertEqual(controller.floatingPlaceholderScale,
unserializedController?.floatingPlaceholderScale)
XCTAssertEqual(controller.helperText, unserializedController?.helperText)
XCTAssertEqual(controller.inlinePlaceholderColor,
unserializedController?.inlinePlaceholderColor)
XCTAssertEqual(controller.activeColor, unserializedController?.activeColor)
XCTAssertEqual(controller.normalColor, unserializedController?.normalColor)
XCTAssertEqual(controller.underlineViewMode, unserializedController?.underlineViewMode)
}
func testSerializationLegacyFullWidth() {
let textField = MDCTextField()
let controller = MDCTextInputControllerLegacyFullWidth(textInput: textField)
controller.characterCountMax = 25
controller.characterCountViewMode = .always
controller.disabledColor = .yellow
controller.errorColor = .blue
controller.inlinePlaceholderColor = .green
let serializedController = NSKeyedArchiver.archivedData(withRootObject: controller)
XCTAssertNotNil(serializedController)
let unserializedController =
NSKeyedUnarchiver.unarchiveObject(with: serializedController) as?
MDCTextInputControllerLegacyFullWidth
XCTAssertNotNil(unserializedController)
unserializedController?.textInput = textField
XCTAssertEqual(controller.characterCountMax, unserializedController?.characterCountMax)
XCTAssertEqual(controller.characterCountViewMode,
unserializedController?.characterCountViewMode)
XCTAssertEqual(unserializedController?.disabledColor, .clear)
XCTAssertEqual(controller.errorColor, unserializedController?.errorColor)
XCTAssertEqual(controller.helperText, unserializedController?.helperText)
XCTAssertEqual(controller.inlinePlaceholderColor,
unserializedController?.inlinePlaceholderColor)
}
}