Skip to content

Commit

Permalink
Enhance dependency factory
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex da Franca committed Dec 2, 2024
1 parent e56603f commit 83b7519
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 19 deletions.
10 changes: 7 additions & 3 deletions Sources/xcresultparser/CoverageConverter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ public class CoverageConverter {
let coverageTargets: Set<String>
let excludedPaths: Set<String>

// MARK: - Dependencies

let shell = DependencyFactory.shell()

public init?(
with url: URL,
projectRoot: String = "",
Expand Down Expand Up @@ -81,7 +85,7 @@ public class CoverageConverter {
}
arguments.append("--json")
arguments.append(resultFile.url.path)
let coverageData = try DependencyFactory.shell.execute(program: "/usr/bin/xcrun", with: arguments)
let coverageData = try shell.execute(program: "/usr/bin/xcrun", with: arguments)
return try JSONDecoder().decode(FileCoverage.self, from: coverageData)
}

Expand All @@ -107,7 +111,7 @@ public class CoverageConverter {
arguments.append("--file")
arguments.append(path)
arguments.append(resultFile.url.path)
let coverageData = try DependencyFactory.shell.execute(program: "/usr/bin/xcrun", with: arguments)
let coverageData = try shell.execute(program: "/usr/bin/xcrun", with: arguments)
return String(decoding: coverageData, as: UTF8.self)
}

Expand All @@ -121,7 +125,7 @@ public class CoverageConverter {
}
arguments.append("--file-list")
arguments.append(resultFile.url.path)
let filelistData = try DependencyFactory.shell.execute(program: "/usr/bin/xcrun", with: arguments)
let filelistData = try shell.execute(program: "/usr/bin/xcrun", with: arguments)
return String(decoding: filelistData, as: UTF8.self).components(separatedBy: "\n")
}
}
4 changes: 2 additions & 2 deletions Sources/xcresultparser/JunitXML.swift
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public struct JunitXML: XmlSerializable {
}

var isDirectory: ObjCBool = false
if DependencyFactory.fileManager.fileExists(atPath: projectRoot, isDirectory: &isDirectory),
if DependencyFactory.fileManager().fileExists(atPath: projectRoot, isDirectory: &isDirectory),
isDirectory.boolValue == true {
self.projectRoot = URL(fileURLWithPath: projectRoot)
} else {
Expand Down Expand Up @@ -387,7 +387,7 @@ private extension ActionTestSummaryGroup {
"^(?:public )?(?:final )?(?:public )?(?:(class|\\@implementation) )[a-zA-Z0-9_]+",
grepPathArgument
]
guard let filelistData = try? DependencyFactory.shell.execute(program: program, with: arguments, at: projectRootUrl) else {
guard let filelistData = try? DependencyFactory.shell().execute(program: program, with: arguments, at: projectRootUrl) else {
return
}
let trimCharacterSet = CharacterSet.whitespacesAndNewlines.union(CharacterSet(charactersIn: ":"))
Expand Down
8 changes: 6 additions & 2 deletions Sources/xcresultparser/Services/DependencyFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
import Foundation

class DependencyFactory {
static var shell: Commandline = Shell()
static var fileManager: FileManaging = FileManager.default
static var shell: () -> Commandline = {
Shell()
}
static var fileManager: () -> FileManaging = {
FileManager.default
}
}
32 changes: 20 additions & 12 deletions Tests/XcresultparserTests/XcresultparserTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -343,12 +343,16 @@ final class XcresultparserTests: XCTestCase {
let cliResult = """
./Tests/XcresultparserTests.swift:class XcresultparserTests
"""
let oldFilemanger = DependencyFactory.fileManager
let oldShell = DependencyFactory.shell
let savedFilemangerFactory = DependencyFactory.fileManager
let savedShellFactory = DependencyFactory.shell

DependencyFactory.fileManager = MockedFileManager(fileExists: true , isPathDirectory: true)
DependencyFactory.fileManager = {
MockedFileManager(fileExists: true , isPathDirectory: true)
}
let mockedShell = MockedShell(response: Data(cliResult.utf8), error: nil)
DependencyFactory.shell = mockedShell
DependencyFactory.shell = {
mockedShell
}
mockedShell.argumentValidation = { arguments in
return arguments.last == "."
}
Expand All @@ -366,8 +370,8 @@ final class XcresultparserTests: XCTestCase {
}
try assertXmlTestReportsAreEqual(expectedFileName: "sonarTestExecutionWithProjectRootRelative", actual: junitXML)

DependencyFactory.fileManager = oldFilemanger
DependencyFactory.shell = oldShell
DependencyFactory.fileManager = savedFilemangerFactory
DependencyFactory.shell = savedShellFactory
}

func testJunitXMLSonarAbsolutePaths() throws {
Expand All @@ -376,12 +380,16 @@ final class XcresultparserTests: XCTestCase {
/Users/actual/project/Tests/XcresultparserTests.swift:class XcresultparserTests
"""

let oldFilemanger = DependencyFactory.fileManager
let oldShell = DependencyFactory.shell
let savedFilemangerFactory = DependencyFactory.fileManager
let savedShellFactory = DependencyFactory.shell

DependencyFactory.fileManager = MockedFileManager(fileExists: true , isPathDirectory: true)
DependencyFactory.fileManager = {
MockedFileManager(fileExists: true , isPathDirectory: true)
}
let mockedShell = MockedShell(response: Data(cliResult.utf8), error: nil)
DependencyFactory.shell = mockedShell
DependencyFactory.shell = {
mockedShell
}
mockedShell.argumentValidation = { arguments in
return arguments.last != "."
}
Expand All @@ -399,8 +407,8 @@ final class XcresultparserTests: XCTestCase {
}
try assertXmlTestReportsAreEqual(expectedFileName: "sonarTestExecutionWithProjectRootAbsolute", actual: junitXML)

DependencyFactory.fileManager = oldFilemanger
DependencyFactory.shell = oldShell
DependencyFactory.fileManager = savedFilemangerFactory
DependencyFactory.shell = savedShellFactory
}

func testJunitXMLJunit() throws {
Expand Down

0 comments on commit 83b7519

Please sign in to comment.