diff --git a/Sources/XcodeGraph/Models/ProjectOptions.swift b/Sources/XcodeGraph/Models/ProjectOptions.swift index c91c386e..d1b5acdc 100644 --- a/Sources/XcodeGraph/Models/ProjectOptions.swift +++ b/Sources/XcodeGraph/Models/ProjectOptions.swift @@ -59,6 +59,8 @@ extension Project.Options { testLanguage: String? = nil, testRegion: String? = nil, testScreenCaptureFormat: ScreenCaptureFormat? = nil, + captureScreenshotsAutomatically: Bool, + deleteScreenshotsWhenEachTestSucceeds: Bool, runLanguage: String? = nil, runRegion: String? = nil ) @@ -100,7 +102,7 @@ extension Project.Options { extension Project.Options { public var targetSchemesGrouping: AutomaticSchemesOptions.TargetSchemesGrouping? { switch automaticSchemesOptions { - case let .enabled(targetSchemesGrouping, _, _, _, _, _, _, _): + case let .enabled(targetSchemesGrouping, _, _, _, _, _, _, _, _, _): return targetSchemesGrouping case .disabled: return nil @@ -109,7 +111,7 @@ extension Project.Options { public var codeCoverageEnabled: Bool { switch automaticSchemesOptions { - case let .enabled(_, codeCoverageEnabled, _, _, _, _, _, _): + case let .enabled(_, codeCoverageEnabled, _, _, _, _, _, _, _, _): return codeCoverageEnabled case .disabled: return false @@ -118,7 +120,7 @@ extension Project.Options { public var testingOptions: TestingOptions { switch automaticSchemesOptions { - case let .enabled(_, _, testingOptions, _, _, _, _, _): + case let .enabled(_, _, testingOptions, _, _, _, _, _, _, _): return testingOptions case .disabled: return [] @@ -127,7 +129,7 @@ extension Project.Options { public var testLanguage: String? { switch automaticSchemesOptions { - case let .enabled(_, _, _, language, _, _, _, _): + case let .enabled(_, _, _, language, _, _, _, _, _, _): return language case .disabled: return nil @@ -136,7 +138,7 @@ extension Project.Options { public var testRegion: String? { switch automaticSchemesOptions { - case let .enabled(_, _, _, _, region, _, _, _): + case let .enabled(_, _, _, _, region, _, _, _, _, _): return region case .disabled: return nil @@ -145,16 +147,34 @@ extension Project.Options { public var testScreenCaptureFormat: ScreenCaptureFormat? { switch automaticSchemesOptions { - case let .enabled(_, _, _, _, _, testScreenCaptureFormat, _, _): + case let .enabled(_, _, _, _, _, testScreenCaptureFormat, _, _, _, _): return testScreenCaptureFormat case .disabled: return nil } } + public var captureScreenshotsAutomatically: Bool { + switch automaticSchemesOptions { + case let .enabled(_, _, _, _, _, _, captureScreenshotsAutomatically, _, _, _): + return captureScreenshotsAutomatically + case .disabled: + return false + } + } + + public var deleteScreenshotsWhenEachTestSucceeds: Bool { + switch automaticSchemesOptions { + case let .enabled(_, _, _, _, _, _, _, deleteScreenshotsWhenEachTestSucceeds, _, _): + return deleteScreenshotsWhenEachTestSucceeds + case .disabled: + return false + } + } + public var runLanguage: String? { switch automaticSchemesOptions { - case let .enabled(_, _, _, _, _, _, language, _): + case let .enabled(_, _, _, _, _, _, _, _, language, _): return language case .disabled: return nil @@ -163,7 +183,7 @@ extension Project.Options { public var runRegion: String? { switch automaticSchemesOptions { - case let .enabled(_, _, _, _, _, _, _, region): + case let .enabled(_, _, _, _, _, _, _, _, _, region): return region case .disabled: return nil diff --git a/Sources/XcodeGraph/Models/TestAction.swift b/Sources/XcodeGraph/Models/TestAction.swift index 2d5e2878..2a8d9793 100644 --- a/Sources/XcodeGraph/Models/TestAction.swift +++ b/Sources/XcodeGraph/Models/TestAction.swift @@ -17,6 +17,8 @@ public struct TestAction: Equatable, Codable, Sendable { public var diagnosticsOptions: SchemeDiagnosticsOptions public var language: String? public var region: String? + public var captureScreenshotsAutomatically: Bool + public var deleteScreenshotsWhenEachTestSucceeds: Bool public var preferredScreenCaptureFormat: ScreenCaptureFormat? public var skippedTests: [String]? @@ -36,6 +38,8 @@ public struct TestAction: Equatable, Codable, Sendable { language: String? = nil, region: String? = nil, preferredScreenCaptureFormat: ScreenCaptureFormat? = nil, + captureScreenshotsAutomatically: Bool, + deleteScreenshotsWhenEachTestSucceeds: Bool, testPlans: [TestPlan]? = nil, skippedTests: [String]? = nil ) { @@ -53,6 +57,8 @@ public struct TestAction: Equatable, Codable, Sendable { self.language = language self.region = region self.preferredScreenCaptureFormat = preferredScreenCaptureFormat + self.captureScreenshotsAutomatically = captureScreenshotsAutomatically + self.deleteScreenshotsWhenEachTestSucceeds = deleteScreenshotsWhenEachTestSucceeds self.skippedTests = skippedTests } } @@ -77,6 +83,8 @@ public struct TestAction: Equatable, Codable, Sendable { language: String? = nil, region: String? = nil, preferredScreenCaptureFormat: ScreenCaptureFormat? = nil, + captureScreenshotsAutomatically: Bool = false, + deleteScreenshotsWhenEachTestSucceeds: Bool = false, testPlans: [TestPlan]? = nil, skippedTests: [String]? = nil ) -> TestAction { @@ -94,6 +102,8 @@ public struct TestAction: Equatable, Codable, Sendable { language: language, region: region, preferredScreenCaptureFormat: preferredScreenCaptureFormat, + captureScreenshotsAutomatically: captureScreenshotsAutomatically, + deleteScreenshotsWhenEachTestSucceeds: deleteScreenshotsWhenEachTestSucceeds, testPlans: testPlans, skippedTests: skippedTests ) diff --git a/Sources/XcodeGraph/Models/Workspace.swift b/Sources/XcodeGraph/Models/Workspace.swift index 4fc7f6fa..26bf21f5 100644 --- a/Sources/XcodeGraph/Models/Workspace.swift +++ b/Sources/XcodeGraph/Models/Workspace.swift @@ -30,7 +30,9 @@ public struct Workspace: Equatable, Codable { testingOptions: [], testLanguage: nil, testRegion: nil, - testScreenCaptureFormat: nil + testScreenCaptureFormat: nil, + captureScreenshotsAutomatically: true, + deleteScreenshotsWhenEachTestSucceeds: false ), lastXcodeUpgradeCheck: nil, renderMarkdownReadme: false @@ -131,7 +133,7 @@ extension Workspace { extension Workspace { public var codeCoverageMode: GenerationOptions.AutogeneratedWorkspaceSchemes.CodeCoverageMode { switch generationOptions.autogeneratedWorkspaceSchemes { - case let .enabled(codeCoverageMode, _, _, _, _): + case let .enabled(codeCoverageMode, _, _, _, _, _, _): return codeCoverageMode case .disabled: return .disabled @@ -140,7 +142,7 @@ extension Workspace { public var testingOptions: TestingOptions { switch generationOptions.autogeneratedWorkspaceSchemes { - case let .enabled(_, testingOptions, _, _, _): + case let .enabled(_, testingOptions, _, _, _, _, _): return testingOptions case .disabled: return [] diff --git a/Sources/XcodeGraph/Models/WorkspaceGenerationOptions.swift b/Sources/XcodeGraph/Models/WorkspaceGenerationOptions.swift index ef29d28e..40908e7c 100644 --- a/Sources/XcodeGraph/Models/WorkspaceGenerationOptions.swift +++ b/Sources/XcodeGraph/Models/WorkspaceGenerationOptions.swift @@ -25,12 +25,14 @@ extension Workspace { testingOptions: TestingOptions = [], testLanguage: String? = nil, testRegion: String? = nil, - testScreenCaptureFormat: ScreenCaptureFormat? = nil + testScreenCaptureFormat: ScreenCaptureFormat? = nil, + captureScreenshotsAutomatically: Bool = true, + deleteScreenshotsWhenEachTestSucceeds: Bool = false ) public var codeCoverageMode: CodeCoverageMode { switch self { - case let .enabled(codeCoverageMode, _, _, _, _): + case let .enabled(codeCoverageMode, _, _, _, _, _, _): return codeCoverageMode case .disabled: return .disabled @@ -39,7 +41,7 @@ extension Workspace { public var testingOptions: TestingOptions { switch self { - case let .enabled(_, testingOptions, _, _, _): + case let .enabled(_, testingOptions, _, _, _, _, _): return testingOptions case .disabled: return [] @@ -48,7 +50,7 @@ extension Workspace { public var testLanguage: String? { switch self { - case let .enabled(_, _, language, _, _): + case let .enabled(_, _, language, _, _, _, _): return language case .disabled: return nil @@ -57,7 +59,7 @@ extension Workspace { public var testRegion: String? { switch self { - case let .enabled(_, _, _, region, _): + case let .enabled(_, _, _, region, _, _, _): return region case .disabled: return nil @@ -66,12 +68,30 @@ extension Workspace { public var testScreenCaptureFormat: ScreenCaptureFormat? { switch self { - case let .enabled(_, _, _, _, testScreenCaptureFormat): + case let .enabled(_, _, _, _, testScreenCaptureFormat, _, _): return testScreenCaptureFormat case .disabled: return nil } } + + public var captureScreenshotsAutomatically: Bool { + switch self { + case let .enabled(_, _, _, _, _, captureScreenshotsAutomatically, _): + return captureScreenshotsAutomatically + case .disabled: + return false + } + } + + public var deleteScreenshotsWhenEachTestSucceeds: Bool { + switch self { + case let .enabled(_, _, _, _, _, _, deleteScreenshotsWhenEachTestSucceeds): + return deleteScreenshotsWhenEachTestSucceeds + case .disabled: + return false + } + } } /// Tuist generates a WorkspaceSettings.xcsettings file, setting the related key to the associated value.