mirror of
				https://github.com/maxgoedjen/secretive.git
				synced 2025-11-04 09:20:56 +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)
 | 
				
			||||||
 | 
					        DispatchQueue.main.async {
 | 
				
			||||||
            XCTAssert(updater.update == two)
 | 
					            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)
 | 
				
			||||||
 | 
					        DispatchQueue.main.async {
 | 
				
			||||||
            XCTAssert(updater.update == oneOhTwo)
 | 
					            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