mirror of
https://github.com/wnagrodzki/UserInterfaceVariations.git
synced 2025-05-06 18:51:42 +02:00
136 lines
6.2 KiB
Swift
136 lines
6.2 KiB
Swift
import XCTest
|
|
@testable import UserInterfaceVariations
|
|
|
|
final class UIVariationTests: XCTestCase {
|
|
|
|
let label = UILabel()
|
|
let traitEnvironment = TraitEnvironmentStub()
|
|
let valueWhenCompact = "value when compact"
|
|
let valueWhenRegular = "value when regular"
|
|
|
|
override func setUp() {
|
|
label.text = nil
|
|
traitEnvironment.traitCollection = UITraitCollection()
|
|
}
|
|
|
|
func test_When_horizontalSizeClass_matches_traitEnvironment_Then_variation_is_applied() {
|
|
let sut = UIVariation(object: label,
|
|
keyPath: \.text,
|
|
value: valueWhenCompact,
|
|
horizontalSizeClass: .compact,
|
|
verticalSizeClass: nil)
|
|
traitEnvironment.traitCollection = UITraitCollection(horizontalSizeClass: .compact)
|
|
sut.traitEnvironment = traitEnvironment
|
|
sut.applyIfMatchesTraitEnvironment()
|
|
XCTAssertEqual(label.text, sut.value)
|
|
}
|
|
|
|
func test_When_verticalSizeClass_matches_traitEnvironment_Then_variation_is_applied() {
|
|
let sut = UIVariation(object: label,
|
|
keyPath: \.text,
|
|
value: valueWhenCompact,
|
|
horizontalSizeClass: nil,
|
|
verticalSizeClass: .compact)
|
|
traitEnvironment.traitCollection = UITraitCollection(verticalSizeClass: .compact)
|
|
sut.traitEnvironment = traitEnvironment
|
|
sut.applyIfMatchesTraitEnvironment()
|
|
XCTAssertEqual(label.text, sut.value)
|
|
}
|
|
|
|
func test_When_horizontalSizeClass_do_not_match_traitEnvironment_Then_variation_is_NOT_applied() {
|
|
let sut = UIVariation(object: label,
|
|
keyPath: \.text,
|
|
value: valueWhenCompact,
|
|
horizontalSizeClass: .compact,
|
|
verticalSizeClass: nil)
|
|
traitEnvironment.traitCollection = UITraitCollection(horizontalSizeClass: .regular)
|
|
sut.traitEnvironment = traitEnvironment
|
|
sut.applyIfMatchesTraitEnvironment()
|
|
XCTAssertNotEqual(label.text, sut.value)
|
|
}
|
|
|
|
func test_When_verticalSizeClass_do_not_match_traitEnvironment_Then_variation_is_NOT_applied() {
|
|
let sut = UIVariation(object: label,
|
|
keyPath: \.text,
|
|
value: valueWhenCompact,
|
|
horizontalSizeClass: nil,
|
|
verticalSizeClass: .compact)
|
|
traitEnvironment.traitCollection = UITraitCollection(verticalSizeClass: .regular)
|
|
sut.traitEnvironment = traitEnvironment
|
|
sut.applyIfMatchesTraitEnvironment()
|
|
XCTAssertNotEqual(label.text, sut.value)
|
|
}
|
|
|
|
func test_When_horizontalSizeClass_matches_traitEnvironment_and_value_is_modified_Then_variation_is_applied() {
|
|
let newValue = "value when compact after modification"
|
|
let sut = UIVariation(object: label,
|
|
keyPath: \.text,
|
|
value: "value when compact before modification",
|
|
horizontalSizeClass: .compact,
|
|
verticalSizeClass: nil)
|
|
traitEnvironment.traitCollection = UITraitCollection(horizontalSizeClass: .compact)
|
|
sut.traitEnvironment = traitEnvironment
|
|
sut.value = newValue
|
|
XCTAssertEqual(label.text, newValue)
|
|
}
|
|
|
|
func test_When_traitEnvironment_is_nil_Then_variation_is_NOT_applied() {
|
|
let sut = UIVariation(object: label,
|
|
keyPath: \.text,
|
|
value: valueWhenCompact,
|
|
horizontalSizeClass: .compact,
|
|
verticalSizeClass: nil)
|
|
traitEnvironment.traitCollection = UITraitCollection(horizontalSizeClass: .compact)
|
|
sut.applyIfMatchesTraitEnvironment()
|
|
XCTAssertNotEqual(label.text, sut.value)
|
|
}
|
|
|
|
func test_factory_method_for_sizeClassDimension_horizontal() {
|
|
let variations = UIVariation.make(for: label,
|
|
property: \.text,
|
|
sizeClassDimension: .horizontal,
|
|
whenCompact: valueWhenCompact,
|
|
whenRegular: valueWhenRegular)
|
|
|
|
XCTAssertTrue(variations[0].object === label)
|
|
XCTAssertTrue(variations[0].property == \.text)
|
|
XCTAssertTrue(variations[0].value == valueWhenCompact)
|
|
XCTAssertTrue(variations[0].horizontalSizeClass == .compact)
|
|
XCTAssertTrue(variations[0].verticalSizeClass == nil)
|
|
|
|
XCTAssertTrue(variations[1].object === label)
|
|
XCTAssertTrue(variations[1].property == \.text)
|
|
XCTAssertTrue(variations[1].value == valueWhenRegular)
|
|
XCTAssertTrue(variations[1].horizontalSizeClass == .regular)
|
|
XCTAssertTrue(variations[1].verticalSizeClass == nil)
|
|
}
|
|
|
|
func test_factory_method_for_sizeClassDimension_vertical() {
|
|
let variations = UIVariation.make(for: label,
|
|
property: \.text,
|
|
sizeClassDimension: .vertical,
|
|
whenCompact: valueWhenCompact,
|
|
whenRegular: valueWhenRegular)
|
|
|
|
XCTAssertTrue(variations[0].object === label)
|
|
XCTAssertTrue(variations[0].property == \.text)
|
|
XCTAssertTrue(variations[0].value == valueWhenCompact)
|
|
XCTAssertTrue(variations[0].horizontalSizeClass == nil)
|
|
XCTAssertTrue(variations[0].verticalSizeClass == .compact)
|
|
|
|
XCTAssertTrue(variations[1].object === label)
|
|
XCTAssertTrue(variations[1].property == \.text)
|
|
XCTAssertTrue(variations[1].value == valueWhenRegular)
|
|
XCTAssertTrue(variations[1].horizontalSizeClass == nil)
|
|
XCTAssertTrue(variations[1].verticalSizeClass == .regular)
|
|
}
|
|
}
|
|
|
|
class TraitEnvironmentStub: NSObject, UITraitEnvironment {
|
|
|
|
var traitCollection = UITraitCollection()
|
|
|
|
func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
|
|
|
}
|
|
}
|