mirror of
https://github.com/wnagrodzki/UserInterfaceVariations.git
synced 2025-05-03 17:21:40 +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 {
|
||||
|
||||
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 {
|
||||
print("Missing traitEnvironment when trying to apply \(self)")
|
||||
return
|
||||
return false
|
||||
}
|
||||
if let horizontalSizeClass = horizontalSizeClass {
|
||||
if traitCollection.horizontalSizeClass != horizontalSizeClass { return }
|
||||
if traitCollection.horizontalSizeClass != horizontalSizeClass { return false }
|
||||
}
|
||||
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)
|
||||
}
|
||||
|
||||
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() {
|
||||
let variations = UIVariation.make(for: label,
|
||||
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