Spaces:
Running
Running
| import Foundation | |
| import Testing | |
| @testable import OpenClaw | |
| struct GatewayEnvironmentTests { | |
| func semverParsesCommonForms() { | |
| #expect(Semver.parse("1.2.3") == Semver(major: 1, minor: 2, patch: 3)) | |
| #expect(Semver.parse(" v1.2.3 \n") == Semver(major: 1, minor: 2, patch: 3)) | |
| #expect(Semver.parse("v2.0.0") == Semver(major: 2, minor: 0, patch: 0)) | |
| #expect(Semver.parse("3.4.5-beta.1") == Semver(major: 3, minor: 4, patch: 5)) // prerelease suffix stripped | |
| #expect(Semver.parse("2026.1.11-4") == Semver(major: 2026, minor: 1, patch: 11)) // build suffix stripped | |
| #expect(Semver.parse("1.0.5+build.123") == Semver(major: 1, minor: 0, patch: 5)) // metadata suffix stripped | |
| #expect(Semver.parse("v1.2.3+build.9") == Semver(major: 1, minor: 2, patch: 3)) | |
| #expect(Semver.parse("1.2.3+build.123") == Semver(major: 1, minor: 2, patch: 3)) | |
| #expect(Semver.parse("1.2.3-rc.1+build.7") == Semver(major: 1, minor: 2, patch: 3)) | |
| #expect(Semver.parse("v1.2.3-rc.1") == Semver(major: 1, minor: 2, patch: 3)) | |
| #expect(Semver.parse("1.2.0") == Semver(major: 1, minor: 2, patch: 0)) | |
| #expect(Semver.parse(nil) == nil) | |
| #expect(Semver.parse("invalid") == nil) | |
| #expect(Semver.parse("1.2") == nil) | |
| #expect(Semver.parse("1.2.x") == nil) | |
| } | |
| func semverCompatibilityRequiresSameMajorAndNotOlder() { | |
| let required = Semver(major: 2, minor: 1, patch: 0) | |
| #expect(Semver(major: 2, minor: 1, patch: 0).compatible(with: required)) | |
| #expect(Semver(major: 2, minor: 2, patch: 0).compatible(with: required)) | |
| #expect(Semver(major: 2, minor: 1, patch: 1).compatible(with: required)) | |
| #expect(Semver(major: 2, minor: 0, patch: 9).compatible(with: required) == false) | |
| #expect(Semver(major: 3, minor: 0, patch: 0).compatible(with: required) == false) | |
| #expect(Semver(major: 1, minor: 9, patch: 9).compatible(with: required) == false) | |
| } | |
| func gatewayPortDefaultsAndRespectsOverride() async { | |
| let configPath = TestIsolation.tempConfigPath() | |
| await TestIsolation.withIsolatedState( | |
| env: ["OPENCLAW_CONFIG_PATH": configPath], | |
| defaults: ["gatewayPort": nil]) | |
| { | |
| let defaultPort = GatewayEnvironment.gatewayPort() | |
| #expect(defaultPort == 18789) | |
| UserDefaults.standard.set(19999, forKey: "gatewayPort") | |
| defer { UserDefaults.standard.removeObject(forKey: "gatewayPort") } | |
| #expect(GatewayEnvironment.gatewayPort() == 19999) | |
| } | |
| } | |
| func expectedGatewayVersionFromStringUsesParser() { | |
| #expect(GatewayEnvironment.expectedGatewayVersion(from: "v9.1.2") == Semver(major: 9, minor: 1, patch: 2)) | |
| #expect(GatewayEnvironment.expectedGatewayVersion(from: "2026.1.11-4") == Semver( | |
| major: 2026, | |
| minor: 1, | |
| patch: 11)) | |
| #expect(GatewayEnvironment.expectedGatewayVersion(from: nil) == nil) | |
| } | |
| } | |