From d333f9b7f571e8c3114e73682202d14b2abafb2f Mon Sep 17 00:00:00 2001 From: Max Goedjen Date: Sun, 17 Jan 2021 21:52:22 -0800 Subject: [PATCH] . --- Brief/Updater.swift | 10 +++-- BriefTests/ReleaseParsingTests.swift | 58 ++++++++++++++++++---------- BriefTests/SemVerTests.swift | 5 +++ 3 files changed, 49 insertions(+), 24 deletions(-) diff --git a/Brief/Updater.swift b/Brief/Updater.swift index 4cfcdef..4361cdf 100644 --- a/Brief/Updater.swift +++ b/Brief/Updater.swift @@ -49,11 +49,11 @@ extension Updater { guard let release = releases .sorted() .reversed() - .first(where: { $0.minimumOSVersion < osVersion }) else { return } + .first(where: { $0.minimumOSVersion <= osVersion }) else { return } guard !userIgnored(release: release) else { return } guard !release.prerelease else { return } let latestVersion = SemVer(release.name) - let currentVersion = SemVer(Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String) + let currentVersion = SemVer(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0.0") if latestVersion > currentVersion { DispatchQueue.main.async { self.update = release @@ -158,7 +158,11 @@ extension Release { } public var minimumOSVersion: SemVer { - SemVer("1.1.1") + guard let range = body.range(of: "Minimum macOS Version"), + let numberStart = body.rangeOfCharacter(from: CharacterSet.decimalDigits, options: [], range: range.upperBound.. SemVer("10.0.0")) + let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update Minimum macOS Version: 1.2.3") + XCTAssert(release.minimumOSVersion > SemVer("1.0.0")) } func testGreatestSelectedIfOldPatchIsPublishedLater() { // If 2.x.x series has been published, and a patch for 1.x.x is issued // 2.x.x should still be selected if user can run it. - let updater = Updater(checkOnLaunch: false, osVersion: SemVer("10.0.0")) - let two = Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available!") + let updater = Updater(checkOnLaunch: false, osVersion: SemVer("2.2.3")) + let two = Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available! Minimum macOS Version: 2.2.3") let releases = [ - Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release"), - Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes"), + Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release Minimum macOS Version: 1.2.3"), + Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes Minimum macOS Version: 1.2.3"), two, - Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch!"), + Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch! Minimum macOS Version: 1.2.3"), ] + + let expectation = XCTestExpectation() updater.evaluate(releases: releases) - XCTAssert(updater.update == two) + DispatchQueue.main.async { + XCTAssert(updater.update == two) + expectation.fulfill() + } + wait(for: [expectation], timeout: 1) } func testLatestVersionIsRunnable() { // If the 2.x.x series has been published but the user can't run it // the last version the user can run should be selected. - let updater = Updater(checkOnLaunch: false, osVersion: SemVer("10.0.0")) - let oneOhTwo = Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch!") + let updater = Updater(checkOnLaunch: false, osVersion: SemVer("1.2.3")) + let oneOhTwo = Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch! Minimum macOS Version: 1.2.3") let releases = [ - Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release"), - Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes"), - Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available!"), - oneOhTwo, + Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release Minimum macOS Version: 1.2.3"), + Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes Minimum macOS Version: 1.2.3"), + Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available! Minimum macOS Version: 2.2.3"), + Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch! Minimum macOS Version: 1.2.3"), ] + let expectation = XCTestExpectation() updater.evaluate(releases: releases) - XCTAssert(updater.update == oneOhTwo) + DispatchQueue.main.async { + XCTAssert(updater.update == oneOhTwo) + expectation.fulfill() + } + wait(for: [expectation], timeout: 1) } func testSorting() { diff --git a/BriefTests/SemVerTests.swift b/BriefTests/SemVerTests.swift index 274e5aa..f7ee332 100644 --- a/BriefTests/SemVerTests.swift +++ b/BriefTests/SemVerTests.swift @@ -37,6 +37,11 @@ class SemVerTests: XCTestCase { XCTAssert(current.versionNumbers == [1, 1, 0]) } + func testGarbage() { + let current = SemVer("Test") + XCTAssert(current.versionNumbers == [0, 0, 0]) + } + func testBeta() { let current = SemVer("1.0.2") let new = SemVer("1.1.0_beta1")