From 483d583656584fe3b5c1298d8cfa6b80e96ff005 Mon Sep 17 00:00:00 2001 From: jahorton Date: Fri, 10 Jul 2020 13:36:48 +0700 Subject: [PATCH 1/2] fix(ios/engine): version equality --- .../KeymanEngine/Classes/Model/Version.swift | 20 +++++++++++++++- .../KMEI/KeymanEngineTests/VersionTests.swift | 23 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Model/Version.swift b/ios/engine/KMEI/KeymanEngine/Classes/Model/Version.swift index 32cc5c0f1b..77582fb2e8 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Model/Version.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Model/Version.swift @@ -124,7 +124,25 @@ public class Version: NSObject, Comparable { * (For example, 12.3.45 beta is considered equal to 12.3.45 stable.) */ public static func ==(lhs: Version, rhs: Version) -> Bool { - return lhs.components == rhs.components + var left = lhs.components + while(left.last == 0 && left.count > 0) { + left.removeLast() + } + + var right = rhs.components + while(right.last == 0 && right.count > 0) { + right.removeLast() + } + + return left.elementsEqual(right) + } + + public override func isEqual(_ object: Any?) -> Bool { + if let object = object as? Version { + return self == object + } else { + return false + } } // For nice logging output & debugger visibility. diff --git a/ios/engine/KMEI/KeymanEngineTests/VersionTests.swift b/ios/engine/KMEI/KeymanEngineTests/VersionTests.swift index f4396fa4e1..8a70f5c992 100644 --- a/ios/engine/KMEI/KeymanEngineTests/VersionTests.swift +++ b/ios/engine/KMEI/KeymanEngineTests/VersionTests.swift @@ -63,6 +63,29 @@ class VersionTests: XCTestCase { XCTAssertTrue(complex.majorMinor == Version("11.0")!, "Did not properly trim off excess version components") } + func testEquals() { + let simple = Version("12.0")! + let other = Version("12.0")! + + XCTAssertTrue(simple == other) + + let longer = Version("12.0.0.0")! + + XCTAssertTrue(simple == longer) + + let unequal_1 = Version("12.0.0.1")! + + XCTAssertFalse(simple == unequal_1) + XCTAssertFalse(longer == unequal_1) + + let diffMajor = Version("13.0")! + + XCTAssertFalse(simple == diffMajor) + + // Tests in "optional" mode. Was trickier than it would appear! + XCTAssertEqual(Version("12.0"), Version("12.0")) + } + func testValidCurrentEngineVersion() { let version = Version.current From 8c3812157117a8c101826550fb8782d16da4eb20 Mon Sep 17 00:00:00 2001 From: jahorton Date: Mon, 13 Jul 2020 08:20:18 +0700 Subject: [PATCH 2/2] feat(ios/engine): version edge-case test asserts --- ios/engine/KMEI/KeymanEngineTests/VersionTests.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ios/engine/KMEI/KeymanEngineTests/VersionTests.swift b/ios/engine/KMEI/KeymanEngineTests/VersionTests.swift index 8a70f5c992..1ff804a269 100644 --- a/ios/engine/KMEI/KeymanEngineTests/VersionTests.swift +++ b/ios/engine/KMEI/KeymanEngineTests/VersionTests.swift @@ -84,6 +84,11 @@ class VersionTests: XCTestCase { // Tests in "optional" mode. Was trickier than it would appear! XCTAssertEqual(Version("12.0"), Version("12.0")) + + // Some tests against major-version zero to ensure the edge case is covered. + XCTAssertEqual(Version("0"), Version("0")) + XCTAssertEqual(Version("0"), Version("0.0")) + XCTAssertNotEqual(Version("0"), Version("0.0.1")) } func testValidCurrentEngineVersion() {