swift format

This commit is contained in:
Yonas Kolb 2020-06-17 18:12:34 +10:00
parent 0964a7ed30
commit 7da953a488
23 changed files with 166 additions and 167 deletions

View File

@ -19,7 +19,7 @@ let package = Package(
.package(url: "https://github.com/tuist/XcodeProj.git", .exact("7.10.0")),
.package(url: "https://github.com/jakeheis/SwiftCLI.git", from: "6.0.0"),
.package(url: "https://github.com/mxcl/Version", from: "2.0.0"),
.package(url: "https://github.com/SwiftDocOrg/GraphViz.git", from: "0.1.0")
.package(url: "https://github.com/SwiftDocOrg/GraphViz.git", from: "0.1.0"),
],
targets: [
.target(name: "XcodeGen", dependencies: [

View File

@ -3,30 +3,30 @@ import JSONUtilities
/// Describes an order of groups.
public struct GroupOrdering: Equatable {
/// A group name pattern.
public var pattern: String
/// A group name regex.
public var regex: NSRegularExpression?
/// Subgroups orders.
public var order: [String]
public init(pattern: String = "", order: [String] = []) {
self.pattern = pattern
self.regex = try? NSRegularExpression(pattern: pattern)
self.order = order
}
}
extension GroupOrdering: JSONObjectConvertible {
public init(jsonDictionary: JSONDictionary) throws {
pattern = jsonDictionary.json(atKeyPath: "pattern") ?? ""
regex = try? NSRegularExpression(pattern: pattern)
order = jsonDictionary.json(atKeyPath: "order") ?? []
}
}

View File

@ -1,10 +1,10 @@
import Foundation
public extension NSRegularExpression {
func isMatch(to string: String) -> Bool {
let range = NSRange(location: 0, length: string.utf16.count)
return self.firstMatch(in: string, options: [], range: range) != nil
}
}

View File

@ -186,10 +186,11 @@ extension Project {
}
// For backward compatibility of old `localPackages:` format
if let localPackages: [String] = jsonDictionary.json(atKeyPath: "localPackages") {
packages.merge(localPackages.reduce(into: [String: SwiftPackage](), {
packages.merge(localPackages.reduce(into: [String: SwiftPackage]()) {
// Project name will be obtained by resolved abstractpath's lastComponent for dealing with some path case, like "../"
let packageName = (basePath + Path($1).normalize()).lastComponent
$0[packageName] = .local(path: $1) })
$0[packageName] = .local(path: $1)
}
)
}
if jsonDictionary["options"] != nil {

View File

@ -37,7 +37,7 @@ public struct Scheme: Equatable {
case predefined = "1"
case gpx = "0"
}
public var allow: Bool
public var defaultLocation: String?
@ -333,7 +333,7 @@ extension Scheme.SimulateLocation: JSONObjectConvertible {
extension Scheme.SimulateLocation: JSONEncodable {
public func toJSONValue() -> Any {
var dict: [String: Any] = [
"allow": allow
"allow": allow,
]
if let defaultLocation = defaultLocation {
@ -367,7 +367,7 @@ extension Scheme.Run: JSONObjectConvertible {
} else if let string: String = jsonDictionary.json(atKeyPath: "launchAutomaticallySubstyle") {
launchAutomaticallySubstyle = string
}
if let askLaunch: Bool = jsonDictionary.json(atKeyPath: "askForAppToLaunch") {
askForAppToLaunch = askLaunch
}
@ -392,7 +392,7 @@ extension Scheme.Run: JSONEncodable {
if disableMainThreadChecker != Scheme.Run.disableMainThreadCheckerDefault {
dict["disableMainThreadChecker"] = disableMainThreadChecker
}
if stopOnEveryMainThreadCheckerIssue != Scheme.Run.stopOnEveryMainThreadCheckerIssueDefault {
dict["stopOnEveryMainThreadCheckerIssue"] = stopOnEveryMainThreadCheckerIssue
}

View File

@ -196,7 +196,7 @@ extension Project {
for scheme in schemes {
errors.append(
contentsOf: scheme.build.targets.compactMap({ validationError(for: $0.target, in: scheme, action: "build") })
contentsOf: scheme.build.targets.compactMap { validationError(for: $0.target, in: scheme, action: "build") }
)
if let action = scheme.run, let config = action.config, getConfig(config) == nil {
errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))
@ -205,10 +205,10 @@ extension Project {
errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))
}
errors.append(
contentsOf: scheme.test?.targets.compactMap({ validationError(for: $0.targetReference, in: scheme, action: "test") }) ?? []
contentsOf: scheme.test?.targets.compactMap { validationError(for: $0.targetReference, in: scheme, action: "test") } ?? []
)
errors.append(
contentsOf: scheme.test?.coverageTargets.compactMap({ validationError(for: $0, in: scheme, action: "test") }) ?? []
contentsOf: scheme.test?.coverageTargets.compactMap { validationError(for: $0, in: scheme, action: "test") } ?? []
)
if let action = scheme.profile, let config = action.config, getConfig(config) == nil {
errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))

View File

@ -9,7 +9,7 @@ public enum SwiftPackage: Equatable {
case remote(url: String, versionRequirement: VersionRequirement)
case local(path: String)
public var isLocal: Bool {
if case .local = self {
return true
@ -80,7 +80,7 @@ extension SwiftPackage: JSONEncodable {
case .local(let path):
dictionary["path"] = path
}
return dictionary
}
}

View File

@ -98,7 +98,7 @@ extension TargetScheme: JSONEncodable {
if disableMainThreadChecker != TargetScheme.disableMainThreadCheckerDefault {
dict["disableMainThreadChecker"] = disableMainThreadChecker
}
if stopOnEveryMainThreadCheckerIssue != TargetScheme.stopOnEveryMainThreadCheckerIssueDefault {
dict["stopOnEveryMainThreadCheckerIssue"] = stopOnEveryMainThreadCheckerIssue
}

View File

@ -1,6 +1,6 @@
//
// File.swift
//
//
//
// Created by Yonas Kolb on 7/2/20.
//

View File

@ -23,7 +23,7 @@ class Mutex<T> {
return try closure(&value)
}
func get(closure: (inout T) -> ()) {
func get(closure: (inout T) -> Void) {
semaphore.wait()
closure(&value)
semaphore.signal()

View File

@ -32,7 +32,7 @@ extension Node {
self.init(target.name)
self.shape = .box
}
init(dependency: Dependency) {
self.init(dependency.reference)
self.shape = .box
@ -41,13 +41,13 @@ extension Node {
}
public class GraphVizGenerator {
public init() {}
public func generateModuleGraphViz(targets: [Target]) -> String {
return DOTEncoder().encode(generateGraph(targets: targets))
}
func generateGraph(targets: [Target]) -> Graph {
var graph = Graph(directed: true)
targets.forEach { target in

View File

@ -55,7 +55,7 @@ public class PBXProjGenerator {
for group in project.fileGroups {
try sourceGenerator.getFileGroups(path: group)
}
let buildConfigs: [XCBuildConfiguration] = project.configs.map { config in
let buildSettings = project.getProjectBuildSettings(config: config)
var baseConfiguration: PBXFileReference?
@ -212,7 +212,7 @@ public class PBXProjGenerator {
)
return [
"ProductGroup": group,
"ProjectRef": projectReference
"ProjectRef": projectReference,
]
}
@ -281,10 +281,10 @@ public class PBXProjGenerator {
target.sources.map { $0.resourceTags }.flatMap { $0 }
}.flatMap { $0 }
).sorted()
var projectAttributes: [String: Any] = ["LastUpgradeCheck": project.xcodeVersion]
.merged(project.attributes)
if !assetTags.isEmpty {
projectAttributes["knownAssetTags"] = assetTags
}
@ -431,7 +431,7 @@ public class PBXProjGenerator {
let defaultConfigurationName = targetObject.buildConfigurationList?.defaultConfigurationName,
let defaultConfiguration = buildConfigurations.first(where: { $0.name == defaultConfigurationName }) ?? buildConfigurations.first else {
fatalError("Missing target info")
fatalError("Missing target info")
}
let buildSettings = defaultConfiguration.buildSettings
@ -574,28 +574,28 @@ public class PBXProjGenerator {
let childGroups = group.children.compactMap { $0 as? PBXGroup }
childGroups.forEach(sortGroups)
}
public func setupGroupOrdering(group: PBXGroup) {
let groupOrdering = project.options.groupOrdering.first { groupOrdering in
let groupName = group.nameOrPath
if groupName == groupOrdering.pattern {
return true
}
if let regex = groupOrdering.regex {
return regex.isMatch(to: groupName)
}
return false
}
if let order = groupOrdering?.order {
let files = group.children.filter { $0 is PBXFileReference }
var groups = group.children.filter { $0 is PBXGroup }
var filteredGroups = [PBXFileElement]()
for groupName in order {
guard let group = groups.first(where: { $0.nameOrPath == groupName }) else {
continue
@ -606,7 +606,7 @@ public class PBXProjGenerator {
}
filteredGroups += groups
switch project.options.groupSortPosition {
case .top:
group.children = filteredGroups + files
@ -616,7 +616,7 @@ public class PBXProjGenerator {
break
}
}
// sort sub groups
let childGroups = group.children.compactMap { $0 as? PBXGroup }
childGroups.forEach(setupGroupOrdering)
@ -684,7 +684,7 @@ public class PBXProjGenerator {
let dependencyLinkage = dependencyTarget.type.defaultLinkage
let link = dependency.link ??
((dependencyLinkage == .dynamic && target.type != .staticLibrary) ||
(dependencyLinkage == .static && target.type.isExecutable))
(dependencyLinkage == .static && target.type.isExecutable))
if link, let dependencyFile = embedFileReference {
let buildFile = addObject(
@ -854,7 +854,7 @@ public class PBXProjGenerator {
// Embedding handled by iterating over `carthageDependencies` below
case .package(let product):
let packageReference = packageReferences[dependency.reference]
// If package's reference is none and there is no specified package in localPackages,
// then ignore the package specified as dependency.
if packageReference == nil, !localPackageReferences.contains(dependency.reference) {
@ -879,7 +879,7 @@ public class PBXProjGenerator {
)
dependencies.append(targetDependency)
}
if dependency.embed == true {
let embedFile = addObject(
PBXBuildFile(product: packageDependency,

View File

@ -233,7 +233,7 @@ public class SchemeGenerator {
}
locationScenarioReference = XCScheme.LocationScenarioReference(identifier: identifier, referenceType: referenceType.rawValue)
}
let launchAction = XCScheme.LaunchAction(
runnable: shouldExecuteOnLaunch ? runnables.launch : nil,
buildConfiguration: scheme.run?.config ?? defaultDebugConfig.name,

View File

@ -60,12 +60,12 @@ class SourceGenerator {
localPackageGroup = addObject(PBXGroup(sourceTree: .sourceRoot, name: groupName))
rootGroups.insert(localPackageGroup!)
}
let absolutePath = project.basePath + path.normalize()
// Get the local package's relative path from the project root
let fileReferencePath = try? absolutePath.relativePath(from: projectDirectory ?? project.basePath).string
let fileReference = addObject(
PBXFileReference(
sourceTree: .sourceRoot,
@ -130,7 +130,7 @@ class SourceGenerator {
if !attributes.isEmpty {
settings["ATTRIBUTES"] = attributes
}
if chosenBuildPhase == .resources && !targetSource.resourceTags.isEmpty {
settings["ASSET_TAGS"] = targetSource.resourceTags
}
@ -420,7 +420,8 @@ class SourceGenerator {
let filePaths = children
.filter { $0.isFile || $0.isDirectory && $0.extension != "lproj"
&& Xcode.isDirectoryFileWrapper(path: $0) }
&& Xcode.isDirectoryFileWrapper(path: $0)
}
let localisedDirectories = children
.filter { $0.extension == "lproj" }
@ -552,7 +553,7 @@ class SourceGenerator {
let type = targetSource.type ?? (path.isFile || path.extension != nil ? .file : .group)
let customParentGroups = (targetSource.group ?? "").split(separator: "/").map{ String($0) }
let customParentGroups = (targetSource.group ?? "").split(separator: "/").map { String($0) }
let hasCustomParent = !customParentGroups.isEmpty
let createIntermediateGroups = targetSource.createIntermediateGroups ?? project.options.createIntermediateGroups

View File

@ -1,7 +1,7 @@
import Foundation
extension String {
func printHelloWorld() {
print("Hello World!")
}
func printHelloWorld() {
print("Hello World!")
}
}

View File

@ -22,33 +22,33 @@ extension DictionaryExtensionTests {
"inner1": "value1",
"inner2": Optional("value2"),
"inner3": nil,
"inner4": Optional([1, 2, 3])
"inner4": Optional([1, 2, 3]),
]
let inner2: [String: Any?] = [
"inner1": "value1",
"inner2": Optional("value2"),
"inner3": inner1,
"inner4": [1, 2, 3]
"inner4": [1, 2, 3],
]
let inner3: [String: Any?] = [
"inner1": "value1",
"inner2": Optional("value2"),
"inner3": Optional(inner1),
"inner4": [1, 2, 3],
"inner5": inner2
"inner5": inner2,
]
let inner4: [String: Any?] = [
"inner1": inner1,
"inner2": inner2,
"inner3": inner3,
"inner4": Optional("value4"),
"inner5": nil
"inner5": nil,
]
let inner6: [String: Any?] = [
"inner1": "value1",
"inner2": "value2",
"inner3": [inner1, inner1, inner1]
"inner3": [inner1, inner1, inner1],
]
let input: [String: Any?] = [
@ -58,7 +58,7 @@ extension DictionaryExtensionTests {
"inner4": inner4,
"inner5": [],
"inner6": inner6,
"inner7": [:]
"inner7": [:],
]
return input
@ -72,7 +72,7 @@ extension DictionaryExtensionTests {
"inner1": [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3]
"inner4": [1, 2, 3],
],
"inner2": [
"inner1": "value1",
@ -80,9 +80,9 @@ extension DictionaryExtensionTests {
"inner3": [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3]
"inner4": [1, 2, 3],
],
"inner4": [1, 2, 3]
"inner4": [1, 2, 3],
],
"inner3": [
"inner1": "value1",
@ -90,7 +90,7 @@ extension DictionaryExtensionTests {
"inner3": [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3]
"inner4": [1, 2, 3],
],
"inner4": [1, 2, 3],
"inner5": [
@ -99,12 +99,12 @@ extension DictionaryExtensionTests {
"inner3": [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3]
"inner4": [1, 2, 3],
],
"inner4": [1, 2, 3]
]
"inner4": [1, 2, 3],
],
],
"inner4": "value4"
"inner4": "value4",
],
"inner6": [
"inner1": "value1",
@ -112,17 +112,17 @@ extension DictionaryExtensionTests {
"inner3": [[
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3]
], [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3]
], [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3]
]]
]
"inner4": [1, 2, 3],
], [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3],
], [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3],
]],
],
]
return expected

View File

@ -126,7 +126,7 @@ class ProjectSpecTests: XCTestCase {
project.settings = invalidSettings
project.configFiles = ["invalidConfig": "invalidConfigFile"]
project.fileGroups = ["invalidFileGroup"]
project.packages = ["invalidLocalPackage" : .local(path: "invalidLocalPackage")]
project.packages = ["invalidLocalPackage": .local(path: "invalidLocalPackage")]
project.settingGroups = ["settingGroup1": Settings(
configSettings: ["invalidSettingGroupConfig": [:]],
groups: ["invalidSettingGroupSettingGroup"]
@ -283,7 +283,7 @@ class ProjectSpecTests: XCTestCase {
var project = baseProject
let externalProjectPath = fixturePath + "TestProject/AnotherProject/AnotherProject.xcodeproj"
project.projectReferences = [
ProjectReference(name: "validProjectRef", path: externalProjectPath.string)
ProjectReference(name: "validProjectRef", path: externalProjectPath.string),
]
project.targets = [
Target(
@ -547,8 +547,8 @@ class ProjectSpecTests: XCTestCase {
settingsTarget: "foo")]))],
packages: [
"Yams": .remote(
url: "https://github.com/jpsim/Yams",
versionRequirement: .upToNextMajorVersion("2.0.0")
url: "https://github.com/jpsim/Yams",
versionRequirement: .upToNextMajorVersion("2.0.0")
),
],
options: SpecOptions(minimumXcodeGenVersion: Version(major: 3, minor: 4, patch: 5),

View File

@ -845,7 +845,7 @@ class SpecLoadingTests: XCTestCase {
["variable": "ENVIRONMENT", "value": "VARIABLE"],
["variable": "OTHER_ENV_VAR", "value": "VAL", "isEnabled": false],
],
"launchAutomaticallySubstyle": "2"
"launchAutomaticallySubstyle": "2",
],
"test": [
"environmentVariables": [
@ -1134,7 +1134,7 @@ class SpecLoadingTests: XCTestCase {
"package7": .remote(url: "package.git", versionRequirement: .exact("1.2.2")),
"package8": .remote(url: "package.git", versionRequirement: .upToNextMajorVersion("4.0.0-beta.5")),
"package9": .local(path: "package/package"),
"XcodeGen": .local(path: "../XcodeGen")
"XcodeGen": .local(path: "../XcodeGen"),
], options: .init(localPackagesGroup: "MyPackages"))
let dictionary: [String: Any] = [
@ -1151,18 +1151,18 @@ class SpecLoadingTests: XCTestCase {
"package6": ["url": "package.git", "minVersion": "1.2.0", "maxVersion": "1.2.5"],
"package7": ["url": "package.git", "version": "1.2.2"],
"package8": ["url": "package.git", "majorVersion": "4.0.0-beta.5"],
"package9": ["path": "package/package"]
"package9": ["path": "package/package"],
],
"localPackages": ["../XcodeGen"]
"localPackages": ["../XcodeGen"],
]
let parsedSpec = try getProjectSpec(dictionary)
try expect(parsedSpec) == project
}
$0.it("parses old local package format") {
let project = Project(name: "spm", packages: [
"XcodeGen": .local(path: "../XcodeGen"),
"Yams": .local(path: "Yams")
"Yams": .local(path: "Yams"),
], options: .init(localPackagesGroup: "MyPackages"))
let dictionary: [String: Any] = [
@ -1170,7 +1170,7 @@ class SpecLoadingTests: XCTestCase {
"options": [
"localPackagesGroup": "MyPackages",
],
"localPackages": ["../XcodeGen", "Yams"]
"localPackages": ["../XcodeGen", "Yams"],
]
let parsedSpec = try getProjectSpec(dictionary)
try expect(parsedSpec) == project
@ -1181,14 +1181,14 @@ class SpecLoadingTests: XCTestCase {
func testPackagesVersion() {
describe {
let invalidPackages = [
[ "url": "package.git", "majorVersion": "master" ],
[ "url": "package.git", "from": "develop" ],
[ "url": "package.git", "minVersion": "feature/swift5.2", "maxVersion": "9.1.0" ],
[ "url": "package.git", "minorVersion": "x.1.2" ],
[ "url": "package.git", "exactVersion": "1.2.3.1" ],
[ "url": "package.git", "version": "foo-bar" ]
["url": "package.git", "majorVersion": "master"],
["url": "package.git", "from": "develop"],
["url": "package.git", "minVersion": "feature/swift5.2", "maxVersion": "9.1.0"],
["url": "package.git", "minorVersion": "x.1.2"],
["url": "package.git", "exactVersion": "1.2.3.1"],
["url": "package.git", "version": "foo-bar"],
]
$0.it("is an invalid package version") {
for dictionary in invalidPackages {
try expect { _ = try SwiftPackage(jsonDictionary: dictionary) }.toThrow()

View File

@ -14,8 +14,8 @@ private let app = Target(
Dependency(type: .carthage(findFrameworks: true, linkType: .static), reference: "MyStaticFramework"),
Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: "MyDynamicFramework"),
Dependency(type: .framework, reference: "MyExternalFramework"),
Dependency(type: .package(product: "MyPackage"), reference:"MyPackage"),
Dependency(type: .sdk(root: "MySDK"), reference: "MySDK")
Dependency(type: .package(product: "MyPackage"), reference: "MyPackage"),
Dependency(type: .sdk(root: "MySDK"), reference: "MySDK"),
]
)
@ -34,7 +34,6 @@ private let uiTest = Target(
dependencies: [Dependency(type: .target, reference: "MyApp")]
)
private let targets = [app, framework, uiTest]
class GraphVizGeneratorTests: XCTestCase {
@ -46,28 +45,28 @@ class GraphVizGeneratorTests: XCTestCase {
try expect(graph.nodes.count) == 16
}
$0.it("generates box nodes") {
try expect(graph.nodes.filter({ $0.shape == .box }).count) == 16
try expect(graph.nodes.filter { $0.shape == .box }.count) == 16
}
$0.it("generates the expected carthage nodes") {
try expect(graph.nodes.filter({ $0.label?.contains("[carthage]") ?? false }).count) == 2
try expect(graph.nodes.filter { $0.label?.contains("[carthage]") ?? false }.count) == 2
}
$0.it("generates the expected sdk nodes") {
try expect(graph.nodes.filter({ $0.label?.contains("[sdk]") ?? false }).count) == 1
try expect(graph.nodes.filter { $0.label?.contains("[sdk]") ?? false }.count) == 1
}
$0.it("generates the expected Framework nodes") {
try expect(graph.nodes.filter({ $0.label?.contains("[framework]") ?? false }).count) == 1
try expect(graph.nodes.filter { $0.label?.contains("[framework]") ?? false }.count) == 1
}
$0.it("generates the expected package nodes") {
try expect(graph.nodes.filter({ $0.label?.contains("[package]") ?? false }).count) == 1
try expect(graph.nodes.filter { $0.label?.contains("[package]") ?? false }.count) == 1
}
$0.it("generates the expected bundle nodes") {
try expect(graph.nodes.filter({ $0.label?.contains("[bundle]") ?? false }).count) == 1
try expect(graph.nodes.filter { $0.label?.contains("[bundle]") ?? false }.count) == 1
}
$0.it("generates the expected edges") {
try expect(graph.edges.count) == 8
}
$0.it("generates dashed edges") {
try expect(graph.edges.filter({ $0.style == .dashed }).count) == 8
try expect(graph.edges.filter { $0.style == .dashed }.count) == 8
}
$0.it("generates the expected output") {
let output = GraphVizGenerator().generateModuleGraphViz(targets: targets)
@ -103,4 +102,3 @@ class GraphVizGeneratorTests: XCTestCase {
}
}
}

View File

@ -28,7 +28,7 @@ extension Project {
return xcodeProject
}
}
}
extension PBXProj {
@ -54,7 +54,7 @@ extension PBXProj {
}
try validateGroup(mainGroup)
}
func getMainGroup(function: String = #function, file: String = #file, line: Int = #line) throws -> PBXGroup {
guard let mainGroup = projects.first?.mainGroup else {
throw failure("Couldn't find main group", file: file, line: line)
@ -107,7 +107,7 @@ class PBXProjGeneratorTests: XCTestCase {
$0.after {
removeDirectories()
}
$0.it("setups group ordering with groupSortPosition = .top") {
var options = SpecOptions()
options.groupSortPosition = .top
@ -118,7 +118,7 @@ class PBXProjGeneratorTests: XCTestCase {
"Resources",
"Tests",
"Support files",
"Configurations"
"Configurations",
]
),
GroupOrdering(
@ -128,11 +128,11 @@ class PBXProjGeneratorTests: XCTestCase {
"Presenter",
"Interactor",
"Entities",
"Assembly"
"Assembly",
]
)
),
]
let directories = """
Configurations:
- file.swift
@ -160,19 +160,19 @@ class PBXProjGeneratorTests: XCTestCase {
- file.swift
"""
try createDirectories(directories)
let target = Target(name: "Test", type: .application, platform: .iOS, sources: ["Configurations", "Resources", "Sources", "Support files", "Tests", "UITests"])
let project = Project(basePath: directoryPath, name: "Test", targets: [target], options: options)
let projGenerator = PBXProjGenerator(project: project)
let pbxProj = try project.generatePbxProj()
let group = try pbxProj.getMainGroup()
projGenerator.setupGroupOrdering(group: group)
let mainGroups = group.children.map { $0.nameOrPath }
try expect(mainGroups) == ["Sources", "Resources", "Tests", "Support files", "Configurations", "UITests", "Products"]
let screenGroups = group.children
.first { $0.nameOrPath == "Sources" }
.flatMap { $0 as? PBXGroup }?
@ -183,7 +183,7 @@ class PBXProjGeneratorTests: XCTestCase {
.map { $0.nameOrPath }
try expect(screenGroups) == ["View", "Presenter", "Interactor", "Entities", "Assembly", "mainScreen1.swift", "mainScreen2.swift"]
}
$0.it("setups group ordering with groupSortPosition = .bottom") {
var options = SpecOptions()
options.groupSortPosition = .bottom
@ -194,7 +194,7 @@ class PBXProjGeneratorTests: XCTestCase {
"Resources",
"Tests",
"Support files",
"Configurations"
"Configurations",
]
),
GroupOrdering(
@ -204,11 +204,11 @@ class PBXProjGeneratorTests: XCTestCase {
"Presenter",
"Interactor",
"Entities",
"Assembly"
"Assembly",
]
)
),
]
let directories = """
Configurations:
- file.swift
@ -236,19 +236,19 @@ class PBXProjGeneratorTests: XCTestCase {
- file.swift
"""
try createDirectories(directories)
let target = Target(name: "Test", type: .application, platform: .iOS, sources: ["Configurations", "Resources", "Sources", "Support files", "Tests", "UITests"])
let project = Project(basePath: directoryPath, name: "Test", targets: [target], options: options)
let projGenerator = PBXProjGenerator(project: project)
let pbxProj = try project.generatePbxProj()
let group = try pbxProj.getMainGroup()
projGenerator.setupGroupOrdering(group: group)
let mainGroups = group.children.map { $0.nameOrPath }
try expect(mainGroups) == ["Sources", "Resources", "Tests", "Support files", "Configurations", "UITests", "Products"]
let screenGroups = group.children
.first { $0.nameOrPath == "Sources" }
.flatMap { $0 as? PBXGroup }?
@ -261,5 +261,5 @@ class PBXProjGeneratorTests: XCTestCase {
}
}
}
}

View File

@ -48,7 +48,7 @@ class ProjectGeneratorTests: XCTestCase {
let options = SpecOptions(bundleIdPrefix: "com.test")
let project = Project(name: "test", targets: [framework], options: options)
let pbxProj = try project.generatePbxProj()
guard let target = pbxProj.nativeTargets.first,
let buildConfigList = target.buildConfigurationList,
let buildConfig = buildConfigList.buildConfigurations.first else {
@ -111,11 +111,11 @@ class ProjectGeneratorTests: XCTestCase {
name: "test",
configs: [
Config(name: "Aconfig"),
Config(name: "Bconfig")
Config(name: "Bconfig"),
],
targets: [
Target(name: "1", type: .framework, platform: .iOS),
Target(name: "2", type: .framework, platform: .iOS)
Target(name: "2", type: .framework, platform: .iOS),
],
options: options
)
@ -126,7 +126,7 @@ class ProjectGeneratorTests: XCTestCase {
guard
let buildConfigurationList = target.buildConfigurationList,
let defaultConfigurationName = buildConfigurationList.defaultConfigurationName else {
throw failure("Default configuration name not found")
throw failure("Default configuration name not found")
}
try expect(defaultConfigurationName) == "Bconfig"
@ -364,7 +364,7 @@ class ProjectGeneratorTests: XCTestCase {
let projectReference = ProjectReference(name: "AnotherProject", path: externalProjectPath.string)
var target = app
target.dependencies = [
Dependency(type: .target, reference: "AnotherProject/ExternalTarget")
Dependency(type: .target, reference: "AnotherProject/ExternalTarget"),
]
let project = Project(
name: "test",
@ -568,7 +568,7 @@ class ProjectGeneratorTests: XCTestCase {
)
expectedResourceFiles[iosFrameworkA.name] = Set()
expectedBundlesFiles[iosFrameworkA.name] = Set([
"BundleA.bundle"
"BundleA.bundle",
])
expectedLinkedFiles[iosFrameworkA.name] = Set([
"FrameworkC.framework",
@ -1048,7 +1048,7 @@ class ProjectGeneratorTests: XCTestCase {
let project = Project(name: "test", targets: [app], packages: [
"XcodeGen": .remote(url: "http://github.com/yonaskolb/XcodeGen", versionRequirement: .branch("master")),
"Codability": .remote(url: "http://github.com/yonaskolb/Codability", versionRequirement: .exact("1.0.0")),
"Yams": .local(path: "../Yams")
"Yams": .local(path: "../Yams"),
], options: .init(localPackagesGroup: "MyPackages"))
let pbxProject = try project.generatePbxProj(specValidate: false)
@ -1064,14 +1064,13 @@ class ProjectGeneratorTests: XCTestCase {
try expect(codabilityDependency.package?.name) == "Codability"
try expect(codabilityDependency.package?.versionRequirement) == .exact("1.0.0")
let localPackagesGroup = try unwrap(try pbxProject.getMainGroup().children.first(where: { $0.name == "MyPackages" }) as? PBXGroup)
let yamsLocalPackageFile = try unwrap(pbxProject.fileReferences.first(where: { $0.path == "../Yams" }))
try expect(localPackagesGroup.children.contains(yamsLocalPackageFile)) == true
try expect(yamsLocalPackageFile.lastKnownFileType) == "folder"
}
$0.it("generates local swift packages") {
let app = Target(
name: "MyApp",
@ -1082,19 +1081,19 @@ class ProjectGeneratorTests: XCTestCase {
]
)
let project = Project(name: "test", targets: [app], packages: ["XcodeGen" : .local(path: "../XcodeGen")])
let project = Project(name: "test", targets: [app], packages: ["XcodeGen": .local(path: "../XcodeGen")])
let pbxProject = try project.generatePbxProj(specValidate: false)
let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))
let localPackageFile = try unwrap(pbxProject.fileReferences.first(where: { $0.path == "../XcodeGen" }))
try expect(localPackageFile.lastKnownFileType) == "folder"
let frameworkPhases = nativeTarget.buildPhases.compactMap { $0 as? PBXFrameworksBuildPhase }
guard let frameworkPhase = frameworkPhases.first else {
return XCTFail("frameworkPhases should have more than one")
}
guard let file = frameworkPhase.files?.first else {
return XCTFail("frameworkPhase should have file")
}

View File

@ -93,7 +93,7 @@ class SchemeGeneratorTests: XCTestCase {
try expect(xcscheme.launchAction?.selectedDebuggerIdentifier) == XCScheme.defaultDebugger
try expect(xcscheme.testAction?.selectedDebuggerIdentifier) == XCScheme.defaultDebugger
try expect(xcscheme.launchAction?.askForAppToLaunch) == true
try expect(xcscheme.launchAction?.launchAutomaticallySubstyle) == "2"
try expect(xcscheme.launchAction?.allowLocationSimulation) == true

View File

@ -737,11 +737,11 @@ class SourceGeneratorTests: XCTestCase {
try createDirectories(directories)
let target = Target(name: "Test", type: .application, platform: .iOS, sources: [
"Sources",
TargetSource(path: "Source", name: "S"),
"A",
TargetSource(path: "Z/A", name: "B"),
"B",
"Sources",
TargetSource(path: "Source", name: "S"),
"A",
TargetSource(path: "Z/A", name: "B"),
"B",
], dependencies: [Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: "Alamofire")])
let project = Project(basePath: directoryPath, name: "Test", targets: [target])
@ -1008,7 +1008,7 @@ class SourceGeneratorTests: XCTestCase {
try expect(resourcesBuildPhase.files?.compactMap { $0.file?.nameOrPath }) == ["Intents.intentdefinition"]
}
}
$0.it("generates resource tags") {
let directories = """
A:
@ -1017,7 +1017,7 @@ class SourceGeneratorTests: XCTestCase {
- sourceFile.swift
"""
try createDirectories(directories)
let target = Target(
name: "Test",
type: .application,
@ -1028,53 +1028,53 @@ class SourceGeneratorTests: XCTestCase {
TargetSource(path: "A/sourceFile.swift", buildPhase: .sources, resourceTags: ["tag1", "tag2"]),
]
)
let project = Project(basePath: directoryPath,
name: "Test",
targets: [target])
let pbxProj = try project.generatePbxProj()
let resourceFileReference = try unwrap(pbxProj.getFileReference(
paths: ["A", "resourceFile.mp4"],
names: ["A", "resourceFile.mp4"]
))
let resourceFileReference2 = try unwrap(pbxProj.getFileReference(
paths: ["A", "resourceFile2.mp4"],
names: ["A", "resourceFile2.mp4"]
))
let sourceFileReference = try unwrap(pbxProj.getFileReference(
paths: ["A", "sourceFile.swift"],
names: ["A", "sourceFile.swift"]
))
try pbxProj.expectFile(paths: ["A", "resourceFile.mp4"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["A", "resourceFile.mp4"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["A", "resourceFile2.mp4"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["A", "sourceFile.swift"], buildPhase: .sources)
let resourceBuildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file == resourceFileReference }))
let resourceBuildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file == resourceFileReference }))
let resourceBuildFile2 = try unwrap(pbxProj.buildFiles.first(where: { $0.file == resourceFileReference2 }))
let sourceBuildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file == sourceFileReference }))
if (resourceBuildFile.settings! as NSDictionary) != (["ASSET_TAGS": ["tag1", "tag2"]] as NSDictionary) {
throw failure("File does not contain tag1 and tag2 ASSET_TAGS")
}
if (resourceBuildFile2.settings! as NSDictionary) != (["ASSET_TAGS": ["tag2", "tag3"]] as NSDictionary) {
throw failure("File does not contain tag2 and tag3 ASSET_TAGS")
}
if sourceBuildFile.settings != nil {
throw failure("File that buildPhase is source contain settings")
}
if !pbxProj.rootObject!.attributes.keys.contains("knownAssetTags") {
throw failure("PBXProject does not contain knownAssetTags")
}
try expect((pbxProj.rootObject!.attributes["knownAssetTags"] as! [String])) == ["tag1", "tag2", "tag3"]
try expect(pbxProj.rootObject!.attributes["knownAssetTags"] as? [String]) == ["tag1", "tag2", "tag3"]
}
}
}