mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-07 03:50:08 +02:00
✅ Fix tests related to version number parsing
This commit is contained in:
@ -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)
|
||||
|
@ -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"])
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user