diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartLogging.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartLogging.swift new file mode 100644 index 0000000000000000000000000000000000000000..d073ee41cd1c954b41395d2c0de4760d94ed4b5a --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartLogging.swift @@ -0,0 +1,29 @@ +import Foundation +import Logging +import XCTestDynamicOverlay +import XXClient + +public struct MessengerStartLogging { + public var run: () -> Void + + public func callAsFunction() -> Void { + run() + } +} + +extension MessengerStartLogging { + public static func live(_ env: MessengerEnvironment) -> MessengerStartLogging { + return MessengerStartLogging { + env.registerLogWriter(.init { messageString in + let message = LogMessage.parse(messageString) + env.log(message) + }) + } + } +} + +extension MessengerStartLogging { + public static let unimplemented = MessengerStartLogging( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index 168cd84af606b70c37549b8a524e26f306dca8ec..22f110303674337006b77b2f1de436a09d0392b1 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -39,6 +39,7 @@ public struct Messenger { public var backupParams: MessengerBackupParams public var stopBackup: MessengerStopBackup public var setLogLevel: MessengerSetLogLevel + public var startLogging: MessengerStartLogging } extension Messenger { @@ -81,7 +82,8 @@ extension Messenger { resumeBackup: .live(env), backupParams: .live(env), stopBackup: .live(env), - setLogLevel: .live(env) + setLogLevel: .live(env), + startLogging: .live(env) ) } } @@ -125,6 +127,7 @@ extension Messenger { resumeBackup: .unimplemented, backupParams: .unimplemented, stopBackup: .unimplemented, - setLogLevel: .unimplemented + setLogLevel: .unimplemented, + startLogging: .unimplemented ) } diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift index bb26093a24d97792904b9a8f5ca974d0c9853d66..a98e76f042b5e53a6e8556d3bee32d7ebb946162 100644 --- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift +++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift @@ -1,4 +1,5 @@ import Foundation +import Logging import XXClient import XCTestDynamicOverlay @@ -18,6 +19,7 @@ public struct MessengerEnvironment { public var isListeningForMessages: Stored<Bool> public var isRegisteredWithUD: IsRegisteredWithUD public var loadCMix: LoadCMix + public var log: (LogMessage) -> Void public var login: Login public var lookupUD: LookupUD public var messageListeners: ListenersRegistry @@ -29,6 +31,7 @@ public struct MessengerEnvironment { public var newUdManagerFromBackup: NewUdManagerFromBackup public var passwordStorage: PasswordStorage public var registerForNotifications: RegisterForNotifications + public var registerLogWriter: RegisterLogWriter public var resumeBackup: ResumeBackup public var searchUD: SearchUD public var setLogLevel: SetLogLevel @@ -48,7 +51,9 @@ extension MessengerEnvironment { .path public static func live() -> MessengerEnvironment { - MessengerEnvironment( + let logger = Logger(label: "xx.network.client") + + return MessengerEnvironment( authCallbacks: .live(), backup: .inMemory(), backupCallbacks: .live(), @@ -64,6 +69,7 @@ extension MessengerEnvironment { isListeningForMessages: .inMemory(false), isRegisteredWithUD: .live, loadCMix: .live, + log: { logger.log(level: $0.level, .init(stringLiteral: $0.text)) }, login: .live, lookupUD: .live, messageListeners: .live(), @@ -75,6 +81,7 @@ extension MessengerEnvironment { newUdManagerFromBackup: .live, passwordStorage: .keychain, registerForNotifications: .live, + registerLogWriter: .live, resumeBackup: .live, searchUD: .live, setLogLevel: .live, @@ -105,6 +112,7 @@ extension MessengerEnvironment { isListeningForMessages: .unimplemented(placeholder: false), isRegisteredWithUD: .unimplemented, loadCMix: .unimplemented, + log: XCTUnimplemented("\(Self.self).log"), login: .unimplemented, lookupUD: .unimplemented, messageListeners: .unimplemented, @@ -116,6 +124,7 @@ extension MessengerEnvironment { newUdManagerFromBackup: .unimplemented, passwordStorage: .unimplemented, registerForNotifications: .unimplemented, + registerLogWriter: .unimplemented, resumeBackup: .unimplemented, searchUD: .unimplemented, setLogLevel: .unimplemented, diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartLoggingTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartLoggingTests.swift new file mode 100644 index 0000000000000000000000000000000000000000..b0d0a7c35453348c2f56b4e5e13c973c6fbc639a --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartLoggingTests.swift @@ -0,0 +1,30 @@ +import CustomDump +import XCTest +import XXClient +@testable import XXMessengerClient + +final class MessengerStartLoggingTests: XCTestCase { + func testStartLogging() { + var registeredLogWriters: [LogWriter] = [] + var logMessages: [LogMessage] = [] + + var env: MessengerEnvironment = .unimplemented + env.registerLogWriter.run = { writer in + registeredLogWriters.append(writer) + } + env.log = { message in + logMessages.append(message) + } + let start: MessengerStartLogging = .live(env) + + start() + + XCTAssertNoDifference(registeredLogWriters.count, 1) + + registeredLogWriters.first?.handle("DEBUG Hello, World!") + + XCTAssertNoDifference(logMessages, [ + .init(level: .debug, text: "Hello, World!"), + ]) + } +}