diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnv.swift index 77d291f..06e1368 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnv.swift @@ -90,7 +90,10 @@ class PhpEnv { public func detectPhpVersions() async -> [String] { let files = await Shell.pipe("ls \(Paths.optPath) | grep php@").out - var versionsOnly = await extractPhpVersions(from: files.components(separatedBy: "\n")) + var versionsOnly = await extractPhpVersions( + from: files.components(separatedBy: "\n"), + supported: Constants.ValetSupportedPhpVersionMatrix[Valet.shared.version.major]! + ) // Make sure the aliased version is detected // The user may have `php` installed, but not e.g. `php@8.0` @@ -126,16 +129,11 @@ class PhpEnv { */ public func extractPhpVersions( from versions: [String], + supported: [String], checkBinaries: Bool = true, generateHelpers: Bool = true ) async -> [String] { var output: [String] = [] - - let valetMajor = Valet.shared.version.major - let supported = Constants.ValetSupportedPhpVersionMatrix[valetMajor] ?? [] - - print(supported) - versions.filter { (version) -> Bool in // Omit everything that doesn't start with php@ // (e.g. something-php@8.0 won't be detected) diff --git a/tests/unit/Versions/PhpVersionDetectionTest.swift b/tests/unit/Versions/PhpVersionDetectionTest.swift index d9f636e..a137741 100644 --- a/tests/unit/Versions/PhpVersionDetectionTest.swift +++ b/tests/unit/Versions/PhpVersionDetectionTest.swift @@ -11,18 +11,23 @@ import XCTest class PhpVersionDetectionTest: XCTestCase { func test_can_detect_valid_php_versions() async throws { - let outcome = await PhpEnv.shared.extractPhpVersions(from: [ - "", // empty lines should be omitted - "php@8.0", - "php@8.0", // should only be detected once - "meta-php@8.0", // should be omitted, invalid - "php@8.0-coolio", // should be omitted, invalid - "php@7.0", - "", - "unrelatedphp@1.0", // should be omitted, invalid - "php@5.6", - "php@5.4" // should be omitted, not supported - ], checkBinaries: false, generateHelpers: false) + let outcome = await PhpEnv.shared.extractPhpVersions( + from: [ + "", // empty lines should be omitted + "php@8.0", + "php@8.0", // should only be detected once + "meta-php@8.0", // should be omitted, invalid + "php@8.0-coolio", // should be omitted, invalid + "php@7.0", + "", + "unrelatedphp@1.0", // should be omitted, invalid + "php@5.6", // should be omitted, not supported + "php@5.4" // should be omitted, not supported + ], + supported: ["7.0", "8.0", "8.1", "8.2"], + checkBinaries: false, + generateHelpers: false + ) XCTAssertEqual(outcome, ["8.0", "7.0"]) } diff --git a/tests/unit/Versions/PhpVersionNumberTest.swift b/tests/unit/Versions/PhpVersionNumberTest.swift index 17fbbae..a9f3e4b 100644 --- a/tests/unit/Versions/PhpVersionNumberTest.swift +++ b/tests/unit/Versions/PhpVersionNumberTest.swift @@ -13,33 +13,33 @@ class PhpVersionNumberTest: XCTestCase { func test_can_deconstruct_php_version() throws { XCTAssertEqual( - try! PhpVersionNumber.parse("PHP 8.2.0-dev"), - PhpVersionNumber(major: 8, minor: 2, patch: 0) + try! VersionNumber.parse("PHP 8.2.0-dev"), + VersionNumber(major: 8, minor: 2, patch: 0) ) XCTAssertEqual( - try! PhpVersionNumber.parse("PHP 8.1.0RC5-dev"), - PhpVersionNumber(major: 8, minor: 1, patch: 0) + try! VersionNumber.parse("PHP 8.1.0RC5-dev"), + VersionNumber(major: 8, minor: 1, patch: 0) ) XCTAssertEqual( - try! PhpVersionNumber.parse("8.0.11"), - PhpVersionNumber(major: 8, minor: 0, patch: 11) + try! VersionNumber.parse("8.0.11"), + VersionNumber(major: 8, minor: 0, patch: 11) ) XCTAssertEqual( - try! PhpVersionNumber.parse("7.4.2"), - PhpVersionNumber(major: 7, minor: 4, patch: 2) + try! VersionNumber.parse("7.4.2"), + VersionNumber(major: 7, minor: 4, patch: 2) ) XCTAssertEqual( - try! PhpVersionNumber.parse("7.4"), - PhpVersionNumber(major: 7, minor: 4, patch: nil) + try! VersionNumber.parse("7.4"), + VersionNumber(major: 7, minor: 4, patch: nil) ) XCTAssertEqual( - PhpVersionNumber.make(from: "7"), + VersionNumber.make(from: "7"), nil ) } func test_php_version_number_parse() throws { - XCTAssertThrowsError(try PhpVersionNumber.parse("OOF")) { error in + XCTAssertThrowsError(try VersionNumber.parse("OOF")) { error in XCTAssertTrue(error is VersionParseError) } }