mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 16:35:33 +00:00
92 lines
3.1 KiB
Swift
92 lines
3.1 KiB
Swift
//
|
|
// UserDefaults.swift
|
|
// KeymanEngineTests
|
|
//
|
|
// Created by Joshua Horton on 2/19/20.
|
|
// Copyright © 2020 SIL International. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import XCTest
|
|
@testable import KeymanEngine
|
|
|
|
extension TestUtils {
|
|
class UserDefaults {
|
|
static func getAndResetDictionary(from storage: Storage) -> [String: Any] {
|
|
let userDefaults = storage.userDefaults
|
|
var currentDictionary = userDefaults.dictionaryRepresentation()
|
|
clear(from: storage)
|
|
let baseDict = userDefaults.dictionaryRepresentation()
|
|
|
|
baseDict.forEach({ pair in
|
|
currentDictionary.removeValue(forKey: pair.key)
|
|
})
|
|
|
|
return currentDictionary
|
|
}
|
|
|
|
static func addDictionary(_ dictionary: [String: Any], storage: Storage) {
|
|
//userDefaults.register(defaults: currentDictionary) // adds them in an unclearable way!
|
|
dictionary.forEach({ pair in
|
|
storage.userDefaults.set(pair.value, forKey: pair.key)
|
|
})
|
|
}
|
|
|
|
static func getDictionary(from storage: Storage) -> [String: Any] {
|
|
let currentDictionary = getAndResetDictionary(from: storage)
|
|
|
|
// The return value is now properly constructed. Now to put the defaults back in place before we leave.
|
|
addDictionary(currentDictionary, storage: storage)
|
|
return currentDictionary
|
|
}
|
|
|
|
static func clear(from storage: Storage) {
|
|
let userDefaults = storage.userDefaults
|
|
let domain = Bundle.main.bundleIdentifier!
|
|
userDefaults.synchronize()
|
|
userDefaults.removePersistentDomain(forName: domain)
|
|
}
|
|
|
|
static func addKeyboard(_ keyboard: InstallableKeyboard) {
|
|
// Lifted from Manager.addKeyboard
|
|
let userDefaults = Storage.active.userDefaults
|
|
var userKeyboards = userDefaults.userKeyboards ?? []
|
|
|
|
// Update keyboard if it exists
|
|
if let index = userKeyboards.firstIndex(where: { $0.fullID == keyboard.fullID }) {
|
|
userKeyboards[index] = keyboard
|
|
} else {
|
|
userKeyboards.append(keyboard)
|
|
}
|
|
|
|
userDefaults.userKeyboards = userKeyboards
|
|
}
|
|
|
|
static func addLexicalModel(_ lexicalModel: InstallableLexicalModel) {
|
|
// Lifted from Manager.addKeyboard
|
|
let userDefaults = Storage.active.userDefaults
|
|
var userModels = userDefaults.userLexicalModels ?? []
|
|
|
|
// Update keyboard if it exists
|
|
if let index = userModels.firstIndex(where: { $0.fullID == lexicalModel.fullID }) {
|
|
userModels[index] = lexicalModel
|
|
} else {
|
|
userModels.append(lexicalModel)
|
|
}
|
|
|
|
userDefaults.userLexicalModels = userModels
|
|
}
|
|
|
|
// Adapted from https://stackoverflow.com/a/39453212.
|
|
static func setFromPlist(atPath path: String, for storage: Storage) throws {
|
|
var propertyListFormat = PropertyListSerialization.PropertyListFormat.xml
|
|
let xml = FileManager.default.contents(atPath: path)!
|
|
|
|
let plistDict = try PropertyListSerialization.propertyList(from: xml, options: .mutableContainersAndLeaves, format: &propertyListFormat) as! [String: Any]
|
|
|
|
plistDict.forEach({key, value in
|
|
storage.userDefaults.set(value, forKey: key)
|
|
})
|
|
}
|
|
}
|
|
}
|