Skip to content

Commit 5d8eb98

Browse files
Merge pull request #817 from splitio/FME-12335-fixes
Event listener renaming
2 parents e54c9c8 + b4e35bb commit 5d8eb98

File tree

10 files changed

+97
-17
lines changed

10 files changed

+97
-17
lines changed

Split/Api/CertificatePinningConfig.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,8 @@ public class CertificatePinningError: NSObject, LocalizedError, @unchecked Senda
145145
Sets the status handler for certificate pinning.
146146

147147
This method allows you to specify a closure that will be called when a certificate pinning verification occurs.
148-
- Parameter handler: A closure that takes a `CertificatePinningStatusHandler` as its parameter. This closure will be called when a certificate pinning verification happens whether it fails or not.
148+
- Parameter handler: A closure that takes a `CertificatePinningStatusHandler` as its parameter.
149+
This closure will be called when a certificate pinning verification happens whether it fails or not.
149150
- Note: The `handler` closure is marked as `@escaping` because it is stored for later use, rather than being called immediately within the method.
150151
- Warning: This handler is called on a background thread. If you need to perform UI updates, ensure you dispatch them to the main thread.
151152
- Example:

Split/Api/DefaultSplitClient.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public final class DefaultSplitClient: NSObject, SplitClient, TelemetrySplitClie
1717
private var isClientDestroyed = false
1818
private let eventsTracker: EventsTracker
1919
private weak var clientManager: SplitClientManager?
20-
@objc public var listener: SplitClientEventListener?
20+
@objc public var listener: SplitEventListener?
2121

2222
var initStopwatch: Stopwatch?
2323

@@ -90,7 +90,7 @@ extension DefaultSplitClient {
9090
}
9191

