Skip to content

Commit 43c1a3d

Browse files
committed
Added support for Wasm and Android in the Swift package data output files.
1 parent 25fcdaf commit 43c1a3d

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

Sources/PackageListTool/Models/SwiftPackageIndexAPI+Package.swift

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,16 @@ extension SwiftPackageIndexAPI {
2929
public enum PlatformCompatibilityGroup: String, CaseIterable, Codable {
3030
case apple = "Apple"
3131
case linux = "Linux"
32+
case wasm = "Wasm"
33+
case android = "Android"
3234

3335
var platforms: OrderedSet<PlatformCompatibility> {
3436
switch self {
3537
// The order here is important and should match the columns in the compatibility matrix on the SPI website.
3638
case .apple: return [.iOS, .macOS, .visionOS, .watchOS, .tvOS]
3739
case .linux: return [.linux]
40+
case .wasm: return [.wasm]
41+
case .android: return [.android]
3842
}
3943
}
4044
}
@@ -49,15 +53,28 @@ extension SwiftPackageIndexAPI.Package {
4953
}
5054

5155
public var platformCompatibilityTooltip: String {
52-
groupedPlatformCompatibility.map { group in
56+
let tooltips = groupedPlatformCompatibility.map { group in
5357
let platforms = group.platforms.intersection(Set(platformCompatibility ?? []))
5458
if group == .apple {
5559
let detail = "(" + platforms.map(\.rawValue).joined(separator: ", ") + ")"
5660
return "\(group.rawValue) \(detail)"
5761
} else {
5862
return group.rawValue
5963
}
60-
}.joined(separator: " and ")
64+
}
65+
66+
switch tooltips.count {
67+
case 0:
68+
return ""
69+
case 1:
70+
return tooltips[0]
71+
case 2:
72+
return tooltips.joined(separator: " and ")
73+
default:
74+
let allButLast = tooltips.dropLast().joined(separator: ", ")
75+
let last = tooltips.last!
76+
return "\(allButLast), and \(last)"
77+
}
6178
}
6279
}
6380

Tests/PackageListToolTests/API+APIPackageTests.swift

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@ class API_APIPackageTests: XCTestCase {
3434

3535
package.platformCompatibility = [.linux]
3636
XCTAssertEqual(package.groupedPlatformCompatibility, [.linux])
37+
38+
package.platformCompatibility = [.wasm]
39+
XCTAssertEqual(package.groupedPlatformCompatibility, [.wasm])
40+
41+
package.platformCompatibility = [.android]
42+
XCTAssertEqual(package.groupedPlatformCompatibility, [.android])
43+
44+
package.platformCompatibility = [.macOS, .linux, .wasm, .android]
45+
XCTAssertEqual(package.groupedPlatformCompatibility, [.apple, .linux, .wasm, .android])
3746
}
3847

3948
func test_platformCompatibilityTooltip() throws {
@@ -50,6 +59,24 @@ class API_APIPackageTests: XCTestCase {
5059

5160
package.platformCompatibility = [.linux]
5261
XCTAssertEqual(package.platformCompatibilityTooltip, "Linux")
62+
63+
package.platformCompatibility = [.wasm]
64+
XCTAssertEqual(package.platformCompatibilityTooltip, "Wasm")
65+
66+
package.platformCompatibility = [.android]
67+
XCTAssertEqual(package.platformCompatibilityTooltip, "Android")
68+
69+
package.platformCompatibility = [.linux, .wasm]
70+
XCTAssertEqual(package.platformCompatibilityTooltip, "Linux and Wasm")
71+
72+
package.platformCompatibility = [.macOS, .linux, .wasm]
73+
XCTAssertEqual(package.platformCompatibilityTooltip, "Apple (macOS), Linux, and Wasm")
74+
75+
package.platformCompatibility = [.macOS, .linux, .wasm, .android]
76+
XCTAssertEqual(package.platformCompatibilityTooltip, "Apple (macOS), Linux, Wasm, and Android")
77+
78+
package.platformCompatibility = [.iOS, .macOS, .linux, .wasm, .android]
79+
XCTAssertEqual(package.platformCompatibilityTooltip, "Apple (iOS, macOS), Linux, Wasm, and Android")
5380
}
5481

5582
func test_reformatYMLToSwiftOrgStyle() {

0 commit comments

Comments
 (0)