From c6884bd625c6a86ac658181f61547418f22c595f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Pi=C3=B1era?= Date: Tue, 13 Jan 2026 08:36:39 +0100 Subject: [PATCH 1/2] fix: allow static frameworks to support resources --- Sources/XcodeGraph/Models/Target.swift | 2 +- Tests/XcodeGraphTests/Models/TargetTests.swift | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Sources/XcodeGraph/Models/Target.swift b/Sources/XcodeGraph/Models/Target.swift index 72d3944c..0a15d120 100644 --- a/Sources/XcodeGraph/Models/Target.swift +++ b/Sources/XcodeGraph/Models/Target.swift @@ -241,6 +241,7 @@ public struct Target: Equatable, Hashable, Comparable, Codable, Sendable { switch product { case .app, .framework, + .staticFramework, .unitTests, .uiTests, .bundle, @@ -259,7 +260,6 @@ public struct Target: Equatable, Hashable, Comparable, Codable, Sendable { .macro, .dynamicLibrary, .staticLibrary, - .staticFramework, .xpc: return false } diff --git a/Tests/XcodeGraphTests/Models/TargetTests.swift b/Tests/XcodeGraphTests/Models/TargetTests.swift index 84ae0f67..e1ea8f49 100644 --- a/Tests/XcodeGraphTests/Models/TargetTests.swift +++ b/Tests/XcodeGraphTests/Models/TargetTests.swift @@ -101,4 +101,15 @@ final class TargetTests: XCTestCase { // Then XCTAssertFalse(got) } + + func test_supportsResources_returns_true_for_static_frameworks() { + // Given + let target = Target.test(product: .staticFramework) + + // When + let got = target.supportsResources + + // Then + XCTAssertTrue(got) + } } From e7f372b5e16eab5f9c6dceb57825a3ce1d802c2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Pi=C3=B1era?= Date: Tue, 13 Jan 2026 08:42:17 +0100 Subject: [PATCH 2/2] chore: apply lint fixes --- Sources/XcodeGraph/Models/Target.swift | 2 +- Sources/XcodeGraph/Models/Workspace.swift | 4 ++-- .../Graph/XcodeGraphMapperTests.swift | 14 ++++++------ .../Package/PackageMapperTests.swift | 2 +- .../Package/XCPackageMapperTests.swift | 20 ++++++++--------- .../PBXCopyFilesBuildPhaseMapperTests.swift | 4 ++-- ...XCoreDataModelsBuildPhaseMapperTests.swift | 2 +- .../PBXFrameworksBuildPhaseMapperTests.swift | 4 ++-- .../PBXHeadersBuildPhaseMapperTests.swift | 2 +- .../PBXResourcesBuildPhaseMapperTests.swift | 6 ++--- .../PBXScriptsBuildPhaseMapperTests.swift | 4 ++-- .../PBXSourcesBuildPhaseMapperTests.swift | 8 +++---- .../Project/PBXProjectMapperTests.swift | 16 +++++++------- .../Schemes/XCSchemeMapperTests.swift | 22 +++++++++---------- .../Settings/ConfigurationMatcherTests.swift | 6 ++--- .../Settings/XCConfigurationMapperTests.swift | 10 ++++----- .../Target/PBXBuildRuleMapperTests.swift | 8 +++---- .../Target/PBXTargetDependencyMapper.swift | 20 ++++++++--------- .../Target/PBXTargetMapperTests.swift | 16 +++++++------- .../TargetDependencyExtensionsTests.swift | 16 +++++++------- .../Workspace/XCWorkspaceMapperTests.swift | 22 +++++++++---------- .../Models/PackageInfoTests.swift | 2 +- .../Models/PlatformTests.swift | 2 +- 23 files changed, 106 insertions(+), 106 deletions(-) diff --git a/Sources/XcodeGraph/Models/Target.swift b/Sources/XcodeGraph/Models/Target.swift index 0a15d120..0d635e54 100644 --- a/Sources/XcodeGraph/Models/Target.swift +++ b/Sources/XcodeGraph/Models/Target.swift @@ -213,12 +213,12 @@ public struct Target: Equatable, Hashable, Comparable, Codable, Sendable { } } + /// Returns true if the target supports having sources. @available(*, deprecated, message: """ Whether a target supports sources or not is not as binary decision as we originally assumed and codified in this getter. Because it's something that depends on other variables, we decided to pull this logic out of tuist/XcodeGraph into tuist/tuist. If you are interested in having a similar logic in your XcodeGraph-dependent project, you might want to check out tuist/tuist. """) - /// Returns true if the target supports having sources. public var supportsSources: Bool { switch product { case .stickerPackExtension, .watch2App: diff --git a/Sources/XcodeGraph/Models/Workspace.swift b/Sources/XcodeGraph/Models/Workspace.swift index 4fc7f6fa..f3e8c80c 100644 --- a/Sources/XcodeGraph/Models/Workspace.swift +++ b/Sources/XcodeGraph/Models/Workspace.swift @@ -103,9 +103,9 @@ extension Workspace { let allSchemes = schemes + projects.flatMap(\.schemes) var resultTargets = Set() - allSchemes.forEach { scheme in + for scheme in allSchemes { // try to add code coverage targets only if code coverage is enabled - guard let testAction = scheme.testAction, testAction.coverage else { return } + guard let testAction = scheme.testAction, testAction.coverage else { continue } let schemeCoverageTargets = testAction.codeCoverageTargets diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Graph/XcodeGraphMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Graph/XcodeGraphMapperTests.swift index de3a56e4..52a8edc0 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Graph/XcodeGraphMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Graph/XcodeGraphMapperTests.swift @@ -12,7 +12,7 @@ struct XcodeGraphMapperTests { private let fileSystem = FileSystem() @Test("Maps a single project into a workspace graph") - func testSingleProjectGraph() async throws { + func singleProjectGraph() async throws { // Given let pbxProj = PBXProj() let debug: XCBuildConfiguration = .testDebug().add(to: pbxProj) @@ -63,7 +63,7 @@ struct XcodeGraphMapperTests { } @Test("Maps a project with sanitizable target names") - func testProjectWithSanitizableTargetNames() async throws { + func projectWithSanitizableTargetNames() async throws { // Given let pbxProj = PBXProj() @@ -113,7 +113,7 @@ struct XcodeGraphMapperTests { } @Test("Maps a project with custom target product names") - func testProjectWithCustomTargetProductNames() async throws { + func projectWithCustomTargetProductNames() async throws { // Given let pbxProj = PBXProj() @@ -164,7 +164,7 @@ struct XcodeGraphMapperTests { } @Test("Maps a workspace with multiple projects into a single graph") - func testWorkspaceGraphMultipleProjects() async throws { + func workspaceGraphMultipleProjects() async throws { // Given let pbxProjA = PBXProj() let pbxProjB = PBXProj() @@ -254,7 +254,7 @@ struct XcodeGraphMapperTests { } @Test("Maps a workspace with multiple projects in different directories into a single graph") - func testWorkspaceGraphMultipleProjectsInDifferentDirectories() async throws { + func workspaceGraphMultipleProjectsInDifferentDirectories() async throws { // Given // // A project structure like this: @@ -329,7 +329,7 @@ struct XcodeGraphMapperTests { } @Test("Maps a project graph with dependencies between targets") - func testGraphWithDependencies() async throws { + func graphWithDependencies() async throws { // Given let pbxProj = PBXProj() let debug: XCBuildConfiguration = .testDebug().add(to: pbxProj) @@ -395,7 +395,7 @@ struct XcodeGraphMapperTests { } @Test("Maps a project graph with local packages") - func testGraphWithLocalPackages() async throws { + func graphWithLocalPackages() async throws { // Given let pbxProj = PBXProj() let debug: XCBuildConfiguration = .testDebug().add(to: pbxProj) diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Package/PackageMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Package/PackageMapperTests.swift index f1e21e7c..d67ec431 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Package/PackageMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Package/PackageMapperTests.swift @@ -9,7 +9,7 @@ struct PackageMapperTests: Sendable { private let fileSystem = FileSystem() @Test - func test_map_package() async throws { + func map_package() async throws { try await fileSystem.runInTemporaryDirectory(prefix: "PackageMapperTests") { path in // Given let subject = PackageMapper() diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Package/XCPackageMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Package/XCPackageMapperTests.swift index 2fbb5c6f..b5e5379e 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Package/XCPackageMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Package/XCPackageMapperTests.swift @@ -13,7 +13,7 @@ struct XCPackageMapperTests { } @Test("Maps a remote package with a valid URL and up-to-next-major requirement") - func testMapPackageWithValidURL() async throws { + func mapPackageWithValidURL() async throws { // Given let package = XCRemoteSwiftPackageReference( repositoryURL: "https://github.com/example/package.git", @@ -34,7 +34,7 @@ struct XCPackageMapperTests { } @Test("Maps an up-to-next-major version requirement correctly") - func testMapRequirementUpToNextMajor() async throws { + func mapRequirementUpToNextMajor() async throws { // Given let package = XCRemoteSwiftPackageReference( repositoryURL: "https://github.com/example/package.git", @@ -48,7 +48,7 @@ struct XCPackageMapperTests { } @Test("Maps an up-to-next-minor version requirement correctly") - func testMapRequirementUpToNextMinor() async throws { + func mapRequirementUpToNextMinor() async throws { // Given let package = XCRemoteSwiftPackageReference( repositoryURL: "https://github.com/example/package.git", @@ -63,7 +63,7 @@ struct XCPackageMapperTests { } @Test("Maps an exact version requirement correctly") - func testMapRequirementExact() async throws { + func mapRequirementExact() async throws { // Given let package = XCRemoteSwiftPackageReference( repositoryURL: "https://github.com/example/package.git", @@ -78,7 +78,7 @@ struct XCPackageMapperTests { } @Test("Maps a range version requirement correctly") - func testMapRequirementRange() async throws { + func mapRequirementRange() async throws { // Given let package = XCRemoteSwiftPackageReference( repositoryURL: "https://github.com/example/package.git", @@ -93,7 +93,7 @@ struct XCPackageMapperTests { } @Test("Maps a branch-based version requirement correctly") - func testMapRequirementBranch() async throws { + func mapRequirementBranch() async throws { // Given let package = XCRemoteSwiftPackageReference( repositoryURL: "https://github.com/example/package.git", @@ -108,7 +108,7 @@ struct XCPackageMapperTests { } @Test("Maps a revision-based version requirement correctly") - func testMapRequirementRevision() async throws { + func mapRequirementRevision() async throws { // Given let package = XCRemoteSwiftPackageReference( repositoryURL: "https://github.com/example/package.git", @@ -123,7 +123,7 @@ struct XCPackageMapperTests { } @Test("Maps a missing version requirement to up-to-next-major(0.0.0)") - func testMapRequirementNoVersionRequirement() async throws { + func mapRequirementNoVersionRequirement() async throws { // Given let package = XCRemoteSwiftPackageReference( repositoryURL: "https://github.com/example/package.git", @@ -138,7 +138,7 @@ struct XCPackageMapperTests { } @Test("Maps a local package reference correctly") - func testMapLocalPackage() async throws { + func mapLocalPackage() async throws { // Given let xcodeProj = try await XcodeProj.test() let localPackage = XCLocalSwiftPackageReference(relativePath: "Packages/Example") @@ -154,7 +154,7 @@ struct XCPackageMapperTests { } @Test("Throws an error if remote package has no repository URL") - func testMapPackageWithoutURL() async throws { + func mapPackageWithoutURL() async throws { // Given let package = XCRemoteSwiftPackageReference( repositoryURL: "", diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXCopyFilesBuildPhaseMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXCopyFilesBuildPhaseMapperTests.swift index 2a761848..44cb6a61 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXCopyFilesBuildPhaseMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXCopyFilesBuildPhaseMapperTests.swift @@ -6,7 +6,7 @@ import XcodeProj @Suite struct PBXCopyFilesBuildPhaseMapperTests { @Test("Maps copy files actions, verifying code-sign-on-copy attributes") - func testMapCopyFiles() async throws { + func mapCopyFiles() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -64,7 +64,7 @@ struct PBXCopyFilesBuildPhaseMapperTests { } @Test("Maps copy files actions with a synchronized group") - func testMapCopyFilesWithSynchronizedGroup() async throws { + func mapCopyFilesWithSynchronizedGroup() async throws { // Given let xcodeProj = try await XcodeProj.test( path: "/tmp/TestProject/Project.xcodeproj" diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXCoreDataModelsBuildPhaseMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXCoreDataModelsBuildPhaseMapperTests.swift index ee0f2b06..aece6755 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXCoreDataModelsBuildPhaseMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXCoreDataModelsBuildPhaseMapperTests.swift @@ -6,7 +6,7 @@ import XcodeProj @Suite struct PBXCoreDataModelsBuildPhaseMapperTests { @Test("Maps CoreData models from version groups within resources phase") - func testMapCoreDataModels() async throws { + func mapCoreDataModels() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXFrameworksBuildPhaseMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXFrameworksBuildPhaseMapperTests.swift index 7046844d..ab158951 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXFrameworksBuildPhaseMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXFrameworksBuildPhaseMapperTests.swift @@ -8,7 +8,7 @@ import XcodeProj @Suite struct PBXFrameworksBuildPhaseMapperTests { @Test("Maps frameworks from frameworks phase") - func testMapFrameworks() async throws { + func mapFrameworks() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -139,7 +139,7 @@ struct PBXFrameworksBuildPhaseMapperTests { } @Test("Maps SDK frameworks") - func testMapSDKFrameworks() async throws { + func mapSDKFrameworks() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXHeadersBuildPhaseMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXHeadersBuildPhaseMapperTests.swift index 710ba70f..c3d1154f 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXHeadersBuildPhaseMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXHeadersBuildPhaseMapperTests.swift @@ -6,7 +6,7 @@ import XcodeProj @Suite struct PBXHeadersBuildPhaseMapperTests { @Test("Maps public, private, and project headers from headers phase") - func testMapHeaders() async throws { + func mapHeaders() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXResourcesBuildPhaseMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXResourcesBuildPhaseMapperTests.swift index 16e2f49b..eadf6a4a 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXResourcesBuildPhaseMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXResourcesBuildPhaseMapperTests.swift @@ -6,7 +6,7 @@ import XcodeProj @Suite struct PBXResourcesBuildPhaseMapperTests { @Test("Maps resources (like xcassets) from resources phase") - func testMapResources() async throws { + func mapResources() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -48,7 +48,7 @@ struct PBXResourcesBuildPhaseMapperTests { } @Test("Maps resource bundle target dependencies from resources phase") - func testMapResourceBundleTargets() async throws { + func mapResourceBundleTargets() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -127,7 +127,7 @@ struct PBXResourcesBuildPhaseMapperTests { } @Test("Maps localized variant groups from resources") - func testMapVariantGroup() async throws { + func mapVariantGroup() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXScriptsBuildPhaseMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXScriptsBuildPhaseMapperTests.swift index 705fdd93..a23d7637 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXScriptsBuildPhaseMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXScriptsBuildPhaseMapperTests.swift @@ -6,7 +6,7 @@ import XcodeProj @Suite struct PBXScriptsBuildPhaseMapperTests { @Test("Maps embedded run scripts with specified input/output paths") - func testMapScripts() async throws { + func mapScripts() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -44,7 +44,7 @@ struct PBXScriptsBuildPhaseMapperTests { } @Test("Maps raw script build phases not covered by other categories") - func testMapRawScriptBuildPhases() async throws { + func mapRawScriptBuildPhases() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXSourcesBuildPhaseMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXSourcesBuildPhaseMapperTests.swift index b55f1101..382669e6 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXSourcesBuildPhaseMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Phases/PBXSourcesBuildPhaseMapperTests.swift @@ -6,7 +6,7 @@ import XcodeProj @Suite struct PBXSourcesBuildPhaseMapperTests { @Test("Maps Swift source files with compiler flags from sources phase") - func testMapSources() async throws { + func mapSources() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -53,7 +53,7 @@ struct PBXSourcesBuildPhaseMapperTests { } @Test("Handles source files without file references gracefully") - func testMapSourceFile_missingFileRef() async throws { + func mapSourceFile_missingFileRef() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -75,7 +75,7 @@ struct PBXSourcesBuildPhaseMapperTests { } @Test("Gracefully handles non-existent file paths for source files") - func testMapSourceFile_unresolvableFullPath() async throws { + func mapSourceFile_unresolvableFullPath() async throws { // Given // Use a provider with an invalid source directory to simulate missing files. let xcodeProj = try await XcodeProj.test( @@ -107,7 +107,7 @@ struct PBXSourcesBuildPhaseMapperTests { "Correctly identifies code generation attributes for source files", arguments: [FileCodeGen.public, .private, .project, .disabled] ) - func testCodeGenAttributes(_ fileCodeGen: FileCodeGen) async throws { + func codeGenAttributes(_ fileCodeGen: FileCodeGen) async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Project/PBXProjectMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Project/PBXProjectMapperTests.swift index 231e67c7..80e190ef 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Project/PBXProjectMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Project/PBXProjectMapperTests.swift @@ -11,7 +11,7 @@ struct PBXProjectMapperTests: Sendable { private let fileSystem = FileSystem() @Test("Maps a basic project with default attributes") - func testMapBasicProject() async throws { + func mapBasicProject() async throws { // Given let xcodeProj = try await XcodeProj.test() let mapper = PBXProjectMapper() @@ -28,7 +28,7 @@ struct PBXProjectMapperTests: Sendable { } @Test("Maps a project with custom attributes (org name, class prefix, upgrade check)") - func testMapProjectWithCustomAttributes() async throws { + func mapProjectWithCustomAttributes() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -52,7 +52,7 @@ struct PBXProjectMapperTests: Sendable { } @Test("Maps a project with local packages") - func testMapProjectWithLocalPackages() async throws { + func mapProjectWithLocalPackages() async throws { try await fileSystem.runInTemporaryDirectory(prefix: "PBXProjectMapperTests") { path in // Given let xcodeProj = try await XcodeProj.test( @@ -128,7 +128,7 @@ struct PBXProjectMapperTests: Sendable { } @Test("Maps a project with remote package dependencies") - func testMapProjectWithRemotePackages() async throws { + func mapProjectWithRemotePackages() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -155,7 +155,7 @@ struct PBXProjectMapperTests: Sendable { } @Test("Maps a project with known regions") - func testMapProjectWithKnownRegions() async throws { + func mapProjectWithKnownRegions() async throws { // Given let xcodeProj = try await XcodeProj.test() try xcodeProj.mainPBXProject().knownRegions = ["en", "es", "fr"] @@ -172,7 +172,7 @@ struct PBXProjectMapperTests: Sendable { } @Test("Maps a project with a custom development region") - func testMapProjectWithDevelopmentRegion() async throws { + func mapProjectWithDevelopmentRegion() async throws { // Given let xcodeProj = try await XcodeProj.test() try xcodeProj.mainPBXProject().developmentRegion = "fr" @@ -186,7 +186,7 @@ struct PBXProjectMapperTests: Sendable { } @Test("Maps a project with default resource synthesizers") - func testMapProjectWithResourceSynthesizers() async throws { + func mapProjectWithResourceSynthesizers() async throws { // Given let xcodeProj = try await XcodeProj.test() let mapper = PBXProjectMapper() @@ -217,7 +217,7 @@ struct PBXProjectMapperTests: Sendable { } @Test("Maps a project with associated schemes") - func testMapProjectWithSchemes() async throws { + func mapProjectWithSchemes() async throws { // Given let xcodeProj = try await XcodeProj.test() let scheme = XCScheme.test(name: "TestScheme") diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Schemes/XCSchemeMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Schemes/XCSchemeMapperTests.swift index f2197278..c2ff1308 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Schemes/XCSchemeMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Schemes/XCSchemeMapperTests.swift @@ -21,7 +21,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps shared project schemes correctly") - func testMapSharedProjectSchemes() async throws { + func mapSharedProjectSchemes() async throws { // Given let xcscheme = XCScheme.test(name: "SharedScheme") @@ -34,7 +34,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps user (non-shared) project schemes correctly") - func testMapUserSchemes() async throws { + func mapUserSchemes() async throws { // Given let xcscheme = XCScheme.test(name: "UserScheme") @@ -47,7 +47,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps a build action within a scheme") - func testMapBuildAction() async throws { + func mapBuildAction() async throws { // Given let targetRef = XCScheme.BuildableReference( referencedContainer: "container:App.xcodeproj", @@ -80,7 +80,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps a test action with testable references, coverage, and environment") - func testMapTestAction() async throws { + func mapTestAction() async throws { // Given let targetRef = XCScheme.BuildableReference( referencedContainer: "container:App.xcodeproj", @@ -130,7 +130,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps a test action with test plans") - func testMapTestActionWithTestPlans() async throws { + func mapTestActionWithTestPlans() async throws { try await fileSystem.runInTemporaryDirectory(prefix: "XCSchemeMapperTests") { temporaryPath in // Given let targetRef = XCScheme.BuildableReference( @@ -223,7 +223,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps a run action with environment variables and launch arguments") - func testMapRunAction() async throws { + func mapRunAction() async throws { // Given let targetRef = XCScheme.BuildableReference( referencedContainer: "container:App.xcodeproj", @@ -263,7 +263,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps an archive action with organizer reveal enabled") - func testMapArchiveAction() async throws { + func mapArchiveAction() async throws { // Given let archiveAction = XCScheme.ArchiveAction( buildConfiguration: "Release", @@ -283,7 +283,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps a profile action to a runnable and configuration") - func testMapProfileAction() async throws { + func mapProfileAction() async throws { // Given let targetRef = XCScheme.BuildableReference( referencedContainer: "container:App.xcodeproj", @@ -310,7 +310,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps an analyze action to the appropriate configuration") - func testMapAnalyzeAction() async throws { + func mapAnalyzeAction() async throws { // Given let analyzeAction = XCScheme.AnalyzeAction(buildConfiguration: "Debug") @@ -326,7 +326,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Maps target references in a scheme's build action") - func testMapTargetReference() async throws { + func mapTargetReference() async throws { // Given let targetRef = XCScheme.BuildableReference( referencedContainer: "container:App.xcodeproj", @@ -356,7 +356,7 @@ struct XCSchemeMapperTests: Sendable { } @Test("Handles schemes without any actions gracefully") - func testNilActions() async throws { + func nilActions() async throws { // Given let scheme = XCScheme.test( buildAction: nil, diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Settings/ConfigurationMatcherTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Settings/ConfigurationMatcherTests.swift index eca98ae9..d1c39fdc 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Settings/ConfigurationMatcherTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Settings/ConfigurationMatcherTests.swift @@ -11,7 +11,7 @@ struct ConfigurationMatcherTests { } @Test("Detects 'Debug' variants from configuration names") - func testVariantDetectionForDebug() async throws { + func variantDetectionForDebug() async throws { // Given // The configurationMatcher is already set up by the initializer. @@ -27,7 +27,7 @@ struct ConfigurationMatcherTests { } @Test("Detects 'Release' variants from configuration names") - func testVariantDetectionForRelease() async throws { + func variantDetectionForRelease() async throws { // Given // The configurationMatcher is already set up by the initializer. @@ -43,7 +43,7 @@ struct ConfigurationMatcherTests { } @Test("Falls back to 'Debug' variant for unrecognized configuration names") - func testVariantFallbackToDebug() async throws { + func variantFallbackToDebug() async throws { // Given // The configurationMatcher is already set up by the initializer. diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Settings/XCConfigurationMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Settings/XCConfigurationMapperTests.swift index e2627451..ee1d3cff 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Settings/XCConfigurationMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Settings/XCConfigurationMapperTests.swift @@ -9,7 +9,7 @@ struct XCConfigurationMapperTests { let mapper = XCConfigurationMapper() @Test("Returns default settings when configuration list is nil") - func testNilConfigurationListReturnsDefault() async throws { + func nilConfigurationListReturnsDefault() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -21,7 +21,7 @@ struct XCConfigurationMapperTests { } @Test("Maps a single build configuration correctly") - func testSingleConfigurationMapping() async throws { + func singleConfigurationMapping() async throws { // Given let pbxProj = PBXProj() let config: XCBuildConfiguration = .testDebug().add(to: pbxProj) @@ -47,7 +47,7 @@ struct XCConfigurationMapperTests { } @Test("Maps multiple build configurations correctly") - func testMultipleConfigurations() async throws { + func multipleConfigurations() async throws { // Given let pbxProj = PBXProj() let debugConfiguration: XCBuildConfiguration = .testDebug().add(to: pbxProj) @@ -76,7 +76,7 @@ struct XCConfigurationMapperTests { } @Test("Resolves XCConfig file paths correctly") - func testXCConfigPathResolution() async throws { + func xCConfigPathResolution() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -109,7 +109,7 @@ struct XCConfigurationMapperTests { } @Test("Maps array values correctly in build settings") - func testArrayValueMapping() async throws { + func arrayValueMapping() async throws { // Given let pbxProj = PBXProj() let config: XCBuildConfiguration = .testDebug( diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXBuildRuleMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXBuildRuleMapperTests.swift index b93c8eb4..845abcad 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXBuildRuleMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXBuildRuleMapperTests.swift @@ -8,7 +8,7 @@ struct PBXBuildRuleMapperTests { let mapper = PBXBuildRuleMapper() @Test("Maps build rules with known compiler spec and file type successfully") - func testMapBuildRulesWithKnownCompilerSpecAndFileType() async throws { + func mapBuildRulesWithKnownCompilerSpecAndFileType() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -48,7 +48,7 @@ struct PBXBuildRuleMapperTests { } @Test("Skips build rules when compiler spec is unknown") - func testMapBuildRulesWithUnknownCompilerSpec() async throws { + func mapBuildRulesWithUnknownCompilerSpec() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -71,7 +71,7 @@ struct PBXBuildRuleMapperTests { } @Test("Skips build rules when file type is unknown") - func testMapBuildRulesWithUnknownFileType() async throws { + func mapBuildRulesWithUnknownFileType() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -94,7 +94,7 @@ struct PBXBuildRuleMapperTests { } @Test("Individually handles valid and invalid rules, returning nil for invalid ones") - func testMapIndividualValidAndInvalidRules() async throws { + func mapIndividualValidAndInvalidRules() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXTargetDependencyMapper.swift b/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXTargetDependencyMapper.swift index 0aba6df6..17463544 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXTargetDependencyMapper.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXTargetDependencyMapper.swift @@ -13,7 +13,7 @@ struct DependencyMapperTests { } @Test("Maps direct target dependencies correctly") - func testDirectTargetMapping() async throws { + func directTargetMapping() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -45,7 +45,7 @@ struct DependencyMapperTests { } @Test("Maps package product dependencies to runtime package targets") - func testPackageProductMapping() async throws { + func packageProductMapping() async throws { // Given let xcodeProj = try await XcodeProj.test() let pbxProj = xcodeProj.pbxproj @@ -68,7 +68,7 @@ struct DependencyMapperTests { } @Test("Maps native target proxies referencing targets in the same project") - func testProxyNativeTarget() async throws { + func proxyNativeTarget() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -100,7 +100,7 @@ struct DependencyMapperTests { } @Test("Maps proxy dependencies referencing other projects via file references") - func testProxyProjectReference() async throws { + func proxyProjectReference() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -136,7 +136,7 @@ struct DependencyMapperTests { } @Test("Maps reference proxies to libraries when file type is a dylib") - func testProxyReferenceProxyLibrary() async throws { + func proxyReferenceProxyLibrary() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -192,7 +192,7 @@ struct DependencyMapperTests { } @Test("Maps frameworks when encountered as proxy references") - func testProxyReferenceFileFramework() async throws { + func proxyReferenceFileFramework() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -236,7 +236,7 @@ struct DependencyMapperTests { } @Test("Maps dependencies with platform filters to conditions") - func testPlatformConditions() async throws { + func platformConditions() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -268,7 +268,7 @@ struct DependencyMapperTests { } @Test("Ignores dependencies that cannot be matched to targets, products, or proxies") - func testNoMatches() async throws { + func noMatches() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -291,7 +291,7 @@ struct DependencyMapperTests { } @Test("Maps single-platform filter dependencies correctly") - func testSinglePlatformFilter() async throws { + func singlePlatformFilter() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -322,7 +322,7 @@ struct DependencyMapperTests { } @Test("Ignores invalid platform filters, mapping dependency without conditions") - func testInvalidPlatformFilter() async throws { + func invalidPlatformFilter() async throws { // Given let xcodeProj = try await XcodeProj.test() diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXTargetMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXTargetMapperTests.swift index 8764dc4f..29bdec42 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXTargetMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Target/PBXTargetMapperTests.swift @@ -11,7 +11,7 @@ struct PBXTargetMapperTests: Sendable { private let fileSystem = FileSystem() @Test("Maps a basic target with a product bundle identifier") - func testMapBasicTarget() async throws { + func mapBasicTarget() async throws { // Given let xcodeProj = try await XcodeProj.test() let target = createTarget( @@ -43,7 +43,7 @@ struct PBXTargetMapperTests: Sendable { } @Test("Defaults to unknown if the target is missing a bundle identifier") - func testMapTargetWithMissingBundleId() async throws { + func mapTargetWithMissingBundleId() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -70,7 +70,7 @@ struct PBXTargetMapperTests: Sendable { } @Test("Maps a target with source files") - func testMapTargetWithSourceFiles() async throws { + func mapTargetWithSourceFiles() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -110,7 +110,7 @@ struct PBXTargetMapperTests: Sendable { } @Test("Maps a target with a buildable group") - func testMapTargetWithBuildableGroup() async throws { + func mapTargetWithBuildableGroup() async throws { try await fileSystem.runInTemporaryDirectory(prefix: "PBXTargetMapperTests") { appPath in // Given let xcodeProj = try await XcodeProj.test( @@ -256,7 +256,7 @@ struct PBXTargetMapperTests: Sendable { } @Test("Maps entitlements when CODE_SIGN_ENTITLEMENTS is set") - func testMapEntitlements() async throws { + func mapEntitlements() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -317,7 +317,7 @@ struct PBXTargetMapperTests: Sendable { } @Test("Throws noProjectsFound when pbxProj has no projects") - func testMapTarget_noProjectsFound() async throws { + func mapTarget_noProjectsFound() async throws { // Given let xcodeProj = try await XcodeProj.test() let target = PBXNativeTarget.test() @@ -344,7 +344,7 @@ struct PBXTargetMapperTests: Sendable { } @Test("Returns a plist path") - func testMapTarget_withPlist() async throws { + func mapTarget_withPlist() async throws { // Given let xcodeProj = try await XcodeProj.test() @@ -393,7 +393,7 @@ struct PBXTargetMapperTests: Sendable { } @Test - func testMapAggregateTarget() async throws { + func mapAggregateTarget() async throws { // Given let xcodeProj = try await XcodeProj.test() let target = PBXAggregateTarget( diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Target/TargetDependencyExtensionsTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Target/TargetDependencyExtensionsTests.swift index 9f1336bc..b0f57231 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Target/TargetDependencyExtensionsTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Target/TargetDependencyExtensionsTests.swift @@ -11,7 +11,7 @@ struct TargetDependencyExtensionsTests { let target = Target.test(platform: .iOS) @Test("Resolves a target dependency into a target graph dependency") - func testTargetGraphDependency_Target() async throws { + func targetGraphDependency_Target() async throws { // Given let dependency = TargetDependency.target(name: "App", status: .required, condition: nil) @@ -26,7 +26,7 @@ struct TargetDependencyExtensionsTests { } @Test("Resolves a project-based framework dependency") - func testTargetGraphDependencyFramework_Project() async throws { + func targetGraphDependencyFramework_Project() async throws { // Given let dependency = TargetDependency.project( target: "MyProjectTarget", @@ -53,7 +53,7 @@ struct TargetDependencyExtensionsTests { } @Test("Resolves a framework file dependency into a dynamic framework graph dependency") - func testTargetGraphDependency_Framework() async throws { + func targetGraphDependency_Framework() async throws { // Given let frameworkPath = sourceDirectory.appending(component: "xpm.framework") let dependency = TargetDependency.framework(path: frameworkPath, status: .required, condition: nil) @@ -80,7 +80,7 @@ struct TargetDependencyExtensionsTests { } @Test("Resolves an XCFramework dependency to the correct .xcframework graph dependency") - func testTargetGraphDependency_XCFramework() async throws { + func targetGraphDependency_XCFramework() async throws { // Given let xcframeworkPath = sourceDirectory.appending(component: "MyFramework.xcframework") let dependency = TargetDependency.xcframework( @@ -108,7 +108,7 @@ struct TargetDependencyExtensionsTests { } @Test("Resolves a static library dependency to a static library graph dependency") - func testTargetGraphDependency_Library() async throws { + func targetGraphDependency_Library() async throws { // Given let libPath = sourceDirectory.appending(component: "libStaticLibrary.a") let headersPath = sourceDirectory.parentDirectory @@ -132,7 +132,7 @@ struct TargetDependencyExtensionsTests { } @Test("Resolves a package product dependency to a package product graph dependency") - func testTargetGraphDependency_Package() async throws { + func targetGraphDependency_Package() async throws { // Given let dependency = TargetDependency.package(product: "MyPackageProduct", type: .runtime, condition: nil) @@ -146,7 +146,7 @@ struct TargetDependencyExtensionsTests { } @Test("Resolves an SDK dependency to the correct SDK graph dependency") - func testTargetGraphDependency_SDK() async throws { + func targetGraphDependency_SDK() async throws { // Given let dependency = TargetDependency.sdk(name: "MySDK", status: .optional, condition: nil) @@ -167,7 +167,7 @@ struct TargetDependencyExtensionsTests { } @Test("Resolves an XCTest dependency to an XCFramework graph dependency") - func testTargetGraphDependency_XCTest() async throws { + func targetGraphDependency_XCTest() async throws { // Given let dependency = TargetDependency.xctest let developerDirectory = try await DeveloperDirectoryProvider().developerDirectory() diff --git a/Tests/XcodeGraphMapperTests/MapperTests/Workspace/XCWorkspaceMapperTests.swift b/Tests/XcodeGraphMapperTests/MapperTests/Workspace/XCWorkspaceMapperTests.swift index 55cdfbe4..040caf40 100644 --- a/Tests/XcodeGraphMapperTests/MapperTests/Workspace/XCWorkspaceMapperTests.swift +++ b/Tests/XcodeGraphMapperTests/MapperTests/Workspace/XCWorkspaceMapperTests.swift @@ -9,7 +9,7 @@ import XcodeProj @Suite struct XCWorkspaceMapperTests { @Test("Maps workspace without any projects or schemes") - func testMap_NoProjectsOrSchemes() async throws { + func map_NoProjectsOrSchemes() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/MyWorkspace.xcworkspace") let xcworkspace: XCWorkspace = .test(files: ["ReadMe.md"], path: workspacePath.pathString) @@ -25,7 +25,7 @@ struct XCWorkspaceMapperTests { } @Test("Maps workspace with multiple projects") - func testMap_MultipleProjects() async throws { + func map_MultipleProjects() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/MyWorkspace.xcworkspace") let workspaceDir = workspacePath.parentDirectory @@ -56,7 +56,7 @@ struct XCWorkspaceMapperTests { } @Test("Maps workspace with shared schemes") - func testMap_WithSchemes() async throws { + func map_WithSchemes() async throws { // Given let tempDirectory = FileManager.default.temporaryDirectory let path = tempDirectory.appendingPathComponent("MyWorkspace.xcworkspace") @@ -79,7 +79,7 @@ struct XCWorkspaceMapperTests { } @Test("No schemes directory results in no schemes mapped") - func testMap_NoSchemesDirectory() async throws { + func map_NoSchemesDirectory() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/MyWorkspace.xcworkspace") let xcworkspace = XCWorkspace.test(withElements: [ @@ -95,7 +95,7 @@ struct XCWorkspaceMapperTests { } @Test("Workspace name is derived from the .xcworkspace file name") - func testMap_NameDerivation() async throws { + func map_NameDerivation() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/AnotherWorkspace.xcworkspace") let xcworkspace = XCWorkspace.test(withElements: [], path: workspacePath.pathString) @@ -109,7 +109,7 @@ struct XCWorkspaceMapperTests { } @Test("Resolves absolute path in XCWorkspaceDataFileRef") - func testMap_AbsolutePath() async throws { + func map_AbsolutePath() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/AbsWorkspace.xcworkspace") let elements: [XCWorkspaceDataElement] = [ @@ -126,7 +126,7 @@ struct XCWorkspaceMapperTests { } @Test("Resolves container path in XCWorkspaceDataFileRef") - func testMap_ContainerPath() async throws { + func map_ContainerPath() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/ContainerWorkspace.xcworkspace") let elements: [XCWorkspaceDataElement] = [ @@ -143,7 +143,7 @@ struct XCWorkspaceMapperTests { } @Test("Resolves developer path in XCWorkspaceDataFileRef") - func testMap_DeveloperPath() async throws { + func map_DeveloperPath() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/DevWorkspace.xcworkspace") let elements: [XCWorkspaceDataElement] = [ @@ -160,7 +160,7 @@ struct XCWorkspaceMapperTests { } @Test("Resolves group path in XCWorkspaceDataFileRef") - func testMap_GroupPath() async throws { + func map_GroupPath() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/GroupWorkspace.xcworkspace") let elements: [XCWorkspaceDataElement] = [ @@ -179,7 +179,7 @@ struct XCWorkspaceMapperTests { } @Test("Resolves current path in XCWorkspaceDataFileRef") - func testMap_CurrentPath() async throws { + func map_CurrentPath() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/CurrentWorkspace.xcworkspace") let elements: [XCWorkspaceDataElement] = [ @@ -196,7 +196,7 @@ struct XCWorkspaceMapperTests { } @Test("Resolves other path in XCWorkspaceDataFileRef") - func testMap_otherPath() async throws { + func map_otherPath() async throws { // Given let workspacePath = try AbsolutePath(validating: "/tmp/OtherWorkspace.xcworkspace") let elements: [XCWorkspaceDataElement] = [ diff --git a/Tests/XcodeGraphTests/Models/PackageInfoTests.swift b/Tests/XcodeGraphTests/Models/PackageInfoTests.swift index 9d713fac..feb412e1 100644 --- a/Tests/XcodeGraphTests/Models/PackageInfoTests.swift +++ b/Tests/XcodeGraphTests/Models/PackageInfoTests.swift @@ -6,7 +6,7 @@ import XcodeGraph struct PackageInfoTests { @Test - func test_packageInfo_codable() throws { + func packageInfo_codable() throws { // Given let encoder = JSONEncoder() let decoder = JSONDecoder() diff --git a/Tests/XcodeGraphTests/Models/PlatformTests.swift b/Tests/XcodeGraphTests/Models/PlatformTests.swift index c7a03f63..8b1ede48 100644 --- a/Tests/XcodeGraphTests/Models/PlatformTests.swift +++ b/Tests/XcodeGraphTests/Models/PlatformTests.swift @@ -36,7 +36,7 @@ final class PlatformTests: XCTestCase { func test_caseInvalidPlatform_throws() { do { - let _ = try Platform.from(commandLineValue: "not_a_platform") + _ = try Platform.from(commandLineValue: "not_a_platform") XCTFail("Expected erro to be thrown") } catch let error as UnsupportedPlatformError { XCTAssertEqual(error, UnsupportedPlatformError(input: "not_a_platform"))