9292
// MARK: Events Listeners with Medatadata
93-
@objc public func addEventsListener(listener: SplitClientEventListener) {
93+
@objc public func addEventListener(listener: SplitEventListener) {
9494
if let l = listener.onSdkReady {
9595
registerEvent(.sdkReady, action: l)
9696
}

Split/Api/FailHelpers.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ class FailedClient: SplitClient {
6161
func on(event: SplitEvent, queue: DispatchQueue, execute action: @escaping SplitAction) {}
6262

6363
// MARK: Events Listeners with Medatadata
64-
var listener: (any SplitClientEventListener)?
65-
@objc public func addEventsListener(listener: SplitClientEventListener) {}
64+
var listener: (any SplitEventListener)?
65+
@objc public func addEventListener(listener: SplitEventListener) {}
6666

6767
// MARK: Track
6868
func track(trafficType: String, eventType: String) -> Bool {

Split/Api/LocalhostSplitClient.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public final class LocalhostSplitClient: NSObject, SplitClient {
4949
private var evaluator: Evaluator
5050
private let key: Key
5151
weak var clientManager: SplitClientManager?
52-
@objc public var listener: SplitClientEventListener?
52+
@objc public var listener: SplitEventListener?
5353

5454
init(key: Key, splitsStorage: SplitsStorage, clientManager: SplitClientManager?, eventsManager: SplitEventsManager? = nil, evaluator: Evaluator) {
5555
self.eventsManager = eventsManager
@@ -144,7 +144,7 @@ public final class LocalhostSplitClient: NSObject, SplitClient {
144144
}
145145

146146
// MARK: Events Listeners with Medatadata
147-
@objc public func addEventsListener(listener: SplitClientEventListener) {
147+
@objc public func addEventListener(listener: SplitEventListener) {
148148
if let l = listener.onSdkReady {
149149
registerEvent(.sdkReady, action: l)
150150
}

Split/Api/SplitClient.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Foundation
1010

1111
public typealias SplitAction = () -> Void
1212

13-
@objc public protocol SplitClientEventListener: AnyObject, Sendable {
13+
@objc public protocol SplitEventListener: AnyObject, Sendable {
1414
@objc(onSdkReady:)
1515
optional func onSdkReady(_ metadata: SdkReadyMetadata)
1616
@objc(onSdkReadyFromCache:)
@@ -47,9 +47,9 @@ public typealias SplitAction = () -> Void
4747
func on(event: SplitEvent, queue: DispatchQueue, execute action: @escaping SplitAction)
4848

4949
// MARK: Events with Metadata
50-
@objc var listener: SplitClientEventListener? { get set }
51-
@objc(addEventsListener:)
52-
func addEventsListener(listener: SplitClientEventListener)
50+
@objc var listener: SplitEventListener? { get set }
51+
@objc(addEventListener:)
52+
func addEventListener(listener: SplitEventListener)
5353

5454
// MARK: Track feature
5555
func track(trafficType: String, eventType: String) -> Bool

Split/Events/SplitEvent.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import Foundation
2727
}
2828
}
2929

30-
@objcMembers public final class SplitEventWithMetadata: NSObject, Sendable {
30+
final class SplitEventWithMetadata: NSObject, Sendable {
3131
let type: SplitEvent
3232
let metadata: EventMetadata?
3333

Split/Network/HttpClient/HttpRequestManager.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ extension DefaultHttpRequestManager {
179179
}
180180

181181
// Finally we trigger the complete-status handler (host, success/fail, reason)
182-
notificationHelper?.post(notification: .pinnedCredentialStatus, info: CertificatePinningCompleteStatus(host: challenge.protectionSpace.host, status: finalStatus, reason: checkResult.description) as AnyObject)
182+
notificationHelper?.post(notification: .pinnedCredentialStatus,
183+
info: CertificatePinningCompleteStatus(host: challenge.protectionSpace.host, status: finalStatus, reason: checkResult.description) as AnyObject)
183184
}
184185
}

SplitTests/Fake/InternalSplitClientStub.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class InternalSplitClientStub: InternalSplitClient, @unchecked Sendable {
1414
var splitsStorage: SplitsStorage?
1515
var mySegmentsStorage: MySegmentsStorage?
1616
var myLargeSegmentsStorage: MySegmentsStorage?
17-
var listener: SplitClientEventListener?
17+
var listener: SplitEventListener?
1818

1919
init(splitsStorage: SplitsStorage?,
2020
mySegmentsStorage: MySegmentsStorage?,
@@ -102,7 +102,7 @@ class InternalSplitClientStub: InternalSplitClient, @unchecked Sendable {
102102

103103
func on(event: SplitEvent, execute action: @escaping SplitAction) {}
104104

105-
func addEventsListener(listener: SplitClientEventListener) {}
105+
func addEventListener(listener: SplitEventListener) {}
106106

107107
func track(trafficType: String, eventType: String) -> Bool {
108108
return true

SplitTests/Fake/SplitClientStub.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Foundation
1111

1212
class SplitClientStub: SplitClient, @unchecked Sendable {
1313

14-
@objc public var listener: SplitClientEventListener?
14+
@objc public var listener: SplitEventListener?
1515

1616
func getTreatment(_ split: String, attributes: [String : Any]?) -> String {
1717
return SplitConstants.control
@@ -97,7 +97,7 @@ class SplitClientStub: SplitClient, @unchecked Sendable {
9797
func on(event: SplitEvent, runInBackground: Bool, queue: DispatchQueue?, execute action: @escaping SplitAction) {
9898
}
9999

100-
func addEventsListener(listener: SplitClientEventListener) {
100+
func addEventListener(listener: SplitEventListener) {
101101
}
102102

103103
func track(trafficType: String, eventType: String) -> Bool {

SplitTests/Init/SplitClientTests.swift

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,60 @@ class SplitClientTests: XCTestCase {
8686
XCTAssertNotNil(task.takeQueue())
8787
}
8888
}
89+
90+
func testAddEventListenerRegistersAllMetadataEvents() {
91+
let listener = SplitEventListenerAllEvents()
92+
client.addEventListener(listener: listener)
93+
94+
let types = Set(eventsManager.registeredEvents.keys.map { $0.type })
95+
XCTAssertEqual(types, Set([.sdkReady, .sdkReadyFromCache, .sdkUpdated]))
96+
97+
for event in types {
98+
guard let task = eventsManager.registeredEvents.first(where: { $0.key.type == event })?.value else {
99+
XCTFail("Expected task for \(event)")
100+
continue
101+
}
102+
103+
XCTAssertTrue(task.runInBackground)
104+
XCTAssertNil(task.takeQueue())
105+
}
106+
}
107+
108+
func testAddEventListenerRegistersOnlyImplementedCallbacks() {
109+
let listener = SplitEventListenerReadyOnly()
110+
client.addEventListener(listener: listener)
111+
112+
let types = Set(eventsManager.registeredEvents.keys.map { $0.type })
113+
XCTAssertEqual(types, Set([.sdkReady]))
114+
}
115+
116+
func testAddEventListenerCallsMultipleListenersOnSdkReady() {
117+
let config = SplitClientConfig()
118+
config.logLevel = .verbose
119+
let localEventsManager = DefaultSplitEventsManager(config: config)
120+
localEventsManager.start()
121+
122+
let localClient = DefaultSplitClient(config: config, key: key,
123+
treatmentManager: treatmentManager, apiFacade: apiFacade,
124+
storageContainer: storageContainer,
125+
eventsManager: localEventsManager,
126+
eventsTracker: eventsTracker, clientManager: clientManager)
127+
128+
let exp1 = XCTestExpectation(description: "listener 1 called")
129+
let exp2 = XCTestExpectation(description: "listener 2 called")
130+
131+
let listener1 = SplitEventListenerReadyClosure(onReady: { exp1.fulfill() })
132+
let listener2 = SplitEventListenerReadyClosure(onReady: { exp2.fulfill() })
133+
134+
localClient.addEventListener(listener: listener1)
135+
localClient.addEventListener(listener: listener2)
136+
137+
localEventsManager.notifyInternalEvent(.mySegmentsUpdated)
138+
localEventsManager.notifyInternalEvent(.myLargeSegmentsUpdated)
139+
localEventsManager.notifyInternalEvent(.splitsUpdated)
140+
141+
wait(for: [exp1, exp2], timeout: 2.0)
142+
}
89143

90144
func testGetTreatmentWithEvaluationOptions() {
91145
testEvaluationOptionsPassedCorrectly(
@@ -276,3 +330,27 @@ class SplitClientTests: XCTestCase {
276330
verifyProperties(in: getEvaluationOptions(mockManager))
277331
}
278332
}
333+
334+
final class SplitEventListenerAllEvents: NSObject, SplitEventListener {
335+
@objc func onSdkReady(_ metadata: SdkReadyMetadata) {}
336+
337+
@objc func onSdkReadyFromCache(_ metadata: SdkReadyFromCacheMetadata) {}
338+
339+
@objc func onSdkUpdate(_ metadata: SdkUpdateMetadata) {}
340+
}
341+
342+
final class SplitEventListenerReadyOnly: NSObject, SplitEventListener {
343+
@objc func onSdkReady(_ metadata: SdkReadyMetadata) {}
344+
}
345+
346+
final class SplitEventListenerReadyClosure: NSObject, SplitEventListener, @unchecked Sendable {
347+
private let onReady: @Sendable () -> Void
348+
349+
init(onReady: @escaping @Sendable () -> Void) {
350+
self.onReady = onReady
351+
}
352+
353+
@objc func onSdkReady(_ metadata: SdkReadyMetadata) {
354+
onReady()
355+
}
356+
}

0 commit comments

Comments
 (0)