Support preferred screen capture format in scheme test action (#1450)

* Support preferred screen capture format in scheme test action (resolves #1443)

* preferredScreenCaptureFormat decoding test

---------

Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
This commit is contained in:
Vakhid Betrakhmadov
2025-02-17 06:07:29 +00:00
committed by GitHub
parent d1d04e8e63
commit 68b0d1206f
5 changed files with 58 additions and 3 deletions
+1
View File
@@ -1064,6 +1064,7 @@ A multiline script can be written using the various YAML multiline methods, for
- [ ] **captureScreenshotsAutomatically**: **Bool** - indicates whether screenshots should be captured automatically while UI Testing. This defaults to true.
- [ ] **deleteScreenshotsWhenEachTestSucceeds**: **Bool** - whether successful UI tests should cause automatically-captured screenshots to be deleted. If `captureScreenshotsAutomatically` is false, this value is ignored. This defaults to true.
- [ ] **testPlans**: **[[Test Plan](#test-plan)]** - List of test plan locations that will be referenced in the scheme.
- [ ] **preferredScreenCaptureFormat**: **String** - automatic screen capture format to use while UI Testing. Possible values are `screenshots`, `screenRecording`. Default is `screenRecording`.
#### Test Target
A target can be one of a 2 types:
+16 -1
View File
@@ -203,6 +203,7 @@ public struct Scheme: Equatable {
public static let debugEnabledDefault = true
public static let captureScreenshotsAutomaticallyDefault = true
public static let deleteScreenshotsWhenEachTestSucceedsDefault = true
public static let preferredScreenCaptureFormatDefault = XCScheme.TestAction.ScreenCaptureFormat.screenRecording
public var config: String?
public var gatherCoverageData: Bool
@@ -221,6 +222,7 @@ public struct Scheme: Equatable {
public var deleteScreenshotsWhenEachTestSucceeds: Bool
public var testPlans: [TestPlan]
public var macroExpansion: String?
public var preferredScreenCaptureFormat: XCScheme.TestAction.ScreenCaptureFormat
public struct TestTarget: Equatable, ExpressibleByStringLiteral {
@@ -288,7 +290,8 @@ public struct Scheme: Equatable {
customLLDBInit: String? = nil,
captureScreenshotsAutomatically: Bool = captureScreenshotsAutomaticallyDefault,
deleteScreenshotsWhenEachTestSucceeds: Bool = deleteScreenshotsWhenEachTestSucceedsDefault,
macroExpansion: String? = nil
macroExpansion: String? = nil,
preferredScreenCaptureFormat: XCScheme.TestAction.ScreenCaptureFormat = preferredScreenCaptureFormatDefault
) {
self.config = config
self.gatherCoverageData = gatherCoverageData
@@ -307,6 +310,7 @@ public struct Scheme: Equatable {
self.captureScreenshotsAutomatically = captureScreenshotsAutomatically
self.deleteScreenshotsWhenEachTestSucceeds = deleteScreenshotsWhenEachTestSucceeds
self.macroExpansion = macroExpansion
self.preferredScreenCaptureFormat = preferredScreenCaptureFormat
}
public var shouldUseLaunchSchemeArgsEnv: Bool {
@@ -624,6 +628,7 @@ extension Scheme.Test: JSONObjectConvertible {
captureScreenshotsAutomatically = jsonDictionary.json(atKeyPath: "captureScreenshotsAutomatically") ?? Scheme.Test.captureScreenshotsAutomaticallyDefault
deleteScreenshotsWhenEachTestSucceeds = jsonDictionary.json(atKeyPath: "deleteScreenshotsWhenEachTestSucceeds") ?? Scheme.Test.deleteScreenshotsWhenEachTestSucceedsDefault
macroExpansion = jsonDictionary.json(atKeyPath: "macroExpansion")
preferredScreenCaptureFormat = jsonDictionary.json(atKeyPath: "preferredScreenCaptureFormat") ?? Scheme.Test.preferredScreenCaptureFormatDefault
}
}
@@ -667,6 +672,10 @@ extension Scheme.Test: JSONEncodable {
dict["deleteScreenshotsWhenEachTestSucceeds"] = deleteScreenshotsWhenEachTestSucceeds
}
if preferredScreenCaptureFormat != Scheme.Test.preferredScreenCaptureFormatDefault {
dict["preferredScreenCaptureFormat"] = preferredScreenCaptureFormat.toJSONValue()
}
return dict
}
}
@@ -1018,3 +1027,9 @@ extension XCScheme.LaunchAction.GPUValidationMode: JSONEncodable {
}
}
}
extension XCScheme.TestAction.ScreenCaptureFormat: JSONEncodable {
public func toJSONValue() -> Any {
rawValue
}
}
@@ -317,6 +317,7 @@ public class SchemeGenerator {
language: scheme.test?.language,
region: scheme.test?.region,
systemAttachmentLifetime: scheme.test?.systemAttachmentLifetime,
preferredScreenCaptureFormat: scheme.test?.preferredScreenCaptureFormat,
customLLDBInitFile: scheme.test?.customLLDBInit
)
@@ -1028,7 +1028,8 @@ class SpecLoadingTests: XCTestCase {
[
"path": "Path/Plan2.xctestplan"
]
]
],
"preferredScreenCaptureFormat": "screenshots",
],
"management": [
"isShown": false,
@@ -1082,7 +1083,8 @@ class SpecLoadingTests: XCTestCase {
testPlans: [
.init(path: "Path/Plan.xctestplan"),
.init(path: "Path/Plan2.xctestplan")
]
],
preferredScreenCaptureFormat: .screenshots
)
try expect(scheme.test) == expectedTest
@@ -644,6 +644,42 @@ class SchemeGeneratorTests: XCTestCase {
.init(reference: "container:\(testPlanPath2)", default: true),
]
}
$0.it("generates scheme with screenshots as preferred screen capture format") {
let scheme = Scheme(
name: "MyScheme",
build: Scheme.Build(targets: [buildTarget]),
run: Scheme.Run(config: "Debug"),
test: Scheme.Test(config: "Debug", preferredScreenCaptureFormat: .screenshots)
)
let project = Project(
name: "test",
targets: [app, framework],
schemes: [scheme]
)
let xcodeProject = try project.generateXcodeProject()
let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)
try expect(xcscheme.testAction?.preferredScreenCaptureFormat) == .screenshots
}
$0.it("generates scheme with screen recording as preferred screen capture format") {
let scheme = Scheme(
name: "MyScheme",
build: Scheme.Build(targets: [buildTarget]),
run: Scheme.Run(config: "Debug"),
test: Scheme.Test(config: "Debug", preferredScreenCaptureFormat: .screenRecording)
)
let project = Project(
name: "test",
targets: [app, framework],
schemes: [scheme]
)
let xcodeProject = try project.generateXcodeProject()
let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)
try expect(xcscheme.testAction?.preferredScreenCaptureFormat) == .screenRecording
}
}
}