diff --git a/Sources/Testing/ABI/Encoded/ABI.EncodedTest.swift b/Sources/Testing/ABI/Encoded/ABI.EncodedTest.swift index 8a6d4518a..51d01781d 100644 --- a/Sources/Testing/ABI/Encoded/ABI.EncodedTest.swift +++ b/Sources/Testing/ABI/Encoded/ABI.EncodedTest.swift @@ -98,7 +98,7 @@ extension ABI { sourceLocation = test.sourceLocation id = ID(encoding: test.id) - if V.versionNumber >= 1 { + if V.versionNumber >= ABI.v1.versionNumber { let tags = test.tags if !tags.isEmpty { _tags = tags.map(String.init(describing:)) diff --git a/Sources/Testing/ABI/EntryPoints/ABIEntryPoint.swift b/Sources/Testing/ABI/EntryPoints/ABIEntryPoint.swift index 7014ec066..f3f50a1be 100644 --- a/Sources/Testing/ABI/EntryPoints/ABIEntryPoint.swift +++ b/Sources/Testing/ABI/EntryPoints/ABIEntryPoint.swift @@ -47,10 +47,17 @@ extension ABI.v0 { /// callback. public static var entryPoint: EntryPoint { return { configurationJSON, recordHandler in - try await _entryPoint( - configurationJSON: configurationJSON, - recordHandler: recordHandler - ) == EXIT_SUCCESS + let args = try configurationJSON.map { configurationJSON in + try JSON.decode(__CommandLineArguments_v0.self, from: configurationJSON) + } + let eventHandler = try eventHandlerForStreamingEvents(version: args?.eventStreamVersion, encodeAsJSONLines: false, forwardingTo: recordHandler) + + switch await Testing.entryPoint(passing: args, eventHandler: eventHandler) { + case EXIT_SUCCESS, EXIT_NO_TESTS_FOUND: + return true + default: + return false + } } } } @@ -89,48 +96,21 @@ extension ABI.Xcode16 { @usableFromInline func copyABIEntryPoint_v0() -> UnsafeMutableRawPointer { let result = UnsafeMutablePointer.allocate(capacity: 1) result.initialize { configurationJSON, recordHandler in - try await _entryPoint( - configurationJSON: configurationJSON, - eventStreamVersionIfNil: -1, - recordHandler: recordHandler - ) + var args = try configurationJSON.map { configurationJSON in + try JSON.decode(__CommandLineArguments_v0.self, from: configurationJSON) + } + if args?.eventStreamVersion == nil { + args?.eventStreamVersion = ABI.Xcode16.versionNumber + } + let eventHandler = try eventHandlerForStreamingEvents(version: args?.eventStreamVersion, encodeAsJSONLines: false, forwardingTo: recordHandler) + + var exitCode = await Testing.entryPoint(passing: args, eventHandler: eventHandler) + if exitCode == EXIT_NO_TESTS_FOUND { + exitCode = EXIT_SUCCESS + } + return exitCode } return .init(result) } #endif - -// MARK: - - -/// A common implementation for ``ABI/v0/entryPoint-swift.type.property`` and -/// ``copyABIEntryPoint_v0()`` that provides Xcode 16 compatibility. -/// -/// This function will be removed (with its logic incorporated into -/// ``ABI/v0/entryPoint-swift.type.property``) in a future update. -private func _entryPoint( - configurationJSON: UnsafeRawBufferPointer?, - eventStreamVersionIfNil: Int? = nil, - recordHandler: @escaping @Sendable (_ recordJSON: UnsafeRawBufferPointer) -> Void -) async throws -> CInt { - var args = try configurationJSON.map { configurationJSON in - try JSON.decode(__CommandLineArguments_v0.self, from: configurationJSON) - } - - // If the caller needs a nil event stream version to default to a specific - // JSON schema, apply it here as if they'd specified it in the configuration - // JSON blob. - if let eventStreamVersionIfNil, args?.eventStreamVersion == nil { - args?.eventStreamVersion = eventStreamVersionIfNil - } - - let eventHandler = try eventHandlerForStreamingEvents(version: args?.eventStreamVersion, encodeAsJSONLines: false, forwardingTo: recordHandler) - let exitCode = await entryPoint(passing: args, eventHandler: eventHandler) - - // To maintain compatibility with Xcode 16, suppress custom exit codes. (This - // is also needed by ABI.v0.entryPoint to correctly treat the no-tests as a - // successful run.) - if exitCode == EXIT_NO_TESTS_FOUND { - return EXIT_SUCCESS - } - return exitCode -} #endif diff --git a/Sources/Testing/ABI/EntryPoints/EntryPoint.swift b/Sources/Testing/ABI/EntryPoints/EntryPoint.swift index f36bda694..c72542d65 100644 --- a/Sources/Testing/ABI/EntryPoints/EntryPoint.swift +++ b/Sources/Testing/ABI/EntryPoints/EntryPoint.swift @@ -632,14 +632,14 @@ func eventHandlerForStreamingEvents( case nil: eventHandler(for: ABI.CurrentVersion.self) #if !SWT_NO_SNAPSHOT_TYPES - case -1: + case ABI.Xcode16.versionNumber: // Legacy support for Xcode 16. Support for this undocumented version will // be removed in a future update. Do not use it. eventHandler(for: ABI.Xcode16.self) #endif - case 0: + case ABI.v0.versionNumber: eventHandler(for: ABI.v0.self) - case 1: + case ABI.v1.versionNumber: eventHandler(for: ABI.v1.self) case let .some(unsupportedVersionNumber): throw _EntryPointError.invalidArgument("--event-stream-version", value: "\(unsupportedVersionNumber)") diff --git a/Tests/TestingTests/SwiftPMTests.swift b/Tests/TestingTests/SwiftPMTests.swift index 77e52319e..6e7be0f15 100644 --- a/Tests/TestingTests/SwiftPMTests.swift +++ b/Tests/TestingTests/SwiftPMTests.swift @@ -228,15 +228,15 @@ struct SwiftPMTests { @Test("--event-stream-output-path argument (writes to a stream and can be read back)", arguments: [ - ("--event-stream-output-path", "--event-stream-version", 0), - ("--experimental-event-stream-output", "--experimental-event-stream-version", 0), - ("--experimental-event-stream-output", "--experimental-event-stream-version", 1), + ("--event-stream-output-path", "--event-stream-version", ABI.v0.versionNumber), + ("--experimental-event-stream-output", "--experimental-event-stream-version", ABI.v0.versionNumber), + ("--experimental-event-stream-output", "--experimental-event-stream-version", ABI.v1.versionNumber), ]) func eventStreamOutput(outputArgumentName: String, versionArgumentName: String, version: Int) async throws { switch version { - case 0: + case ABI.v0.versionNumber: try await eventStreamOutput(outputArgumentName: outputArgumentName, versionArgumentName: versionArgumentName, version: ABI.v0.self) - case 1: + case ABI.v1.versionNumber: try await eventStreamOutput(outputArgumentName: outputArgumentName, versionArgumentName: versionArgumentName, version: ABI.v1.self) default: Issue.record("Unreachable event stream version \(version)") @@ -282,7 +282,7 @@ struct SwiftPMTests { } #expect(testRecords.count == 1) for testRecord in testRecords { - if version.versionNumber >= 1 { + if version.versionNumber >= ABI.v1.versionNumber { #expect(testRecord._tags != nil) } else { #expect(testRecord._tags == nil)