UserInterfaceVariations/Tests/UserInterfaceVariationsTests/UIVariationEnvironmentTests.swift

118 lines
5.6 KiB
Swift

import XCTest
@testable import UserInterfaceVariations
final class UIVariationEnvironmentTests: XCTestCase {
let label = UILabel()
let valueWhenCompact = "value when compact"
let valueWhenRegular = "value when regular"
override func setUp() {
label.text = nil
}
func test_When_variation_matches_traitEnvironment_Then_it_is_applied() {
let variationEnvironment = UIVariationEnvironmentFake(traitCollection: UITraitCollection(horizontalSizeClass: .compact))
let variation = UIVariation(object: label,
keyPath: \.text,
value: valueWhenCompact,
horizontalSizeClass: .compact,
verticalSizeClass: nil)
variationEnvironment.addVariation(variation)
XCTAssertEqual(label.text, variation.value)
}
func test_adding_variation_convenience_method_for_sizeClassDimension_horizontal() {
label.text = valueWhenRegular
let variationEnvironment = UIVariationEnvironmentFake(traitCollection: UITraitCollection(horizontalSizeClass: .regular))
variationEnvironment.addVariation(for: label,
property: \.text,
sizeClassDimension: .horizontal,
whenCompact: valueWhenCompact)
let variation0 = variationEnvironment.variations[0] as! UIVariation<UILabel, String?>
XCTAssertTrue(variation0.object === label)
XCTAssertTrue(variation0.property == \.text)
XCTAssertTrue(variation0.value == valueWhenRegular)
XCTAssertTrue(variation0.horizontalSizeClass == .regular)
XCTAssertTrue(variation0.verticalSizeClass == nil)
let variation1 = variationEnvironment.variations[1] as! UIVariation<UILabel, String?>
XCTAssertTrue(variation1.object === label)
XCTAssertTrue(variation1.property == \.text)
XCTAssertTrue(variation1.value == valueWhenCompact)
XCTAssertTrue(variation1.horizontalSizeClass == .compact)
XCTAssertTrue(variation1.verticalSizeClass == nil)
}
func test_adding_variation_convenience_method_for_sizeClassDimension_vartical() {
label.text = valueWhenRegular
let variationEnvironment = UIVariationEnvironmentFake(traitCollection: UITraitCollection(horizontalSizeClass: .regular))
variationEnvironment.addVariation(for: label,
property: \.text,
sizeClassDimension: .vertical,
whenCompact: valueWhenCompact)
let variation0 = variationEnvironment.variations[0] as! UIVariation<UILabel, String?>
XCTAssertTrue(variation0.object === label)
XCTAssertTrue(variation0.property == \.text)
XCTAssertTrue(variation0.value == valueWhenRegular)
XCTAssertTrue(variation0.horizontalSizeClass == nil)
XCTAssertTrue(variation0.verticalSizeClass == .regular)
let variation1 = variationEnvironment.variations[1] as! UIVariation<UILabel, String?>
XCTAssertTrue(variation1.object === label)
XCTAssertTrue(variation1.property == \.text)
XCTAssertTrue(variation1.value == valueWhenCompact)
XCTAssertTrue(variation1.horizontalSizeClass == nil)
XCTAssertTrue(variation1.verticalSizeClass == .compact)
}
func test_When_verticalSizeClass_in_traitCollection_changes_Then_variation_is_applied() {
let variationEnvironment = UIVariationEnvironmentFake(traitCollection: UITraitCollection(verticalSizeClass: .regular))
label.text = valueWhenRegular
variationEnvironment.addVariation(for: label,
property: \.text,
sizeClassDimension: .vertical,
whenCompact: valueWhenCompact)
variationEnvironment.traitCollection = UITraitCollection(verticalSizeClass: .compact)
XCTAssertEqual(label.text, valueWhenCompact)
}
func test_adding_variations_convenience_method() {
let variationEnvironment = UIVariationEnvironmentFake(traitCollection: UITraitCollection(verticalSizeClass: .regular))
let variation0 = UIVariation(object: label,
keyPath: \.text,
value: "",
horizontalSizeClass: nil,
verticalSizeClass: nil)
let variation1 = UIVariation(object: label,
keyPath: \.text,
value: "",
horizontalSizeClass: nil,
verticalSizeClass: nil)
variationEnvironment.addVariations([variation0, variation1])
XCTAssert(variationEnvironment.variations[0] as AnyObject === variation0)
XCTAssert(variationEnvironment.variations[1] as AnyObject === variation1)
}
}
class UIVariationEnvironmentFake: NSObject, UITraitEnvironment {
var traitCollection = UITraitCollection() {
didSet { traitCollectionDidChange(oldValue) }
}
init(traitCollection: UITraitCollection) {
self.traitCollection = traitCollection
super.init()
}
func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
activateVariationsMatchingTraitEnvironment()
}
}
extension UIVariationEnvironmentFake: UIVariationEnvironment { }