TesseractModelesTest.kt
66 lignes · 2036 octets
package fr.ebii.card2vcf.ocr import android.content.Context import androidx.test.core.app.ApplicationProvider import fr.ebii.card2vcf.modeles.PreferencesModeles import org.junit.Before import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import java.io.File import kotlin.test.Test import kotlin.test.assertEquals /** * Résolution des modèles OCR : quelles langues sont réellement chargeables. * * Le cas « aucun modèle installé » est couvert par TesseractModelesAbsentsTest, * dans la source set `testFdroid` — la saveur `direct` embarque ses traineddata. */ @RunWith(RobolectricTestRunner::class) @Config(sdk = [31]) class TesseractModelesTest { private lateinit var context: Context private lateinit var prefs: PreferencesModeles @Before fun setUp() { context = ApplicationProvider.getApplicationContext() context.filesDir.deleteRecursively() prefs = PreferencesModeles(context) } private fun poserModele(langue: String) { val dossier = File(context.filesDir, "tesseract/tessdata").apply { mkdirs() } File(dossier, "$langue.traineddata").writeBytes(ByteArray(20_000)) } private fun moteur() = TesseractOcrEngine(context, prefs) @Test fun `les deux langues par defaut sont chargees quand elles sont la`() { poserModele("fra") poserModele("eng") assertEquals(listOf("fra", "eng"), moteur().languesActives()) } @Test fun `la selection de l'utilisateur pilote les langues chargees`() { poserModele("fra") poserModele("deu") prefs.setLanguesSelectionnees(setOf("deu")) assertEquals(listOf("deu"), moteur().languesActives()) } @Test fun `l'ordre suit le catalogue et non l'ordre de selection`() { poserModele("pol") poserModele("fra") prefs.setLanguesSelectionnees(setOf("pol", "fra")) assertEquals(listOf("fra", "pol"), moteur().languesActives()) } }
GitRust