1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2022-2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import Foundation
import Basics
import _InternalTestSupport
@testable import SourceControl
import Testing
struct GitRepositoryProviderTests {
@Test(
.bug("https://github.com/swiftlang/swift-package-manager/issues/8564"),
.disabled(if: CiEnvironment.runningInSelfHostedPipeline && ProcessInfo.hostOperatingSystem == .windows),
)
func isValidDirectory() throws {
try testWithTemporaryDirectory { sandbox in
let provider = GitRepositoryProvider()
// standard repository
let repositoryPath = sandbox.appending("test")
try localFileSystem.createDirectory(repositoryPath)
initGitRepo(repositoryPath)
#expect(try provider.isValidDirectory(repositoryPath))
// no-checkout bare repository
let noCheckoutRepositoryPath = sandbox.appending("test-no-checkout")
try localFileSystem.copy(from: repositoryPath.appending(".git"), to: noCheckoutRepositoryPath)
#expect(try provider.isValidDirectory(noCheckoutRepositoryPath))
// non-git directory
let notGitPath = sandbox.appending("test-not-git")
#expect(throws: (any Error).self) {
try provider.isValidDirectory(notGitPath)
}
// non-git child directory of a git directory
let notGitChildPath = repositoryPath.appending("test-not-git")
#expect(throws: (any Error).self) {
try provider.isValidDirectory(notGitChildPath)
}
}
}
@Test(
.bug("https://github.com/swiftlang/swift-package-manager/issues/8564"),
.disabled(if: CiEnvironment.runningInSelfHostedPipeline && ProcessInfo.hostOperatingSystem == .windows),
)
func isValidDirectoryThrowsPrintableError() throws {
try testWithTemporaryDirectory { temp in
let provider = GitRepositoryProvider()
let expectedErrorMessage = "not a git repository"
#expect {
try provider.isValidDirectory(temp)
} throws: { error in
let errorString = String(describing: error)
let matched = errorString.contains(expectedErrorMessage)
return matched
}
}
}
@Test(
.bug("https://github.com/swiftlang/swift-package-manager/issues/8564"),
.disabled(if: CiEnvironment.runningInSelfHostedPipeline && ProcessInfo.hostOperatingSystem == .windows),
)
func gitShellErrorIsPrintable() throws {
let stdOut = "An error from Git - stdout"
let stdErr = "An error from Git - stderr"
let arguments = ["git", "error"]
let command = "git error"
let result = AsyncProcessResult(
arguments: arguments,
environment: [:],
exitStatus: .terminated(code: 1),
output: .success(Array(stdOut.utf8)),
stderrOutput: .success(Array(stdErr.utf8))
)
let error = GitShellError(result: result)
let errorString = "\(error)"
#expect(
errorString.contains(stdOut),
"Error string '\(errorString)' should contain '\(stdOut)'")
#expect(
errorString.contains(stdErr),
"Error string '\(errorString)' should contain '\(stdErr)'")
#expect(
errorString.contains(command),
"Error string '\(errorString)' should contain '\(command)'")
}
@Test(
.bug("https://github.com/swiftlang/swift-package-manager/issues/8564"),
.disabled(if: CiEnvironment.runningInSelfHostedPipeline && ProcessInfo.hostOperatingSystem == .windows),
)
func gitShellErrorEmptyStdOut() throws {
let stdErr = "An error from Git - stderr"
let result = AsyncProcessResult(
arguments: ["git", "error"],
environment: [:],
exitStatus: .terminated(code: 1),
output: .success([]),
stderrOutput: .success(Array(stdErr.utf8))
)
let error = GitShellError(result: result)
let errorString = "\(error)"
#expect(
errorString.contains(stdErr),
"Error string '\(errorString)' should contain '\(stdErr)'")
}
@Test(
.bug("https://github.com/swiftlang/swift-package-manager/issues/8564"),
.disabled(if: CiEnvironment.runningInSelfHostedPipeline && ProcessInfo.hostOperatingSystem == .windows),
)
func gitShellErrorEmptyStdErr() throws {
let stdOut = "An error from Git - stdout"
let result = AsyncProcessResult(
arguments: ["git", "error"],
environment: [:],
exitStatus: .terminated(code: 1),
output: .success(Array(stdOut.utf8)),
stderrOutput: .success([])
)
let error = GitShellError(result: result)
let errorString = "\(error)"
#expect(
errorString.contains(stdOut),
"Error string '\(errorString)' should contain '\(stdOut)'"
)
}
}
|