From 298f5fd2a4ac111a8ad4031e41e22693acb083d7 Mon Sep 17 00:00:00 2001 From: Mike Robinson Date: Wed, 11 Nov 2020 12:28:55 +0000 Subject: [PATCH 1/2] Adds func to access logs with out removeing them --- Sources/TimeIt/TimeIt.swift | 22 ++++++++++++++++---- Tests/TimeItTests/TimeItTests.swift | 32 +++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/Sources/TimeIt/TimeIt.swift b/Sources/TimeIt/TimeIt.swift index 3a581a0..ec328f8 100644 --- a/Sources/TimeIt/TimeIt.swift +++ b/Sources/TimeIt/TimeIt.swift @@ -20,15 +20,29 @@ public class TimeIt { } } + public static func access(log: String, completion: @escaping ([String]) -> Void) { + queue.async { + if let logEntries = storage[log], let start = logEntries.first?.stamp { + let logDescriptions = describe(logEntries: logEntries, started: start, titled: log) + completion(logDescriptions) + } + } + } + public static func complete(log: String, completion: @escaping ([String]) -> Void) { queue.async { if let logEntries = storage.removeValue(forKey: log), let start = logEntries.first?.stamp { - let logs = logEntries.map { logEntry -> String in - let interval = String(format: "%.4f", logEntry.stamp.timeIntervalSince(start)) - return "[\(log)] \(formatter.string(from: logEntry.stamp)) \(interval)secs \(logEntry.entry)" - } + let logs = describe(logEntries: logEntries, started: start, titled: log) completion(logs) } } } + + private static func describe(logEntries: [LogEntry], started start: Date, titled title: String) -> [String] { + let logs = logEntries.map { logEntry -> String in + let interval = String(format: "%.4f", logEntry.stamp.timeIntervalSince(start)) + return "[\(title)] \(formatter.string(from: logEntry.stamp)) \(interval)secs \(logEntry.entry)" + } + return logs + } } diff --git a/Tests/TimeItTests/TimeItTests.swift b/Tests/TimeItTests/TimeItTests.swift index 2405d04..be5cf44 100644 --- a/Tests/TimeItTests/TimeItTests.swift +++ b/Tests/TimeItTests/TimeItTests.swift @@ -3,22 +3,42 @@ import TimeIt final class TimeItTests: XCTestCase { - func testTimeIt() { + func testTimeItAccesses() { TimeIt.log("test", entry: "first") TimeIt.log("test", entry: "second") let e = expectation(description: "logs in correct order") - TimeIt.complete(log: "test") { logs in + TimeIt.access(log: "test") { logs in guard logs[0].contains("first") else { XCTFail("first log message not correct"); return } guard logs[1].contains("second") else { XCTFail("second log message not correct"); return } - e.fulfill() } + TimeIt.log("test", entry: "third") + + TimeIt.access(log: "test") { logs in + guard logs[2].contains("third") else { XCTFail("third log message not correct"); return } + e.fulfill() + } waitForExpectations(timeout: 0.5) } - static var allTests = [ - ("testExample", testTimeIt), - ] + func testTimeItCompletes() { + TimeIt.log("test", entry: "first") + TimeIt.log("test", entry: "second") + + let e = expectation(description: "logs in correct order") + + TimeIt.complete(log: "test") { logs in + guard logs[0].contains("first") else { XCTFail("first log message not correct"); return } + guard logs[1].contains("second") else { XCTFail("second log message not correct"); return } + } + + TimeIt.log("test", entry: "second") + + TimeIt.complete(log: "test") { logs in + guard logs[0].contains("third") else { e.fulfill(); return } + } + waitForExpectations(timeout: 0.5) + } } From 7776e9248aae7b29cbe464099b663f3e0f8fbab5 Mon Sep 17 00:00:00 2001 From: Mike Robinson Date: Wed, 11 Nov 2020 12:33:46 +0000 Subject: [PATCH 2/2] Readds allTests static var for Linux tests --- Tests/TimeItTests/TimeItTests.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Tests/TimeItTests/TimeItTests.swift b/Tests/TimeItTests/TimeItTests.swift index be5cf44..e23f6f2 100644 --- a/Tests/TimeItTests/TimeItTests.swift +++ b/Tests/TimeItTests/TimeItTests.swift @@ -3,6 +3,11 @@ import TimeIt final class TimeItTests: XCTestCase { + static var allTests = [ + ("testTimeItAccesses", testTimeItAccesses), + ("testTimeItCompletes", testTimeItCompletes), + ] + func testTimeItAccesses() { TimeIt.log("test", entry: "first") TimeIt.log("test", entry: "second")