Skip to content

Commit

Permalink
add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
martindsq committed Dec 1, 2021
1 parent 8c0fb24 commit 0c8134c
Show file tree
Hide file tree
Showing 11 changed files with 260 additions and 44 deletions.
11 changes: 10 additions & 1 deletion .swiftpm/xcode/xcshareddata/xcschemes/Logger.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,16 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES">
onlyGenerateCoverageForSpecifiedTargets = "YES">
<CodeCoverageTargets>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "Logger"
BuildableName = "Logger"
BlueprintName = "Logger"
ReferencedContainer = "container:">
</BuildableReference>
</CodeCoverageTargets>
<Testables>
<TestableReference
skipped = "NO">
Expand Down
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ let package = Package(
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "Logger",
dependencies: ["CocoaLumberjack"]),
dependencies: [.product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack")]),
.testTarget(
name: "LoggerTests",
dependencies: ["Logger"]),
Expand Down
2 changes: 1 addition & 1 deletion Sources/Logger/Delivery/Logger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class Logger {

var service: LoggerService

init(service: LoggerService = CocoaLumberjackService()) {
init(service: LoggerService = LoggerServiceAdapter(fileLoggerService: CocoaLumberjackService())) {
self.service = service
}

Expand Down
20 changes: 20 additions & 0 deletions Sources/Logger/Domain/Services/FileLoggerService.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// FileLoggerService.swift
//
//
// Created by Martin Dutra on 1/12/21.
//

import Foundation

protocol FileLoggerService {

var fileUrls: [URL] { get }

func debug(_ string: String)

func info(_ string: String)

func error(_ string: String)

}
9 changes: 7 additions & 2 deletions Sources/Logger/Domain/Services/LoggerService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,20 @@
//

import Foundation
import os.log

protocol LoggerService {

var fileUrls: [URL] { get }

func optional(_ error: Error?, _ detail: String?) -> Bool
func info(_ string: String)
func debug(_ string: String)

func info(_ string: String)

func optional(_ error: Error?, _ detail: String?) -> Bool

func unexpected(_ reason: String, _ detail: String?)

func fatal(_ reason: String, _ detail: String?)

}
57 changes: 57 additions & 0 deletions Sources/Logger/Domain/Services/LoggerServiceAdapter.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
//
// LoggerServiceAdapter.swift
//
//
// Created by Martin Dutra on 1/12/21.
//

import Foundation
import os.log

class LoggerServiceAdapter: LoggerService {

var fileLoggerService: FileLoggerService

init(fileLoggerService: FileLoggerService) {
self.fileLoggerService = fileLoggerService
}

var fileUrls: [URL] {
return fileLoggerService.fileUrls
}

func debug(_ string: String) {
let message = "LOG:DEBUG: \(string)"
fileLoggerService.debug(message)
os_log("%@", type: OSLogType.debug, message)
}

func info(_ string: String) {
let message = "LOG:INFO: \(string)"
os_log("%@", type: OSLogType.info, message)
fileLoggerService.info(message)
}

func optional(_ error: Error?, _ detail: String?) -> Bool {
guard let error = error else {
return false
}
let message = "LOG:ERROR:\(detail ?? "") \(error)"
os_log("%@", type: OSLogType.error, message)
fileLoggerService.error(message)
return true
}

func unexpected(_ reason: String, _ detail: String?) {
let message = "LOG:UNEXPECTED:\(reason) \(detail ?? "")"
os_log("%@", type: OSLogType.error, message)
fileLoggerService.error(message)
}

func fatal(_ reason: String, _ detail: String?) {
let message = "LOG:FATAL:\(reason) \(detail ?? "")"
os_log("%@", type: OSLogType.fault, message)
fileLoggerService.error(message)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@
//

import Foundation
import CocoaLumberjack
import os.log
import CocoaLumberjackSwift

class CocoaLumberjackService: LoggerService {
class CocoaLumberjackService: FileLoggerService {

private var fileLogger: DDFileLogger

Expand All @@ -24,38 +23,16 @@ class CocoaLumberjackService: LoggerService {
DDLog.add(fileLogger)
}

func optional(_ error: Error?, _ detail: String?) -> Bool {
guard let error = error else { return false }
let string = "LOG:ERROR:\(detail ?? "") \(error)"
os_log("%@", type: OSLogType.error, string)
// DDLogError(string)
return true
}

func info(_ string: String) {
// DDLogInfo(string)
let message = "LOG:INFO: \(string)"
os_log("%@", type: OSLogType.info, message)
}

func debug(_ string: String) {
// DDLogDebug(string)
let message = "LOG:DEBUG: \(string)"
os_log("%@", type: OSLogType.debug, message)
DDLogDebug(string)
}

func unexpected(_ reason: String, _ detail: String?) {
let string = "\(reason) \(detail ?? "")"
// DDLogError(string)
let message = "LOG:UNEXPECTED:\(string)"
os_log("%@", type: OSLogType.error, message)
func info(_ string: String) {
DDLogInfo(string)
}

func fatal(_ reason: String, _ detail: String?) {
let string = "\(reason) \(detail ?? "")"
// DDLogError(string)
let message = "LOG:FATAL:\(string)"
os_log("%@", type: OSLogType.fault, message)

func error(_ string: String) {
DDLogError(string)
}

}
59 changes: 59 additions & 0 deletions Tests/LoggerTests/Domain/LoggerServiceAdapterTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
//
// LoggerServiceAdapterTests.swift
//
//
// Created by Martin Dutra on 1/12/21.
//

import XCTest
@testable import Logger

final class LoggerServiceAdapterTests: XCTestCase {

private var fileLoggerService: FileLoggerServiceMock!
private var loggerService: LoggerServiceAdapter!

override func setUp() {
fileLoggerService = FileLoggerServiceMock()
loggerService = LoggerServiceAdapter(fileLoggerService: fileLoggerService)
}

func testDebug() {
loggerService.debug("test")
XCTAssertTrue(fileLoggerService.invokedDebug)
XCTAssertEqual(fileLoggerService.lastLine, "LOG:DEBUG: test")
}

func testInfo() {
loggerService.info("test")
XCTAssert(fileLoggerService.invokedInfo)
XCTAssertEqual(fileLoggerService.lastLine, "LOG:INFO: test")
}

func testOptional() {
XCTAssertFalse(loggerService.optional(nil, "test"))
XCTAssertFalse(fileLoggerService.invokedError)

let error = NSError(domain: "domain", code: 1, userInfo: nil)
XCTAssertTrue(loggerService.optional(error, "test"))
XCTAssertTrue(fileLoggerService.invokedError)
XCTAssertEqual(fileLoggerService.lastLine, "LOG:ERROR:test \(error.description)")
}

func testFatal() {
loggerService.fatal("reason", "test")
XCTAssertTrue(fileLoggerService.invokedError)
XCTAssertEqual(fileLoggerService.lastLine, "LOG:FATAL:reason test")
}

func testUnexpected() {
loggerService.unexpected("reason", "test")
XCTAssertTrue(fileLoggerService.invokedError)
XCTAssertEqual(fileLoggerService.lastLine, "LOG:UNEXPECTED:reason test")
}

func testFileUrls() {
XCTAssertEqual(fileLoggerService.fileUrls, loggerService.fileUrls)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
//
// CocoaLumberjackServiceTests.swift
//
//
// Created by Martin Dutra on 30/11/21.
//

import XCTest
@testable import Logger
import CocoaLumberjackSwift

final class CocoaLumberjackServiceTests: XCTestCase {

private var service: CocoaLumberjackService!

override func setUp() {
asyncLoggingEnabled = false
service = CocoaLumberjackService()
}

func testDebug() {
service.debug("test")
let lastLine = readLastLine()
XCTAssertTrue(lastLine?.contains("test") ?? false)
}

func testInfo() {
service.info("info")
let lastLine = readLastLine()
XCTAssertTrue(lastLine?.contains("info") ?? false)
}

func testError() {
service.error("error")
let lastLine = readLastLine()
XCTAssertTrue(lastLine?.contains("error") ?? false)
}

func readLastLine() -> String? {
guard let url = service.fileUrls.last else {
return nil
}
do {
let data = try String(contentsOf: url, encoding: .utf8)
var lines = data.components(separatedBy: .newlines)
lines.removeLast()
return lines.last
} catch {
return nil
}
}
}
37 changes: 37 additions & 0 deletions Tests/LoggerTests/Mocks/FileLoggerServiceMock.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//
// FileLoggerServiceMock.swift
//
//
// Created by Martin Dutra on 22/11/21.
//

import Foundation
@testable import Logger

class FileLoggerServiceMock: FileLoggerService {

var invokedDebug = false
var invokedInfo = false
var invokedError = false
var lastLine: String = ""

var fileUrls: [URL] {
return []
}

func debug(_ string: String) {
invokedDebug = true
lastLine = string
}

func info(_ string: String) {
invokedInfo = true
lastLine = string
}

func error(_ string: String) {
invokedError = true
lastLine = string
}

}
16 changes: 8 additions & 8 deletions Tests/LoggerTests/Mocks/LoggerServiceMock.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// LoggerServiceMock.swift
//
//
//
// Created by Martin Dutra on 22/11/21.
//
Expand All @@ -10,27 +10,27 @@ import Foundation

class LoggerServiceMock: LoggerService {

var invokedOptional = false
var invokedInfo = false
var invokedDebug = false
var invokedInfo = false
var invokedOptional = false
var invokedUnexpected = false
var invokedFatal = false

var fileUrls: [URL] {
return []
}

func optional(_ error: Error?, _ detail: String?) -> Bool {
invokedOptional = true
return true
func debug(_ string: String) {
invokedDebug = true
}

func info(_ string: String) {
invokedInfo = true
}

func debug(_ string: String) {
invokedDebug = true
func optional(_ error: Error?, _ detail: String?) -> Bool {
invokedOptional = true
return true
}

func unexpected(_ reason: String, _ detail: String?) {
Expand Down

0 comments on commit 0c8134c

Please sign in to comment.