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
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2014-2021 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 Basics
import Foundation
import PackageModel
public struct MockPackage {
public let name: String
public let platforms: [PlatformDescription]
public let location: Location
public let targets: [MockTarget]
public let products: [MockProduct]
public let dependencies: [MockDependency]
public let versions: [String?]
/// Provides revision identifier for the given version. A random identifier might be assigned if this is nil.
public let revisionProvider: ((String) -> String)?
// FIXME: This should be per-version.
public let toolsVersion: ToolsVersion?
public init(
name: String,
platforms: [PlatformDescription] = [],
path: String? = nil,
targets: [MockTarget],
products: [MockProduct] = [],
dependencies: [MockDependency] = [],
versions: [String?] = [],
revisionProvider: ((String) -> String)? = nil,
toolsVersion: ToolsVersion? = nil
) {
let path = try! RelativePath(validating: path ?? name)
self.name = name
self.platforms = platforms
self.location = .fileSystem(path: path)
self.targets = targets
self.products = products
self.dependencies = dependencies
self.versions = versions
self.revisionProvider = revisionProvider
self.toolsVersion = toolsVersion
}
public init(
name: String,
platforms: [PlatformDescription] = [],
url: String,
targets: [MockTarget],
products: [MockProduct],
dependencies: [MockDependency] = [],
versions: [String?] = [],
revisionProvider: ((String) -> String)? = nil,
toolsVersion: ToolsVersion? = nil
) {
self.name = name
self.platforms = platforms
self.location = .sourceControl(url: SourceControlURL(url))
self.targets = targets
self.products = products
self.dependencies = dependencies
self.versions = versions
self.revisionProvider = revisionProvider
self.toolsVersion = toolsVersion
}
public init(
name: String,
platforms: [PlatformDescription] = [],
identity: String,
alternativeURLs: [String]? = .none,
metadata: RegistryReleaseMetadata? = .none,
targets: [MockTarget],
products: [MockProduct],
dependencies: [MockDependency] = [],
versions: [String?] = [],
revisionProvider: ((String) -> String)? = nil,
toolsVersion: ToolsVersion? = nil
) {
self.name = name
self.platforms = platforms
self.location = .registry(
identity: .plain(identity),
alternativeURLs: alternativeURLs?.compactMap{ URL(string: $0) },
metadata: metadata
)
self.targets = targets
self.products = products
self.dependencies = dependencies
self.versions = versions
self.revisionProvider = revisionProvider
self.toolsVersion = toolsVersion
}
public static func genericPackage(named name: String) throws -> MockPackage {
return MockPackage(
name: name,
targets: [
try MockTarget(name: name),
],
products: [
MockProduct(name: name, modules: [name]),
],
versions: ["1.0.0"]
)
}
public enum Location {
case fileSystem(path: RelativePath)
case sourceControl(url: SourceControlURL)
case registry(identity: PackageIdentity, alternativeURLs: [URL]?, metadata: RegistryReleaseMetadata?)
}
}
|