From b28fd38ebb3e584f6d0fee2cadf1b42d301dc646 Mon Sep 17 00:00:00 2001 From: "Sven A. Schmidt" Date: Wed, 8 Mar 2023 11:44:43 +0100 Subject: [PATCH 1/2] Add support for macCatalyst platform --- Sources/ArenaCore/Manifest.swift | 2 ++ Sources/ArenaCore/PackageGenerator.swift | 10 ++++++- Tests/ArenaTests/ArenaTests.swift | 1 + Tests/ArenaTests/RegressionTests.swift | 23 ++++++++++++++++ Tests/Fixtures/Issue-90/Package.swift | 35 ++++++++++++++++++++++++ 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 Tests/ArenaTests/RegressionTests.swift create mode 100644 Tests/Fixtures/Issue-90/Package.swift diff --git a/Sources/ArenaCore/Manifest.swift b/Sources/ArenaCore/Manifest.swift index 5d00e73..dc064c7 100644 --- a/Sources/ArenaCore/Manifest.swift +++ b/Sources/ArenaCore/Manifest.swift @@ -22,6 +22,7 @@ struct Manifest: Decodable, Equatable { struct Platform: Decodable, Equatable { enum Name: String, Decodable, Equatable, CaseIterable { case macos + case maccatalyst case ios case tvos case watchos @@ -64,6 +65,7 @@ extension Manifest.Product.`Type`: Decodable { extension Manifest.Platform { static func macos(_ version: String) -> Self { .init(platformName: .macos, version: version) } + static func macCatalyst(_ version: String) -> Self { .init(platformName: .maccatalyst, version: version) } static func ios(_ version: String) -> Self { .init(platformName: .ios, version: version) } static func tvos(_ version: String) -> Self { .init(platformName: .tvos, version: version) } static func watchos(_ version: String) -> Self { .init(platformName: .watchos, version: version) } diff --git a/Sources/ArenaCore/PackageGenerator.swift b/Sources/ArenaCore/PackageGenerator.swift index c868c66..13a019a 100644 --- a/Sources/ArenaCore/PackageGenerator.swift +++ b/Sources/ArenaCore/PackageGenerator.swift @@ -17,15 +17,18 @@ extension PackageGenerator { struct Platforms: Equatable { var iOS: Manifest.Platform? var macOS: Manifest.Platform? + var macCatalyst: Manifest.Platform? var tvOS: Manifest.Platform? var watchOS: Manifest.Platform? init(iOS: Manifest.Platform? = nil, macOS: Manifest.Platform? = nil, + macCatalyst: Manifest.Platform? = nil, tvOS: Manifest.Platform? = nil, watchOS: Manifest.Platform? = nil) { self.iOS = iOS self.macOS = macOS + self.macCatalyst = macCatalyst self.tvOS = tvOS self.watchOS = watchOS } @@ -33,17 +36,19 @@ extension PackageGenerator { init(platforms: [Manifest.Platform]) { iOS = platforms.first(where: { $0.platformName == .ios }) macOS = platforms.first(where: { $0.platformName == .macos }) + macCatalyst = platforms.first(where: { $0.platformName == .maccatalyst }) tvOS = platforms.first(where: { $0.platformName == .tvos }) watchOS = platforms.first(where: { $0.platformName == .watchos }) } var all: [Manifest.Platform] { - [self.iOS, self.macOS, self.tvOS, self.watchOS].compactMap { $0 } + [self.iOS, self.macOS, self.macCatalyst, self.tvOS, self.watchOS].compactMap { $0 } } func merged(with other: Platforms) -> Platforms { .init(iOS: max(iOS, other.iOS), macOS: max(macOS, other.macOS), + macCatalyst: max(macCatalyst, other.macCatalyst), tvOS: max(tvOS, other.tvOS), watchOS: max(watchOS, other.watchOS)) } @@ -63,6 +68,7 @@ extension PackageGenerator { guard !platforms.all.isEmpty else { return "" } // .ios("13.0"), // .macos("10.15"), + // .maccatalyst("10.15"), // .tvos("13.0"), // .watchos("6.0") let platformsList = platforms @@ -114,6 +120,8 @@ private extension Manifest.Platform { switch self.platformName { case .ios: return "iOS" + case .maccatalyst: + return "macCatalyst" case .macos: return "macOS" case .tvos: diff --git a/Tests/ArenaTests/ArenaTests.swift b/Tests/ArenaTests/ArenaTests.swift index f3ce4f6..e58056f 100644 --- a/Tests/ArenaTests/ArenaTests.swift +++ b/Tests/ArenaTests/ArenaTests.swift @@ -30,6 +30,7 @@ extension Environment { final class ArenaTests: XCTestCase { override func setUp() { + super.setUp() Current = .mock } diff --git a/Tests/ArenaTests/RegressionTests.swift b/Tests/ArenaTests/RegressionTests.swift new file mode 100644 index 0000000..53faf89 --- /dev/null +++ b/Tests/ArenaTests/RegressionTests.swift @@ -0,0 +1,23 @@ +import XCTest + +@testable import ArenaCore + +import Path + + +final class RegressionTests: XCTestCase { + + override func setUpWithError() throws { + try super.setUpWithError() + Current = .mock + } + + func test_issue_90() throws { + // https://github.com/finestructure/Arena/issues/90 + // macCatalyst platform in manifest + XCTAssertEqual(try getPackageInfo(in: fixturesDirectory/"Issue-90").platforms, + [.macos("12.0"), .macCatalyst("15.0"), .ios("15.0"), .watchos("8.0"), .tvos("15.0")]) + + } + +} diff --git a/Tests/Fixtures/Issue-90/Package.swift b/Tests/Fixtures/Issue-90/Package.swift new file mode 100644 index 0000000..d49071d --- /dev/null +++ b/Tests/Fixtures/Issue-90/Package.swift @@ -0,0 +1,35 @@ +// swift-tools-version: 5.7 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "RichStringKit", + platforms: [.macOS(.v12), .macCatalyst(.v15), .iOS(.v15), .watchOS(.v8), .tvOS(.v15)], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "RichStringKit", + targets: ["RichStringKit"] + ) + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "RichStringKit", + dependencies: [], + swiftSettings: [ + .unsafeFlags(["-enable-bare-slash-regex"]) + ] + ), + .testTarget( + name: "RichStringKitTests", + dependencies: ["RichStringKit"] + ) + ] +) \ No newline at end of file From 7ff36d572df64a28b990e49455214c7d5a64847f Mon Sep 17 00:00:00 2001 From: "Sven A. Schmidt" Date: Wed, 8 Mar 2023 11:53:13 +0100 Subject: [PATCH 2/2] Skip test on outdated GH actions macos platform tooling --- Tests/ArenaTests/RegressionTests.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tests/ArenaTests/RegressionTests.swift b/Tests/ArenaTests/RegressionTests.swift index 53faf89..879459b 100644 --- a/Tests/ArenaTests/RegressionTests.swift +++ b/Tests/ArenaTests/RegressionTests.swift @@ -12,6 +12,7 @@ final class RegressionTests: XCTestCase { Current = .mock } +#if swift(>=5.7) // test can only run on 5.7+ due to manifest tools-version func test_issue_90() throws { // https://github.com/finestructure/Arena/issues/90 // macCatalyst platform in manifest @@ -19,5 +20,6 @@ final class RegressionTests: XCTestCase { [.macos("12.0"), .macCatalyst("15.0"), .ios("15.0"), .watchos("8.0"), .tvos("15.0")]) } +#endif }