From f82ab913c64904c26fe4148a379aacdcb684a51b Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 31 Oct 2023 20:40:11 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Detect=20which=20extensions=20are?= =?UTF-8?q?=20available?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Parsers/ExtensionEnumeratorTest.swift | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/tests/unit/Parsers/ExtensionEnumeratorTest.swift b/tests/unit/Parsers/ExtensionEnumeratorTest.swift index 338c558..6ad8307 100644 --- a/tests/unit/Parsers/ExtensionEnumeratorTest.swift +++ b/tests/unit/Parsers/ExtensionEnumeratorTest.swift @@ -30,9 +30,33 @@ final class ExtensionEnumeratorTest: XCTestCase { } func testCanParseFormulaeBasedOnSyntax() throws { - // TODO: Write a class that can figure out which PHP version can get which extensions - // A regular expression can be used (format: @.rb ) - // Perhaps it is also needed to write a whitelist to figure out which extensions are allowed? - } + let directory = "\(Paths.tapPath)/shivammathur/homebrew-extensions/Formula" + let files = try FileSystem.getShallowContentsOfDirectory(directory) + // TODO: Put this in a separate class + var versionExtensionsMap = [String: Set]() + let regex = try! NSRegularExpression(pattern: "(\\w+)@(\\d+\\.\\d+)\\.rb") + for file in files { + let matches = regex.matches(in: file, range: NSRange(file.startIndex..., in: file)) + if let match = matches.first { + if let phpExtensionRange = Range(match.range(at: 1), in: file), + let versionRange = Range(match.range(at: 2), in: file) { + let phpExtension = String(file[phpExtensionRange]) + let version = String(file[versionRange]) + + if var extensions = versionExtensionsMap[version] { + extensions.insert(phpExtension) + versionExtensionsMap[version] = extensions + } else { + versionExtensionsMap[version] = [phpExtension] + } + } + } + } + + XCTAssertEqual(versionExtensionsMap["8.1"], Set(["xdebug"])) + XCTAssertEqual(versionExtensionsMap["8.2"], Set(["xdebug"])) + XCTAssertEqual(versionExtensionsMap["8.3"], Set(["xdebug"])) + XCTAssertEqual(versionExtensionsMap["8.4"], Set(["xdebug"])) + } }