Summary
CoreTests.testRetryFunctionalityJunit fails when its .xcresult fixtures are regenerated on Xcode 26.2. The hardcoded JUnit expectations were recorded against an older Xcode and no longer match.
Observed
Regenerating fixtures with ./prepareTestResults.sh on Xcode 26.2 / iOS 26.2, then running swift test:
CoreTests.swift:204: XCTAssertEqual failed: ("9") is not equal to ("10")
CoreTests.swift:208: XCTAssertEqual failed: ("6") is not equal to ("7")
CoreTests.swift:204: XCTAssertEqual failed: ("3") is not equal to ("4")
CoreTests.swift:208: XCTAssertEqual failed: ("3") is not equal to ("4")
CoreTests.swift:204: XCTAssertEqual failed: ("3") is not equal to ("4")
CoreTests.swift:208: XCTAssertEqual failed: ("3") is not equal to ("4")
Line 204 is XCTAssertEqual(results.count, count); line 208 is the .unknown state count, in the assertJunitResults helper.
Analysis
Each of the three test cases produces exactly one fewer JUnitReport.TestResult in the .unknown state than expected, and that single missing entry fully accounts for the total count being off by one as well. .unknown results correspond to activity/log lines rendered as <system-out>, so Xcode 26 appears to emit one fewer activity entry per test case than the Xcode version the expectations were written against.
This is fixture drift, not a regression in report generation — the JUnit output is internally consistent, it just contains one less activity line per case.
Status
The two affected assertions are currently XCTSkipped referencing this issue, so CI can go green while this is resolved.
Resolution options
- Make the assertions tolerant of activity-count variation across Xcode versions (assert on the states that carry meaning —
failed, skipped — rather than exact unknown counts).
- Re-record the expectations against a pinned Xcode and accept that they need updating each major version.
- Assert relationships rather than absolutes (e.g.
count == failed + systemErr + systemOut + unknown + skipped, which the helper already checks and which still passes).
Option 1 is probably right: the exact number of activity log lines Xcode emits is not behaviour this project controls or should assert on.
Context
Found while making the test suite runnable without the private fixture bucket, so that fork PRs can produce a green check (#219).
Summary
CoreTests.testRetryFunctionalityJunitfails when its.xcresultfixtures are regenerated on Xcode 26.2. The hardcoded JUnit expectations were recorded against an older Xcode and no longer match.Observed
Regenerating fixtures with
./prepareTestResults.shon Xcode 26.2 / iOS 26.2, then runningswift test:Line 204 is
XCTAssertEqual(results.count, count); line 208 is the.unknownstate count, in theassertJunitResultshelper.Analysis
Each of the three test cases produces exactly one fewer
JUnitReport.TestResultin the.unknownstate than expected, and that single missing entry fully accounts for the total count being off by one as well..unknownresults correspond to activity/log lines rendered as<system-out>, so Xcode 26 appears to emit one fewer activity entry per test case than the Xcode version the expectations were written against.This is fixture drift, not a regression in report generation — the JUnit output is internally consistent, it just contains one less activity line per case.
Status
The two affected assertions are currently
XCTSkipped referencing this issue, so CI can go green while this is resolved.Resolution options
failed,skipped— rather than exactunknowncounts).count == failed + systemErr + systemOut + unknown + skipped, which the helper already checks and which still passes).Option 1 is probably right: the exact number of activity log lines Xcode emits is not behaviour this project controls or should assert on.
Context
Found while making the test suite runnable without the private fixture bucket, so that fork PRs can produce a green check (#219).