1
0
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:
2023-01-05 17:58:55 +01:00
parent 67e8589834
commit d854dee2a1
3 changed files with 34 additions and 31 deletions

View File

@ -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)

View File

@ -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"])
}

View File

@ -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)
}
}