diff --git a/ios/engine/KMEI/KeymanEngineTests/AssociatingPackageInstallerTests.swift b/ios/engine/KMEI/KeymanEngineTests/AssociatingPackageInstallerTests.swift index 3ac03b6077..3ca58e6056 100644 --- a/ios/engine/KMEI/KeymanEngineTests/AssociatingPackageInstallerTests.swift +++ b/ios/engine/KMEI/KeymanEngineTests/AssociatingPackageInstallerTests.swift @@ -325,4 +325,35 @@ class AssociatingPackageInstallerTests: XCTestCase { XCTAssertNil(Storage.active.userDefaults.userKeyboards) XCTAssertNil(Storage.active.userDefaults.userLexicalModels) } + + func testPackageLanguageMismatch() throws { + guard let strPackage = try ResourceFileManager.shared.prepareKMPInstall(from: TestUtils.Keyboards.fvSencotenKMP) as? KeyboardKeymanPackage else { + XCTFail() + return + } + + guard let eurolatinPackage = try ResourceFileManager.shared.prepareKMPInstall(from: TestUtils.Keyboards.silEuroLatinKMP) as? KeyboardKeymanPackage else { + XCTFail() + return + } + + let strInstaller = AssociatingPackageInstaller(for: strPackage, + defaultLanguageCode: "str", // correct code: str-latn + downloadManager: downloadManager) { _ in + } + + // Package does not contain "str", but does contain "str-latn" + XCTAssertEqual(strInstaller.defaultLgCode, "str-latn") + + let eurolatinInstaller = AssociatingPackageInstaller(for: eurolatinPackage, + defaultLanguageCode: "en-fake-bcp", // correct code: "en" + downloadManager: downloadManager) { _ in + } + + // Package does not contain "en-fake-bcp", but does contain "en". + XCTAssertEqual(eurolatinInstaller.defaultLgCode, "en") + + // Note: the current naive approach isn't exactly BCP-47 subtag aware - it relies on one tag + // containing the entire other tag as a substring. + } } diff --git a/ios/engine/KMEI/KeymanEngineTests/TestUtils/Keyboards.swift b/ios/engine/KMEI/KeymanEngineTests/TestUtils/Keyboards.swift index 041cd8b7a1..065b8fd476 100644 --- a/ios/engine/KMEI/KeymanEngineTests/TestUtils/Keyboards.swift +++ b/ios/engine/KMEI/KeymanEngineTests/TestUtils/Keyboards.swift @@ -13,6 +13,7 @@ extension TestUtils { enum Keyboards { static let khmerAngkorKMP = TestUtils.keyboardsBundle.url(forResource: "khmer_angkor", withExtension: "kmp")! static let silEuroLatinKMP = TestUtils.keyboardsBundle.url(forResource: "sil_euro_latin", withExtension: "kmp")! + static let fvSencotenKMP = TestUtils.keyboardsBundle.url(forResource: "fv_sencoten", withExtension: "kmp")! static let khmer_angkor = InstallableKeyboard(id: "khmer_angkor", name: "Khmer Angkor", @@ -43,5 +44,15 @@ extension TestUtils { font: Font(family: "LatinWeb", source: ["DejaVuSans.ttf"], size: nil), oskFont: nil, isCustom: false) + + static let fv_sencoten = InstallableKeyboard(id: "fv_sencoten", + name: "SENĆOŦEN", + languageID: "str-latn", + languageName: "Salish, Straits (Latin)", + version: "9.1", + isRTL: false, + font: nil, + oskFont: nil, + isCustom: false) } }