83 lines
2.4 KiB
Swift
83 lines
2.4 KiB
Swift
import Foundation
|
|
import Testing
|
|
|
|
@testable import phbar
|
|
|
|
// MARK: - Payload Types for Testing
|
|
|
|
private struct TestPayload: Codable, Equatable {
|
|
let message: String
|
|
let count: Int
|
|
}
|
|
|
|
// MARK: - Notification Name
|
|
|
|
@Test func notificationNameIsHashable() async throws {
|
|
let a = IPCNotificationName("com.example.test")
|
|
let b = IPCNotificationName("com.example.test")
|
|
let c = IPCNotificationName("com.example.other")
|
|
|
|
#expect(a == b)
|
|
#expect(a != c)
|
|
#expect(a.hashValue == b.hashValue)
|
|
}
|
|
|
|
@Test func notificationNameIsExpressibleByStringLiteral() async throws {
|
|
let name: IPCNotificationName = "com.example.test"
|
|
#expect(name.rawValue == "com.example.test")
|
|
}
|
|
|
|
@Test func notificationNameRawRepresentable() async throws {
|
|
let name = IPCNotificationName(rawValue: "com.example.test")
|
|
#expect(name.rawValue == "com.example.test")
|
|
}
|
|
|
|
// MARK: - Payload Decoding
|
|
|
|
@Test func decodePayloadFromNotification() async throws {
|
|
let payload = TestPayload(message: "hello", count: 42)
|
|
let userInfo: [String: Any] = ["message": "hello", "count": 42]
|
|
let notification = IPCNotification(name: .refresh, userInfo: userInfo)
|
|
|
|
let decoded: TestPayload? = notification.decode(TestPayload.self)
|
|
#expect(decoded == payload)
|
|
}
|
|
|
|
@Test func decodePayloadReturnsNilForMissingUserInfo() async throws {
|
|
let notification = IPCNotification(name: .refresh, userInfo: nil)
|
|
let decoded: TestPayload? = notification.decode(TestPayload.self)
|
|
#expect(decoded == nil)
|
|
}
|
|
|
|
@Test func decodePayloadReturnsNilForInvalidData() async throws {
|
|
let userInfo: [String: Any] = ["wrong": "data"]
|
|
let notification = IPCNotification(name: .refresh, userInfo: userInfo)
|
|
let decoded: TestPayload? = notification.decode(TestPayload.self)
|
|
#expect(decoded == nil)
|
|
}
|
|
|
|
// MARK: - Posting
|
|
|
|
@Test func postWithoutPayloadDoesNotCrash() async throws {
|
|
IPC.post(.refresh)
|
|
}
|
|
|
|
@Test func postWithUserInfoDoesNotCrash() async throws {
|
|
IPC.post(.refresh, userInfo: ["key": "value"])
|
|
}
|
|
|
|
@Test func postWithEncodablePayloadDoesNotCrash() async throws {
|
|
let payload = TestPayload(message: "test", count: 1)
|
|
let result = IPC.post(.refresh, payload: payload)
|
|
#expect(result == true)
|
|
}
|
|
|
|
// MARK: - Observer
|
|
|
|
@Test func observerCleansUpOnDeinit() async throws {
|
|
// Verify that creating and releasing an observer doesn't crash.
|
|
// The token removes itself from the distributed center on deinit.
|
|
let token = IPC.observe(.refresh) { _ in }
|
|
withExtendedLifetime(token) {}
|
|
}
|