mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-06 08:55:34 +00:00
100 lines
4.4 KiB
Swift
100 lines
4.4 KiB
Swift
//
|
|
// Migrations.swift
|
|
// KeymanEngineTests
|
|
//
|
|
// Created by Joshua Horton on 2/20/20.
|
|
// Copyright © 2020 SIL International. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
@testable import KeymanEngine
|
|
|
|
import XCTest
|
|
|
|
extension TestUtils {
|
|
enum Migrations {
|
|
// Important locations within Migration-test .bundles
|
|
// Generate these from the Application folder.
|
|
static let documentsFolder = "Documents"
|
|
|
|
// Generate these from the AppGroup.
|
|
static let baseFolder = "Library/keyman" // in the AppGroup context, 'keyman' may be a sibling
|
|
// folder to 'Library'.
|
|
static let userDefaults = "Library/Preferences/group.KM4I.plist"
|
|
|
|
// Bundle references
|
|
static let simple_13 = TestUtils.findSubBundle(forResource: "Simple 13.0 Migration", ofType: ".bundle")
|
|
static let cloud_to_kmp_13 = TestUtils.findSubBundle(forResource: "13.0 Cloud to Package Migration", ofType: ".bundle")
|
|
static let simple_12 = TestUtils.findSubBundle(forResource: "Simple 12.0 Migration", ofType: ".bundle")
|
|
static let adhoc_12 = TestUtils.findSubBundle(forResource: "12.0 Ad-hoc Migration", ofType: ".bundle")
|
|
static let simple_10 = TestUtils.findSubBundle(forResource: "Simple 10.0 Migration", ofType: ".bundle")
|
|
static let noDefault_10 = TestUtils.findSubBundle(forResource: "No-defaults 10.0 Migration", ofType: ".bundle")
|
|
static let noDefault_14 = TestUtils.findSubBundle(forResource: "No-defaults early 14.0", ofType: "bundle")
|
|
static let simple_14 = TestUtils.findSubBundle(forResource: "Early 14.0 with defaults", ofType: "bundle")
|
|
|
|
// The default keyboard in version 10.0.
|
|
static let european2_font = Font(family: "LatinWeb", source: ["DejaVuSans.ttf"], size: nil)
|
|
static let european2 = InstallableKeyboard(id: "european2",
|
|
name: "EuroLatin2 Keyboard",
|
|
languageID: "en",
|
|
languageName: "English",
|
|
version: "1.6",
|
|
isRTL: false,
|
|
font: european2_font,
|
|
oskFont: nil,
|
|
isCustom: false)
|
|
|
|
static func applyBundleToFileSystem(_ bundle: Bundle, storage: Storage = Storage.active) {
|
|
let fileManager = FileManager.default
|
|
let bundlePath = URL(fileURLWithPath: bundle.resourcePath!)
|
|
|
|
let documentsSource = bundlePath.appendingPathComponent(documentsFolder)
|
|
let documentsDestination = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
|
|
|
|
let baseSource = bundlePath.appendingPathComponent(baseFolder)
|
|
let baseDestination = fileManager.urls(for: .libraryDirectory,
|
|
in: .userDomainMask)[0]
|
|
.appendingPathComponent("keyman")
|
|
|
|
do {
|
|
// Avoid .replaceItemAt - it'll remove the files from the source Bundle!
|
|
if fileManager.fileExists(atPath: documentsSource.path) {
|
|
if fileManager.fileExists(atPath: documentsDestination.path) {
|
|
try fileManager.removeItem(at: documentsDestination)
|
|
}
|
|
try fileManager.copyItem(at: documentsSource, to: documentsDestination)
|
|
}
|
|
if fileManager.fileExists(atPath: baseDestination.path) {
|
|
try fileManager.removeItem(at: baseDestination)
|
|
}
|
|
|
|
try fileManager.copyItem(at: baseSource, to: baseDestination)
|
|
} catch {
|
|
XCTFail("Could not properly set the state for a migration test: \(error)")
|
|
}
|
|
|
|
let userDefaultsSource = bundlePath.appendingPathComponent(userDefaults)
|
|
if fileManager.fileExists(atPath: userDefaultsSource.path) {
|
|
do {
|
|
try TestUtils.UserDefaults.setFromPlist(atPath: userDefaultsSource.path, for: storage)
|
|
} catch {
|
|
XCTFail("Could not transfer saved-state UserDefaults for a migration test: \(error)")
|
|
}
|
|
}
|
|
}
|
|
|
|
static func getVersionHistory(for version: Version) -> [AnyLanguageResourceFullID] {
|
|
let resourceHistory = KeymanEngine.Migrations.resourceHistory
|
|
|
|
let match: [[AnyLanguageResourceFullID]] = resourceHistory.compactMap() { entry in
|
|
if entry.version == version {
|
|
return entry.resources
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
return match[0]
|
|
}
|
|
}
|
|
}
|