mirror of
https://github.com/maxgoedjen/secretive.git
synced 2025-04-18 05:22:11 +00:00
.
This commit is contained in:
parent
404ab09faa
commit
d333f9b7f5
@ -49,11 +49,11 @@ extension Updater {
|
|||||||
guard let release = releases
|
guard let release = releases
|
||||||
.sorted()
|
.sorted()
|
||||||
.reversed()
|
.reversed()
|
||||||
.first(where: { $0.minimumOSVersion < osVersion }) else { return }
|
.first(where: { $0.minimumOSVersion <= osVersion }) else { return }
|
||||||
guard !userIgnored(release: release) else { return }
|
guard !userIgnored(release: release) else { return }
|
||||||
guard !release.prerelease else { return }
|
guard !release.prerelease else { return }
|
||||||
let latestVersion = SemVer(release.name)
|
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 {
|
if latestVersion > currentVersion {
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.update = release
|
self.update = release
|
||||||
@ -158,7 +158,11 @@ extension Release {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public var minimumOSVersion: SemVer {
|
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..<body.endIndex) else { return SemVer("11.0.0") }
|
||||||
|
let numbersEnd = body.rangeOfCharacter(from: CharacterSet.whitespacesAndNewlines, options: [], range: numberStart.upperBound..<body.endIndex)?.lowerBound ?? body.endIndex
|
||||||
|
let version = numberStart.lowerBound..<numbersEnd
|
||||||
|
return SemVer(String(body[version]))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,54 +18,70 @@ class ReleaseParsingTests: XCTestCase {
|
|||||||
XCTAssert(release.minimumOSVersion == SemVer("11.0.0"))
|
XCTAssert(release.minimumOSVersion == SemVer("11.0.0"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testOSPresent() {
|
func testOSPresentWithContentBelow() {
|
||||||
let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update Requires macOS 11.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\n1.2.3\nBuild info")
|
||||||
XCTAssert(release.minimumOSVersion == SemVer("11.0.0"))
|
XCTAssert(release.minimumOSVersion == SemVer("1.2.3"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func testOSPresentAtEnd() {
|
||||||
|
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.2.3"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testOSGreaterThanMinimum() {
|
func testOSGreaterThanMinimum() {
|
||||||
let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update")
|
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("11.0.0"))
|
XCTAssert(release.minimumOSVersion < SemVer("11.0.0"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testOSEqualToMinimum() {
|
func testOSEqualToMinimum() {
|
||||||
let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update")
|
let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update Minimum macOS Version: 11.2.3")
|
||||||
XCTAssert(release.minimumOSVersion <= SemVer("11.0.0"))
|
XCTAssert(release.minimumOSVersion <= SemVer("11.2.3"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testOSLessThanMinimum() {
|
func testOSLessThanMinimum() {
|
||||||
let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update")
|
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("10.0.0"))
|
XCTAssert(release.minimumOSVersion > SemVer("1.0.0"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testGreatestSelectedIfOldPatchIsPublishedLater() {
|
func testGreatestSelectedIfOldPatchIsPublishedLater() {
|
||||||
// If 2.x.x series has been published, and a patch for 1.x.x is issued
|
// 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.
|
// 2.x.x should still be selected if user can run it.
|
||||||
let updater = Updater(checkOnLaunch: false, osVersion: SemVer("10.0.0"))
|
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!")
|
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 = [
|
let releases = [
|
||||||
Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release"),
|
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"),
|
Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes Minimum macOS Version: 1.2.3"),
|
||||||
two,
|
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)
|
updater.evaluate(releases: releases)
|
||||||
XCTAssert(updater.update == two)
|
DispatchQueue.main.async {
|
||||||
|
XCTAssert(updater.update == two)
|
||||||
|
expectation.fulfill()
|
||||||
|
}
|
||||||
|
wait(for: [expectation], timeout: 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testLatestVersionIsRunnable() {
|
func testLatestVersionIsRunnable() {
|
||||||
// If the 2.x.x series has been published but the user can't run it
|
// 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.
|
// the last version the user can run should be selected.
|
||||||
let updater = Updater(checkOnLaunch: false, osVersion: SemVer("10.0.0"))
|
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!")
|
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 = [
|
let releases = [
|
||||||
Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release"),
|
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"),
|
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!"),
|
Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available! Minimum macOS Version: 2.2.3"),
|
||||||
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 expectation = XCTestExpectation()
|
||||||
updater.evaluate(releases: releases)
|
updater.evaluate(releases: releases)
|
||||||
XCTAssert(updater.update == oneOhTwo)
|
DispatchQueue.main.async {
|
||||||
|
XCTAssert(updater.update == oneOhTwo)
|
||||||
|
expectation.fulfill()
|
||||||
|
}
|
||||||
|
wait(for: [expectation], timeout: 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testSorting() {
|
func testSorting() {
|
||||||
|
@ -37,6 +37,11 @@ class SemVerTests: XCTestCase {
|
|||||||
XCTAssert(current.versionNumbers == [1, 1, 0])
|
XCTAssert(current.versionNumbers == [1, 1, 0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testGarbage() {
|
||||||
|
let current = SemVer("Test")
|
||||||
|
XCTAssert(current.versionNumbers == [0, 0, 0])
|
||||||
|
}
|
||||||
|
|
||||||
func testBeta() {
|
func testBeta() {
|
||||||
let current = SemVer("1.0.2")
|
let current = SemVer("1.0.2")
|
||||||
let new = SemVer("1.1.0_beta1")
|
let new = SemVer("1.1.0_beta1")
|
||||||
|
Loading…
Reference in New Issue
Block a user