From d850b9998d6d5f0bc44654ff3ea1a3c9a70e6670 Mon Sep 17 00:00:00 2001 From: a dinosaur Date: Sun, 6 Jul 2025 17:01:19 +1000 Subject: [PATCH] Actually test requirement parsing output (not just if it succeded) --- .../apk/Version/ApkVersionRequirement.swift | 2 +- .../apk/Version/ApkVersionSpecification.swift | 8 ++-- Tests/darwin-apk-tests/ApkVersionTests.swift | 42 ++++++++++++------- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/Sources/apk/Version/ApkVersionRequirement.swift b/Sources/apk/Version/ApkVersionRequirement.swift index 534f541..aaab99b 100644 --- a/Sources/apk/Version/ApkVersionRequirement.swift +++ b/Sources/apk/Version/ApkVersionRequirement.swift @@ -5,7 +5,7 @@ import Foundation -internal struct ApkVersionRequirement: Hashable { +internal struct ApkVersionRequirement: Sendable, Hashable { let name: String let versionSpec: ApkVersionSpecification diff --git a/Sources/apk/Version/ApkVersionSpecification.swift b/Sources/apk/Version/ApkVersionSpecification.swift index 2363b11..afa6324 100644 --- a/Sources/apk/Version/ApkVersionSpecification.swift +++ b/Sources/apk/Version/ApkVersionSpecification.swift @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -enum ApkVersionSpecification: Equatable, Hashable { - case any(invert: Bool) - case constraint(invert: Bool, op: Operator, version: String) +enum ApkVersionSpecification: Equatable, Hashable, Sendable { + case any(invert: Bool = false) + case constraint(invert: Bool = false, op: Operator, version: String) } extension ApkVersionSpecification { - enum Operator: Equatable { + enum Operator: Equatable, Sendable { case equals case fuzzyEquals case greater diff --git a/Tests/darwin-apk-tests/ApkVersionTests.swift b/Tests/darwin-apk-tests/ApkVersionTests.swift index 1d9f7b0..ae82a82 100644 --- a/Tests/darwin-apk-tests/ApkVersionTests.swift +++ b/Tests/darwin-apk-tests/ApkVersionTests.swift @@ -7,21 +7,33 @@ import Testing @testable import darwin_apk @Test func testParseDependency() { - for valid in [ - "bash", - "libapparmor=4.1.0-r2", - "python3~3.12", - "so:libc.musl-x86_64.so.1", - "!alsa-lib<1.2.14-r0", - "!alsa-lib>1.2.14-r0", - "!lld20-libs<20.1.2-r0", - "!lld20-libs>20.1.2-r0", - "!lld20<20.1.2-r0", - "!lld20>20.1.2-r0", - ] { - #expect(throws: Never.self, "Expected valid: \(valid)") { - try ApkVersionRequirement(extract: valid[...]) - } + let tests: [String: ApkVersionRequirement] = [ + "bash": + .init(name: "bash", spec: .any()), + "!libdbus": + .init(name: "libdbus", spec: .any(invert: true)), + "libapparmor=4.1.0-r2": + .init(name: "libapparmor", spec: .constraint(op: .equals, version: "4.1.0-r2")), + "python3~3.12": + .init(name: "python3", spec: .constraint(op: .fuzzyEquals, version: "3.12")), + "so:libc.musl-x86_64.so.1": + .init(name: "so:libc.musl-x86_64.so.1", spec: .any()), + "!alsa-lib<1.2.14-r0": + .init(name: "alsa-lib", spec: .constraint(invert: true, op: .less, version: "1.2.14-r0")), + "!alsa-lib>1.2.14-r0": + .init(name: "alsa-lib", spec: .constraint(invert: true, op: .greater, version: "1.2.14-r0")), + "!lld20-libs<20.1.2-r0": + .init(name: "lld20-libs", spec: .constraint(invert: true, op: .less, version: "20.1.2-r0")), + "!lld20-libs>20.1.2-r0": + .init(name: "lld20-libs", spec: .constraint(invert: true, op: .greater, version: "20.1.2-r0")), + "!lld20<20.1.2-r0": + .init(name: "lld20", spec: .constraint(invert: true, op: .less, version: "20.1.2-r0")), + "!lld20>20.1.2-r0": + .init(name: "lld20", spec: .constraint(invert: true, op: .greater, version: "20.1.2-r0")), + ] + for valid in tests { + #expect((try? ApkVersionRequirement(extract: valid.key[...])) == valid.value, + "Expect: \(valid.key) == \(valid.value)") } }