@@ -2,63 +2,63 @@ import Foundation
22import XCTest
33@testable import InterposeKit
44
5- final class KVOTests : InterposeKitTestCase {
6-
7- // Helper observer that wraps a token and removes it on deinit.
8- class TestClassObserver {
9- var kvoToken : NSKeyValueObservation ?
10- var didCallObserver = false
11-
12- func observe( obj: TestClass ) {
13- kvoToken = obj. observe ( \. age, options: . new) { [ weak self] _, change in
14- guard let age = change. newValue else { return }
15- print ( " New age is: \( age) " )
16- self ? . didCallObserver = true
17- }
18- }
19-
20- deinit {
21- kvoToken? . invalidate ( )
22- }
23- }
24-
25- func testBasicKVO( ) throws {
26- let testObj = TestClass ( )
27-
28- // KVO before hooking works, but hooking will fail
29- try withExtendedLifetime ( TestClassObserver ( ) ) { observer in
30- observer. observe ( obj: testObj)
31- XCTAssertEqual ( testObj. age, 1 )
32- testObj. age = 2
33- XCTAssertEqual ( testObj. age, 2 )
34- // Hooking is expected to fail
35- assert ( try Interpose ( testObj) , throws: InterposeError . keyValueObservationDetected ( testObj) )
36- XCTAssertEqual ( testObj. age, 2 )
37- }
38-
39- // Hook without KVO!
40- let hook = try testObj. hook (
41- #selector( getter: TestClass . age) ,
42- methodSignature: ( @convention( c) ( AnyObject, Selector) - > Int) . self,
43- hookSignature: ( @convention( block) ( AnyObject) - > Int) . self) { _ in { _ in
44- return 3
45- }
46- }
47- XCTAssertEqual ( testObj. age, 3 )
48- try hook. revert ( )
49- XCTAssertEqual ( testObj. age, 2 )
50- try hook. apply ( )
51- XCTAssertEqual ( testObj. age, 3 )
52-
53- // Now we KVO after hooking!
54- withExtendedLifetime ( TestClassObserver ( ) ) { observer in
55- observer. observe ( obj: testObj)
56- XCTAssertEqual ( testObj. age, 3 )
57- // Setter is fine but won't change outcome
58- XCTAssertFalse ( observer. didCallObserver)
59- testObj. age = 4
60- XCTAssertTrue ( observer. didCallObserver)
61- XCTAssertEqual ( testObj. age, 3 )
62- }
63- }
64- }
5+ // final class KVOTests: InterposeKitTestCase {
6+ //
7+ // // Helper observer that wraps a token and removes it on deinit.
8+ // class TestClassObserver {
9+ // var kvoToken: NSKeyValueObservation?
10+ // var didCallObserver = false
11+ //
12+ // func observe(obj: TestClass) {
13+ // kvoToken = obj.observe(\.age, options: .new) { [weak self] _, change in
14+ // guard let age = change.newValue else { return }
15+ // print("New age is: \(age)")
16+ // self?.didCallObserver = true
17+ // }
18+ // }
19+ //
20+ // deinit {
21+ // kvoToken?.invalidate()
22+ // }
23+ // }
24+ //
25+ // func testBasicKVO() throws {
26+ // let testObj = TestClass()
27+ //
28+ // // KVO before hooking works, but hooking will fail
29+ // try withExtendedLifetime(TestClassObserver()) { observer in
30+ // observer.observe(obj: testObj)
31+ // XCTAssertEqual(testObj.age, 1)
32+ // testObj.age = 2
33+ // XCTAssertEqual(testObj.age, 2)
34+ // // Hooking is expected to fail
35+ // assert(try Interpose(testObj), throws: InterposeError.keyValueObservationDetected(testObj))
36+ // XCTAssertEqual(testObj.age, 2)
37+ // }
38+ //
39+ // // Hook without KVO!
40+ // let hook = try testObj.hook(
41+ // #selector(getter: TestClass.age),
42+ // methodSignature: (@convention(c) (AnyObject, Selector) -> Int).self,
43+ // hookSignature: (@convention(block) (AnyObject) -> Int).self) { _ in { _ in
44+ // return 3
45+ // }
46+ // }
47+ // XCTAssertEqual(testObj.age, 3)
48+ // try hook.revert()
49+ // XCTAssertEqual(testObj.age, 2)
50+ // try hook.apply()
51+ // XCTAssertEqual(testObj.age, 3)
52+ //
53+ // // Now we KVO after hooking!
54+ // withExtendedLifetime(TestClassObserver()) { observer in
55+ // observer.observe(obj: testObj)
56+ // XCTAssertEqual(testObj.age, 3)
57+ // // Setter is fine but won't change outcome
58+ // XCTAssertFalse(observer.didCallObserver)
59+ // testObj.age = 4
60+ // XCTAssertTrue(observer.didCallObserver)
61+ // XCTAssertEqual(testObj.age, 3)
62+ // }
63+ // }
64+ // }
0 commit comments