@@ -57,6 +57,44 @@ final class XcodeListGroupingTests: XCTestCase {
5757 XCTAssertTrue ( minorGroup. hasInstalling)
5858 }
5959
60+ func testGroupedVersionsHideOlderIdenticalBuildsWhenNewerBuildIsVisible( ) throws {
61+ let releaseID = XcodeID ( version: try XCTUnwrap ( Version ( " 26.5.0+17F76 " ) ) )
62+ let releaseCandidateID = XcodeID ( version: try XCTUnwrap ( Version ( " 26.5.0-Release.Candidate+17F76 " ) ) )
63+ let items = try [
64+ item ( " 26.5.0+17F76 " , identicalBuilds: [ releaseID, releaseCandidateID] ) ,
65+ item ( " 26.5.0-Release.Candidate+17F76 " )
66+ ]
67+
68+ let versions = try XCTUnwrap ( items. groupedByMajorVersion ( ) . first? . versions. map ( \. version) )
69+
70+ XCTAssertEqual ( versions, [ try XCTUnwrap ( Version ( " 26.5.0+17F76 " ) ) ] )
71+ }
72+
73+ func testGroupedVersionsKeepOlderIdenticalBuildsWhenNewerBuildIsFilteredOut( ) throws {
74+ let releaseID = XcodeID ( version: try XCTUnwrap ( Version ( " 26.5.0+17F76 " ) ) )
75+ let releaseCandidateID = XcodeID ( version: try XCTUnwrap ( Version ( " 26.5.0-Release.Candidate+17F76 " ) ) )
76+ let items = try [
77+ item ( " 26.5.0-Release.Candidate+17F76 " , identicalBuilds: [ releaseID, releaseCandidateID] )
78+ ]
79+
80+ let versions = try XCTUnwrap ( items. groupedByMajorVersion ( ) . first? . versions. map ( \. version) )
81+
82+ XCTAssertEqual ( versions, [ try XCTUnwrap ( Version ( " 26.5.0-Release.Candidate+17F76 " ) ) ] )
83+ }
84+
85+ func testGenericGroupedVersionsHideOlderIdenticalBuildsWhenNewerBuildIsVisible( ) throws {
86+ let releaseID = XcodeID ( version: try XCTUnwrap ( Version ( " 26.5.0+17F76 " ) ) )
87+ let releaseCandidateID = XcodeID ( version: try XCTUnwrap ( Version ( " 26.5.0-Release.Candidate+17F76 " ) ) )
88+ let items = try [
89+ PositionedXcodeListItem ( position: 0 , item: item ( " 26.5.0+17F76 " , identicalBuilds: [ releaseID, releaseCandidateID] ) ) ,
90+ PositionedXcodeListItem ( position: 1 , item: item ( " 26.5.0-Release.Candidate+17F76 " ) )
91+ ]
92+
93+ let groups = items. groupedByMajorVersion ( item: \. item)
94+
95+ XCTAssertEqual ( groups. first? . versions. map ( \. position) , [ 0 ] )
96+ }
97+
6098 func testAppliesVersionArchitectureSearchAndInstalledFilters( ) throws {
6199 let installedPath = try XCTUnwrap ( Path ( " /Applications/Xcode-16.0.app " ) )
62100 let items = try [
@@ -109,12 +147,14 @@ final class XcodeListGroupingTests: XCTestCase {
109147
110148 private func item(
111149 _ version: String ,
150+ identicalBuilds: [ XcodeID ] = [ ] ,
112151 installState: XcodeInstallState = . notInstalled,
113152 selected: Bool = false ,
114153 architectures: [ Architecture ] ? = nil
115154 ) throws -> XcodeListItem {
116155 XcodeListItem (
117156 version: try XCTUnwrap ( Version ( version) ) ,
157+ identicalBuilds: identicalBuilds,
118158 installState: installState,
119159 selected: selected,
120160 architectures: architectures
0 commit comments