spiegel-keyman/ios/engine/KMEI/KeymanEngineTests/VersionTests.swift

108 lines
3.4 KiB
Swift

//
// VersionTests.swift
// KeymanEngineTests
//
// Created by Joshua Horton on 2020-02-13.
// Copyright © 2020 SIL International. All rights reserved.
//
@testable import KeymanEngine
import XCTest
class VersionTests: XCTestCase {
func testStringConstruction() {
let simpleEarly = Version("11.0")
XCTAssertNotNil(simpleEarly, "Could not construct Version instance from a simple major-minor version string")
let complexEarly = Version("11.0.65.17.8")
XCTAssertNotNil(complexEarly, "Could not process the version string '11.0.65.17.8'")
let broken = Version("apple.orange")
XCTAssertNil(broken, "Erroneously constructed Version instance from character-text strings")
let tagged = Version("14.0.18-alpha-local")
XCTAssertNotNil(tagged, "Could not construct Verison instance from a text-tagged version string")
XCTAssertTrue(tagged! == Version("14.0.18")!, "Did not produce expected version from text-tagged version string")
XCTAssertEqual(tagged!.tier, .alpha, "Did not properly store a tagged version's tier information")
}
func testVersionComparison() {
// Simple unit testing for version-comparison logic.
let simpleEarly = Version("11.0")!
let simpleLate = Version("13.0")!
XCTAssertLessThan(simpleEarly, simpleLate)
let complexEarly1 = Version("11.0.65")!
let complexEarly2 = Version("11.1.1")!
XCTAssertLessThan(complexEarly1, complexEarly2)
let complexLate1 = Version("13.0.1")!
XCTAssertLessThan(complexEarly2, complexLate1)
XCTAssertLessThan(simpleLate, complexLate1)
let simpleLater = Version("13.1")!
XCTAssertLessThan(complexLate1, simpleLater)
}
func testMajorMinor() {
let simple = Version("12")!
XCTAssertTrue(simple.majorMinor == Version("12.0")!, "Did not append .minor to major-only version")
let complex = Version("11.0.65.17.8")!
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"))
// 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() {
let version = Version.current
// The key is that it always returns a version value; this is the most likely 'big break' we may see.
XCTAssertNotNil(version, "Could not construct a valid version from value in bundle's plist file")
// Now that we update KeymanEngine's version too, we can rely on its versioning.
// This was implemented in very early 14.0 development.
//
// So long as we don't change the actual _project's_ version, this test proves that Versions
// are being updated correctly by the build process.
let minimumEngineVersion = Version("14.0")!
XCTAssertGreaterThan(version, minimumEngineVersion, "Build process did not properly update Engine version")
}
}