From 55397d3bc55996af7c2ea25233c0ec3e903e94c0 Mon Sep 17 00:00:00 2001 From: Omar Pedraza Date: Fri, 18 May 2018 17:30:42 +0200 Subject: [PATCH] Allow version with less than three components --- Sources/Version.swift | 16 +++++++++------- Tests/LXSemVerTests.swift | 19 ++++++++++++++++--- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Sources/Version.swift b/Sources/Version.swift index 901f73b..b617aed 100644 --- a/Sources/Version.swift +++ b/Sources/Version.swift @@ -21,11 +21,9 @@ // SOFTWARE. func versionComponentFromCharacters(_ characters: Substring) -> UInt? { - var component: UInt? = nil + var component: UInt? if characters.count > 0 { - if let firstCharacter = characters.first, firstCharacter != "0" || characters.count == 1 { - component = UInt(String(characters)) - } + component = UInt(characters) } return component @@ -53,12 +51,16 @@ public struct Version { let versionEndIndex = prereleaseStartIndex ?? buildMetadataStartIndex ?? string.endIndex let versionCharacters = string.prefix(upTo: versionEndIndex) - var versionComponents = versionCharacters.split(separator: ".", maxSplits: 2, omittingEmptySubsequences: false).compactMap(versionComponentFromCharacters) - - guard versionComponents.count == 3 else { + guard versionCharacters.count > 0, versionCharacters.last != "." else { + // If a negative number is present in version components, version characters will be empty or will finish with a dot return nil } + var versionComponents = versionCharacters.split(separator: ".", maxSplits: 2, omittingEmptySubsequences: false).compactMap(versionComponentFromCharacters) + while versionComponents.count < 3 { + versionComponents.append(0) + } + var prerelease: DotSeparatedValues? if let prereleaseStartIndex = prereleaseStartIndex { let prereleaseEndIndex = buildMetadataStartIndex ?? string.endIndex diff --git a/Tests/LXSemVerTests.swift b/Tests/LXSemVerTests.swift index dcbc8f2..9de0d48 100644 --- a/Tests/LXSemVerTests.swift +++ b/Tests/LXSemVerTests.swift @@ -142,11 +142,24 @@ class VersionTests: XCTestCase { XCTAssertEqual(UInt("1")!, 1) XCTAssertNotNil(Version(string: "1.0.0")) - XCTAssertNil(Version(string: "01.0.0")) + XCTAssertNotNil(Version(string: "01.0.0")) + XCTAssertEqual(Version(string: "1.0.0"), Version(string: "01.0.0")) + XCTAssertNotNil(Version(string: "1.5.0")) - XCTAssertNil(Version(string: "1.05.0")) + XCTAssertNotNil(Version(string: "1.05.0")) + XCTAssertEqual(Version(string: "1.5.0"), Version(string: "1.05.0")) + XCTAssertNotNil(Version(string: "0.1.7")) - XCTAssertNil(Version(string: "0.1.007")) + XCTAssertNotNil(Version(string: "0.1.007")) + XCTAssertEqual(Version(string: "0.1.7"), Version(string: "0.1.007")) + + XCTAssertNil(Version(string: "")) + + XCTAssertNotNil(Version(string: "1.29")) + XCTAssertEqual(Version(string: "1.29"), Version(string: "1.29.0")) + + XCTAssertNotNil(Version(string: "1")) + XCTAssertEqual(Version(string: "1"), Version(string: "1.0.0")) XCTAssertNotNil(Version(string: "1.1.1")) XCTAssertNil(Version(string: "-1.1.1"))