Skip to content
Snippets Groups Projects
Commit 9d7038f9 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add LogMessage model

parent d54a03dc
No related branches found
No related tags found
2 merge requests!116XXMessengerClient - logging,!102Release 1.0.0
import Foundation
import Logging
struct LogMessage: Equatable {
var level: Logger.Level
var text: String
}
extension LogMessage {
static func parse(_ string: String) -> LogMessage? {
let level: Logger.Level
let text: String
let pattern = #"([A-Z]+) (.*)"#
let regex = try! NSRegularExpression(pattern: pattern)
let stringRange = NSRange(location: 0, length: string.utf16.count)
if let match = regex.firstMatch(in: string, range: stringRange) {
var groups: [Int: String] = [:]
for rangeIndex in 1..<match.numberOfRanges {
let nsRange = match.range(at: rangeIndex)
if !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) {
let group = (string as NSString).substring(with: nsRange)
groups[rangeIndex] = group
}
}
level = .fromString(groups[1])
text = groups[2] ?? string
} else {
level = .notice
text = string
}
return LogMessage(level: level, text: text)
}
}
private extension Logger.Level {
static func fromString(_ string: String?) -> Logger.Level {
switch string {
case "TRACE": return .trace
case "DEBUG": return .debug
case "INFO": return .info
case "WARN": return .warning
case "ERROR": return .error
case "CRITICAL": return .critical
case "FATAL": return .critical
default: return .notice
}
}
}
import CustomDump
import XCTest
@testable import XXMessengerClient
final class LogMessageTests: XCTestCase {
func testParsing() {
XCTAssertNoDifference(
LogMessage.parse("TRACE Tracing..."),
LogMessage(level: .trace, text: "Tracing...")
)
XCTAssertNoDifference(
LogMessage.parse("DEBUG Debugging..."),
LogMessage(level: .debug, text: "Debugging...")
)
XCTAssertNoDifference(
LogMessage.parse("INFO Informing..."),
LogMessage(level: .info, text: "Informing...")
)
XCTAssertNoDifference(
LogMessage.parse("WARN Warning!"),
LogMessage(level: .warning, text: "Warning!")
)
XCTAssertNoDifference(
LogMessage.parse("ERROR Failure!"),
LogMessage(level: .error, text: "Failure!")
)
XCTAssertNoDifference(
LogMessage.parse("CRITICAL Critical failure!"),
LogMessage(level: .critical, text: "Critical failure!")
)
XCTAssertNoDifference(
LogMessage.parse("FATAL Fatal failure!"),
LogMessage(level: .critical, text: "Fatal failure!")
)
}
func testParsingFallbacks() {
XCTAssertNoDifference(
LogMessage.parse("1234 Wrongly formatted"),
LogMessage(level: .notice, text: "1234 Wrongly formatted")
)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment