TranscripteurVoskDisponibiliteTest.kt 50 lignes · 1658 octets
package fr.ebii.card2vcf.audio

import android.content.Context
import androidx.test.core.app.ApplicationProvider
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

/**
 * Détection de disponibilité du modèle vocal dans la saveur `fdroid`, qui n'embarque
 * aucun asset : seul un modèle téléchargé dans `filesDir` peut rendre Vosk disponible.
 *
 * Seul [TranscripteurVosk.etat] est sollicité — il ne touche pas la lib native.
 */
@RunWith(RobolectricTestRunner::class)
@Config(sdk = [31])
class TranscripteurVoskDisponibiliteTest {

    private lateinit var context: Context

    @Before
    fun setUp() {
        context = ApplicationProvider.getApplicationContext()
        context.filesDir.deleteRecursively()
    }

    @Test
    fun `sans modele telecharge le moteur vocal est indisponible`() {
        assertEquals(TranscripteurLocal.Etat.INDISPONIBLE, TranscripteurVosk(context).etat)
    }

    @Test
    fun `un modele decompresse dans filesDir rend le moteur disponible`() {
        File(context.filesDir, "vosk-model-small-fr-0.22/am").mkdirs()
        File(context.filesDir, "vosk-model-small-fr-0.22/am/final.mdl").writeText("modèle")

        assertEquals(TranscripteurLocal.Etat.DISPONIBLE, TranscripteurVosk(context).etat)
    }

    @Test
    fun `un dossier de modele vide ne suffit pas`() {
        File(context.filesDir, "vosk-model-small-fr-0.22").mkdirs()

        assertEquals(TranscripteurLocal.Etat.INDISPONIBLE, TranscripteurVosk(context).etat)
    }
}