diff --git a/Sources/SwiftDependencyUpdaterLibrary/Dependency.swift b/Sources/SwiftDependencyUpdaterLibrary/Dependency.swift index 2b92644..4f208f4 100644 --- a/Sources/SwiftDependencyUpdaterLibrary/Dependency.swift +++ b/Sources/SwiftDependencyUpdaterLibrary/Dependency.swift @@ -31,6 +31,9 @@ struct Dependency { static func loadDependencies(from folder: URL) throws -> [Dependency] { let packageDescription = try PackageDescription.loadPackageDescription(from: folder) + if packageDescription.dependencies.isEmpty { + return [] + } let resolvedPackage = try ResolvedPackage.loadResolvedPackage(from: folder) let swiftPackageUpdates = try SwiftPackageUpdate.checkUpdates(in: folder) return try mergeDependencies(packageDescription: packageDescription, resolvedPackage: resolvedPackage, swiftPackageUpdates: swiftPackageUpdates) diff --git a/Sources/SwiftDependencyUpdaterLibrary/SwiftPackageUpdate.swift b/Sources/SwiftDependencyUpdaterLibrary/SwiftPackageUpdate.swift index c0ecfa8..4870fcc 100644 --- a/Sources/SwiftDependencyUpdaterLibrary/SwiftPackageUpdate.swift +++ b/Sources/SwiftDependencyUpdaterLibrary/SwiftPackageUpdate.swift @@ -36,7 +36,7 @@ struct SwiftPackageUpdate { return output } catch { let error = error as! ShellOutError // swiftlint:disable:this force_cast - throw PackageDescriptionError.loadingFailed(error.message) + throw SwiftPackageUpdateError.loadingFailed(error.message) } } diff --git a/Tests/SwiftDependencyUpdaterLibraryTests/Extensions/XCTestCase.swift b/Tests/SwiftDependencyUpdaterLibraryTests/Extensions/XCTestCase.swift index 86dfd72..19fdf0b 100644 --- a/Tests/SwiftDependencyUpdaterLibraryTests/Extensions/XCTestCase.swift +++ b/Tests/SwiftDependencyUpdaterLibraryTests/Extensions/XCTestCase.swift @@ -47,6 +47,18 @@ extension XCTestCase { return folder } + func createEmptySwiftPackage() -> URL { + let folder = emptyFolderURL() + let packageSwift = temporaryFileURL(in: folder, name: "Package.swift") + createFile(at: packageSwift, content: TestUtils.emptyPackageSwiftFileContent) + let packageResolved = temporaryFileURL(in: folder, name: "Package.resolved") + createFile(at: packageResolved, content: TestUtils.emptyPackageResolvedFileContent) + let sourceFile = temporaryFileURL(in: folder.appendingPathComponent("Sources/Name"), name: "Name.swift") + createFile(at: sourceFile, content: "") + + return folder + } + func assert(_ expression: @autoclosure () throws -> T, throws expectedError: E, in file: StaticString = #file, line: UInt = #line) { var caughtError: Error? diff --git a/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/GitHubCommandTests.swift b/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/GitHubCommandTests.swift index 523dcdc..8b262a4 100644 --- a/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/GitHubCommandTests.swift +++ b/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/GitHubCommandTests.swift @@ -116,7 +116,7 @@ class GitHubCommandTests: XCTestCase { func testInvalidPackage() { let folder = emptyFolderURL() let packageSwift = temporaryFileURL(in: folder, name: "Package.swift") - createFile(at: packageSwift, content: TestUtils.emptyPackageSwiftFileContent) + createFile(at: packageSwift, content: "// swift-tools-version:5.4") let packageResolved = temporaryFileURL(in: folder, name: "Package.resolved") createFile(at: packageResolved, content: TestUtils.emptyPackageResolvedFileContent) let result = outputFromExecutionWith(arguments: ["github", folder.path]) @@ -266,16 +266,4 @@ class GitHubCommandTests: XCTestCase { enforceOrder: true) } - func createEmptySwiftPackage() -> URL { - let folder = emptyFolderURL() - let packageSwift = temporaryFileURL(in: folder, name: "Package.swift") - createFile(at: packageSwift, content: TestUtils.emptyPackageSwiftFileContent) - let packageResolved = temporaryFileURL(in: folder, name: "Package.resolved") - createFile(at: packageResolved, content: TestUtils.emptyPackageResolvedFileContent) - let sourceFile = temporaryFileURL(in: folder.appendingPathComponent("Sources/Name"), name: "Name.swift") - createFile(at: sourceFile, content: "") - - return folder - } - } diff --git a/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/ListCommandTests.swift b/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/ListCommandTests.swift index 8338f5b..d3f4007 100644 --- a/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/ListCommandTests.swift +++ b/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/ListCommandTests.swift @@ -22,7 +22,7 @@ class ListCommandTests: XCTestCase { func testInvalidPackage() { let folder = emptyFolderURL() let packageSwift = temporaryFileURL(in: folder, name: "Package.swift") - createFile(at: packageSwift, content: TestUtils.emptyPackageSwiftFileContent) + createFile(at: packageSwift, content: "// swift-tools-version:5.4") let packageResolved = temporaryFileURL(in: folder, name: "Package.resolved") createFile(at: packageResolved, content: TestUtils.emptyPackageResolvedFileContent) let result = outputFromExecutionWith(arguments: ["list", folder.path]) @@ -55,16 +55,4 @@ class ListCommandTests: XCTestCase { XCTAssertEqual(result.output, "No dependencies found.") } - func createEmptySwiftPackage() -> URL { - let folder = emptyFolderURL() - let packageSwift = temporaryFileURL(in: folder, name: "Package.swift") - createFile(at: packageSwift, content: TestUtils.emptyPackageSwiftFileContent) - let packageResolved = temporaryFileURL(in: folder, name: "Package.resolved") - createFile(at: packageResolved, content: TestUtils.emptyPackageResolvedFileContent) - let sourceFile = temporaryFileURL(in: folder.appendingPathComponent("Sources/Name"), name: "Name.swift") - createFile(at: sourceFile, content: "") - - return folder - } - } diff --git a/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/UpdateCommandTests.swift b/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/UpdateCommandTests.swift index 6c48e78..7339de9 100644 --- a/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/UpdateCommandTests.swift +++ b/Tests/SwiftDependencyUpdaterLibraryTests/SubCommands/UpdateCommandTests.swift @@ -22,7 +22,7 @@ class UpdateCommandTests: XCTestCase { func testInvalidPackage() { let folder = emptyFolderURL() let packageSwift = temporaryFileURL(in: folder, name: "Package.swift") - createFile(at: packageSwift, content: TestUtils.emptyPackageSwiftFileContent) + createFile(at: packageSwift, content: "// swift-tools-version:5.4") let packageResolved = temporaryFileURL(in: folder, name: "Package.resolved") createFile(at: packageResolved, content: TestUtils.emptyPackageResolvedFileContent) let result = outputFromExecutionWith(arguments: ["update", folder.path]) @@ -55,16 +55,4 @@ class UpdateCommandTests: XCTestCase { XCTAssertEqual(result.output, "Everything is already up-to-date!") } - func createEmptySwiftPackage() -> URL { - let folder = emptyFolderURL() - let packageSwift = temporaryFileURL(in: folder, name: "Package.swift") - createFile(at: packageSwift, content: TestUtils.emptyPackageSwiftFileContent) - let packageResolved = temporaryFileURL(in: folder, name: "Package.resolved") - createFile(at: packageResolved, content: TestUtils.emptyPackageResolvedFileContent) - let sourceFile = temporaryFileURL(in: folder.appendingPathComponent("Sources/Name"), name: "Name.swift") - createFile(at: sourceFile, content: "") - - return folder - } - } diff --git a/Tests/SwiftDependencyUpdaterLibraryTests/SwiftPackageUpdateTests.swift b/Tests/SwiftDependencyUpdaterLibraryTests/SwiftPackageUpdateTests.swift index a601ce1..235e411 100644 --- a/Tests/SwiftDependencyUpdaterLibraryTests/SwiftPackageUpdateTests.swift +++ b/Tests/SwiftDependencyUpdaterLibraryTests/SwiftPackageUpdateTests.swift @@ -28,4 +28,17 @@ class SwiftPackageUpdateTests: XCTestCase { Rainbow.enabled = originalValue } + func testCheckUpdatesEmptyFolder() { + let folder = emptyFolderURL() + assert( + try SwiftPackageUpdate.checkUpdates(in: folder), + throws: SwiftPackageUpdateError.loadingFailed("error: root manifest not found") + ) + } + + func testCheckUpdatesEmptySwiftPackage() { + let folder = createEmptySwiftPackage() + XCTAssert(try! SwiftPackageUpdate.checkUpdates(in: folder).isEmpty) + } + }