2026-07-06 19:17:26 +00:00
|
|
|
@testable import BrewBar
|
|
|
|
|
import XCTest
|
|
|
|
|
|
|
|
|
|
final class BrewParserTests: XCTestCase {
|
|
|
|
|
// MARK: - parseOutdated
|
|
|
|
|
|
|
|
|
|
func testParseOutdated_multiplePackages() {
|
|
|
|
|
let output = "wget\nffmpeg\ngit\n"
|
|
|
|
|
XCTAssertEqual(BrewParser.parseOutdated(output), ["wget", "ffmpeg", "git"])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testParseOutdated_emptyOutput() {
|
|
|
|
|
XCTAssertEqual(BrewParser.parseOutdated(""), [])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testParseOutdated_singlePackage() {
|
|
|
|
|
XCTAssertEqual(BrewParser.parseOutdated("wget\n"), ["wget"])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testParseOutdated_trailingNewlinesIgnored() {
|
|
|
|
|
let output = "wget\n\n\n"
|
|
|
|
|
XCTAssertEqual(BrewParser.parseOutdated(output), ["wget"])
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-06 20:26:12 +00:00
|
|
|
// MARK: - parseOutdatedJSON
|
|
|
|
|
|
|
|
|
|
func testParseOutdatedJSON_formulaeAndCasks() {
|
|
|
|
|
let output = """
|
|
|
|
|
{
|
|
|
|
|
"formulae": [
|
|
|
|
|
{
|
|
|
|
|
"name": "wget",
|
|
|
|
|
"installed_versions": ["1.21.3"],
|
|
|
|
|
"current_version": "1.21.4",
|
|
|
|
|
"pinned": false,
|
|
|
|
|
"pinned_version": null
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"casks": [
|
|
|
|
|
{
|
|
|
|
|
"name": "tailscale-app",
|
|
|
|
|
"installed_versions": ["1.98.5"],
|
|
|
|
|
"current_version": "1.98.8",
|
|
|
|
|
"pinned": false,
|
|
|
|
|
"pinned_version": null
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
let result = BrewParser.parseOutdatedJSON(output)
|
|
|
|
|
XCTAssertEqual(result.formulae.map(\.name), ["wget"])
|
|
|
|
|
XCTAssertEqual(result.casks.map(\.name), ["tailscale-app"])
|
|
|
|
|
XCTAssertEqual(result.count, 2)
|
|
|
|
|
XCTAssertFalse(result.isEmpty)
|
|
|
|
|
XCTAssertEqual(result.all.map(\.name), ["wget", "tailscale-app"])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testParseOutdatedJSON_nothingOutdated() {
|
|
|
|
|
let result = BrewParser.parseOutdatedJSON("{\"formulae\": [], \"casks\": []}")
|
|
|
|
|
XCTAssertTrue(result.isEmpty)
|
|
|
|
|
XCTAssertEqual(result.count, 0)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testParseOutdatedJSON_invalidInputReturnsNone() {
|
|
|
|
|
XCTAssertEqual(BrewParser.parseOutdatedJSON(""), .none)
|
|
|
|
|
XCTAssertEqual(BrewParser.parseOutdatedJSON("Error: some brew failure"), .none)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testParseOutdatedJSON_packageLabel() {
|
|
|
|
|
let package = OutdatedPackage(name: "wget", installedVersions: ["1.21.3"], currentVersion: "1.21.4")
|
|
|
|
|
XCTAssertEqual(package.label, "wget 1.21.3 → 1.21.4")
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-06 19:17:26 +00:00
|
|
|
// MARK: - parseVersion
|
|
|
|
|
|
|
|
|
|
func testParseVersion_picksFirstLine() {
|
|
|
|
|
let output = "Homebrew 4.3.0\nHomebrew/homebrew-core (git revision abc123)\n"
|
|
|
|
|
XCTAssertEqual(BrewParser.parseVersion(output), "Homebrew 4.3.0")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testParseVersion_emptyOutput() {
|
|
|
|
|
XCTAssertEqual(BrewParser.parseVersion(""), "Unknown")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testParseVersion_singleLine() {
|
|
|
|
|
XCTAssertEqual(BrewParser.parseVersion("Homebrew 4.3.0"), "Homebrew 4.3.0")
|
|
|
|
|
}
|
|
|
|
|
}
|