Skip to content

Commit def5789

Browse files
committed
Added tests for mixed hooks (class & object)
1 parent cd53eae commit def5789

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import InterposeKit
2+
import XCTest
3+
4+
fileprivate class ExampleClass: NSObject {
5+
@objc dynamic var arrayValue: [String] { ["base"] }
6+
}
7+
8+
final class MixedHookTests: XCTestCase {
9+
10+
override func setUpWithError() throws {
11+
Interpose.isLoggingEnabled = true
12+
}
13+
14+
func test() throws {
15+
let object1 = ExampleClass()
16+
let object2 = ExampleClass()
17+
XCTAssertEqual(object1.arrayValue, ["base"])
18+
XCTAssertEqual(object2.arrayValue, ["base"])
19+
20+
let classHook = try Interpose.applyHook(
21+
on: ExampleClass.self,
22+
for: #selector(getter: ExampleClass.arrayValue),
23+
methodSignature: (@convention(c) (NSObject, Selector) -> [String]).self,
24+
hookSignature: (@convention(block) (NSObject) -> [String]).self
25+
) { hook in
26+
return { `self` in
27+
return hook.original(self, hook.selector) + ["classHook"]
28+
}
29+
}
30+
XCTAssertEqual(object1.arrayValue, ["base", "classHook"])
31+
XCTAssertEqual(object2.arrayValue, ["base", "classHook"])
32+
33+
let objectHook = try Interpose.applyHook(
34+
on: object1,
35+
for: #selector(getter: ExampleClass.arrayValue),
36+
methodSignature: (@convention(c) (NSObject, Selector) -> [String]).self,
37+
hookSignature: (@convention(block) (NSObject) -> [String]).self
38+
) { hook in
39+
return { `self` in
40+
return hook.original(self, hook.selector) + ["objectHook"]
41+
}
42+
}
43+
XCTAssertEqual(object1.arrayValue, ["base", "classHook", "objectHook"])
44+
XCTAssertEqual(object2.arrayValue, ["base", "classHook"])
45+
46+
try classHook.revert()
47+
XCTAssertEqual(object1.arrayValue, ["base", "objectHook"])
48+
XCTAssertEqual(object2.arrayValue, ["base"])
49+
50+
try objectHook.revert()
51+
XCTAssertEqual(object1.arrayValue, ["base"])
52+
XCTAssertEqual(object2.arrayValue, ["base"])
53+
}
54+
55+
}

0 commit comments

Comments
 (0)