Skip to content

Commit 2aa00ec

Browse files
committed
Generalize the opt-in
1 parent d85763e commit 2aa00ec

File tree

4 files changed

+36
-22
lines changed

4 files changed

+36
-22
lines changed

Sources/Testing/ABI/ABI.swift

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,33 @@ extension ABI {
9494
#endif
9595
}
9696

97+
/// The value of the environment variable flag which enables experimental event
98+
/// stream fields, if any.
99+
private let _shouldIncludeExperimentalFlags = Environment.flag(named: "SWT_EXPERIMENTAL_EVENT_STREAM_FIELDS_ENABLED")
100+
101+
extension ABI.Version {
102+
/// Whether or not experimental fields should be included when using this
103+
/// ABI version.
104+
///
105+
/// The value of this property is `true` if any of the following conditions
106+
/// are satisfied:
107+
///
108+
/// - The version number is less than 6.3. This is to preserve compatibility
109+
/// with existing clients before the inclusion of experimental fields became
110+
/// opt-in starting in 6.3.
111+
/// - The version number is greater than or equal to 6.3 and the environment
112+
/// variable flag `SWT_EXPERIMENTAL_EVENT_STREAM_FIELDS_ENABLED` is set to a
113+
/// true value.
114+
/// - The version number is greater than or equal to that of ``ABI/ExperimentalVersion``.
115+
///
116+
/// Otherwise, the value of this property is `false`.
117+
static var includesExperimentalFields: Bool {
118+
versionNumber < ABI.v6_3.versionNumber
119+
|| (versionNumber >= ABI.v6_3.versionNumber && _shouldIncludeExperimentalFlags == true)
120+
|| versionNumber >= ABI.ExperimentalVersion.versionNumber
121+
}
122+
}
123+
97124
// MARK: - Concrete ABI versions
98125

99126
extension ABI {

Sources/Testing/ABI/Encoded/ABI.EncodedEvent.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ extension ABI {
9999
self.messages = messages.map(EncodedMessage.init)
100100
testID = event.testID.map(EncodedTest.ID.init)
101101

102-
// Experimental
103-
if V.versionNumber >= ABI.ExperimentalVersion.versionNumber {
102+
// Experimental fields
103+
if V.includesExperimentalFields {
104104
if eventContext.test?.isParameterized == true {
105105
_testCase = eventContext.testCase.map(EncodedTestCase.init)
106106
}

Sources/Testing/ABI/Encoded/ABI.EncodedIssue.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ extension ABI {
7272
isFailure = issue.isFailure
7373
}
7474

75-
// Experimental
76-
if V.versionNumber >= ABI.ExperimentalVersion.versionNumber {
75+
// Experimental fields
76+
if V.includesExperimentalFields {
7777
if let backtrace = issue.sourceContext.backtrace {
7878
_backtrace = EncodedBacktrace(encoding: backtrace, in: eventContext)
7979
}

Sources/Testing/ABI/Encoded/ABI.EncodedTest.swift

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -90,25 +90,12 @@ extension ABI {
9090
sourceLocation = test.sourceLocation
9191
id = ID(encoding: test.id)
9292

93-
// Experimental test case encoding: This field was included in v0 with an
94-
// underscore-prefixed name despite not having been formally proposed, and
95-
// a prominent client (the VS Code Swift plugin) depends on it. To avoid
96-
// breaking existing versions of that plugin, continue unconditionally
97-
// including this field in versions earlier than 6.3 (including v0). In
98-
// 6.3 and later, don't include it by default but allow opting-in to it
99-
// via an environment variable. (This is to maintain compatibility until
100-
// the field has been formally proposed and accepted, and discourage new
101-
// clients from becoming dependent on it in the mean time.) Finally,
102-
// in the special experimental version always include this field.
103-
if isParameterized == true,
104-
(V.versionNumber < ABI.v6_3.versionNumber
105-
|| V.versionNumber >= ABI.ExperimentalVersion.versionNumber
106-
|| Environment.flag(named: "SWT_ENABLE_EXPERIMENTAL_EVENT_STREAM_TEST_CASE_ENCODING") == true) {
107-
_testCases = test.uncheckedTestCases?.map(EncodedTestCase.init(encoding:))
108-
}
93+
// Experimental fields
94+
if V.includesExperimentalFields {
95+
if isParameterized == true {
96+
_testCases = test.uncheckedTestCases?.map(EncodedTestCase.init(encoding:))
97+
}
10998

110-
// Experimental
111-
if V.versionNumber >= ABI.ExperimentalVersion.versionNumber {
11299
let tags = test.tags
113100
if !tags.isEmpty {
114101
_tags = tags.map(String.init(describing:))

0 commit comments

Comments
 (0)