mirror of
https://github.com/wnagrodzki/UserInterfaceVariations.git
synced 2025-05-06 18:51:42 +02:00
Suppress setting the same value on object
This commit is contained in:
parent
677cf799f1
commit
fa7a280f0e
2 changed files with 37 additions and 4 deletions
|
@ -63,17 +63,28 @@ public class UIVariation<Object: AnyObject, Value>: NSObject {
|
||||||
extension UIVariation: UIVariationApplying {
|
extension UIVariation: UIVariationApplying {
|
||||||
|
|
||||||
func applyIfMatchesTraitEnvironment() {
|
func applyIfMatchesTraitEnvironment() {
|
||||||
|
guard doesMatchTraitEnvironment() else { return }
|
||||||
|
object[keyPath: property] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
func applyIfMatchesTraitEnvironment() where Value: Equatable {
|
||||||
|
guard doesMatchTraitEnvironment() else { return }
|
||||||
|
guard object[keyPath: property] != value else { return }
|
||||||
|
object[keyPath: property] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
private func doesMatchTraitEnvironment() -> Bool {
|
||||||
guard let traitCollection = traitEnvironment?.traitCollection else {
|
guard let traitCollection = traitEnvironment?.traitCollection else {
|
||||||
print("Missing traitEnvironment when trying to apply \(self)")
|
print("Missing traitEnvironment when trying to apply \(self)")
|
||||||
return
|
return false
|
||||||
}
|
}
|
||||||
if let horizontalSizeClass = horizontalSizeClass {
|
if let horizontalSizeClass = horizontalSizeClass {
|
||||||
if traitCollection.horizontalSizeClass != horizontalSizeClass { return }
|
if traitCollection.horizontalSizeClass != horizontalSizeClass { return false }
|
||||||
}
|
}
|
||||||
if let verticalSizeClass = verticalSizeClass {
|
if let verticalSizeClass = verticalSizeClass {
|
||||||
if traitCollection.verticalSizeClass != verticalSizeClass { return }
|
if traitCollection.verticalSizeClass != verticalSizeClass { return false }
|
||||||
}
|
}
|
||||||
object[keyPath: property] = value
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -85,6 +85,20 @@ final class UIVariationTests: XCTestCase {
|
||||||
XCTAssertNotEqual(label.text, sut.value)
|
XCTAssertNotEqual(label.text, sut.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func test_When_object_value_is_already_equal_to_variation_value_Then_variation_is_NOT_applied() {
|
||||||
|
let object = Object()
|
||||||
|
let sut = UIVariation(object: object,
|
||||||
|
keyPath: \.text,
|
||||||
|
value: valueWhenCompact,
|
||||||
|
horizontalSizeClass: .compact,
|
||||||
|
verticalSizeClass: nil)
|
||||||
|
traitEnvironment.traitCollection = UITraitCollection(horizontalSizeClass: .compact)
|
||||||
|
sut.traitEnvironment = traitEnvironment
|
||||||
|
sut.applyIfMatchesTraitEnvironment()
|
||||||
|
sut.applyIfMatchesTraitEnvironment()
|
||||||
|
XCTAssertEqual(object.setCount, 1)
|
||||||
|
}
|
||||||
|
|
||||||
func test_factory_method_for_sizeClassDimension_horizontal() {
|
func test_factory_method_for_sizeClassDimension_horizontal() {
|
||||||
let variations = UIVariation.make(for: label,
|
let variations = UIVariation.make(for: label,
|
||||||
property: \.text,
|
property: \.text,
|
||||||
|
@ -134,3 +148,11 @@ class TraitEnvironmentStub: NSObject, UITraitEnvironment {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Object {
|
||||||
|
|
||||||
|
var text: String? {
|
||||||
|
didSet { setCount += 1 }
|
||||||
|
}
|
||||||
|
var setCount = 0
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue