TranscripteurVoskTest.kt 104 lignes · 3101 octets
package fr.ebii.card2vcf.audio

import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
import kotlin.test.assertTrue

/**
 * Tests JVM des méthodes de parsing JSON de Vosk et du fake.
 * N'instancie pas TranscripteurVosk (nécessite un Context Android + lib native).
 */
class TranscripteurVoskTest {

    // --- Parsing "partial" ---

    @Test
    fun parsagePartielNormal() {
        val json = """{"partial":"bonjour le"}"""
        assertEquals("bonjour le", TranscripteurVosk.parsagePartiel(json))
    }

    @Test
    fun parsagePartielAvecEspaces() {
        val json = """{ "partial" : "comment allez vous" }"""
        assertEquals("comment allez vous", TranscripteurVosk.parsagePartiel(json))
    }

    @Test
    fun parsagePartielVideRetourneNull() {
        val json = """{"partial":""}"""
        assertNull(TranscripteurVosk.parsagePartiel(json))
    }

    @Test
    fun parsagePartielJsonInvalidRetourneNull() {
        assertNull(TranscripteurVosk.parsagePartiel("not json at all"))
        assertNull(TranscripteurVosk.parsagePartiel(""))
        assertNull(TranscripteurVosk.parsagePartiel("{}"))
    }

    // --- Parsing "text" (résultat final) ---

    @Test
    fun parsageTexteFinal() {
        val json = """{"text":"bonjour le monde"}"""
        assertEquals("bonjour le monde", TranscripteurVosk.parsageTexte(json))
    }

    @Test
    fun parsageTexteVide() {
        val json = """{"text":""}"""
        assertEquals("", TranscripteurVosk.parsageTexte(json))
    }

    @Test
    fun parsageTexteJsonInvalidRetourneVide() {
        assertEquals("", TranscripteurVosk.parsageTexte("not json"))
        assertEquals("", TranscripteurVosk.parsageTexte(""))
    }

    @Test
    fun parsageTexteAvecChampsSupplementaires() {
        // Vosk peut renvoyer des champs supplémentaires (résultats détaillés)
        val json = """{"result":[],"text":"merci beaucoup"}"""
        assertEquals("merci beaucoup", TranscripteurVosk.parsageTexte(json))
    }

    // --- Fake ---

    @Test
    fun fakeDisponibleParDefaut() {
        val fake = TranscripteurLocalFake()
        assertEquals(TranscripteurLocal.Etat.DISPONIBLE, fake.etat)
    }

    @Test
    fun fakeIndisponible() {
        val fake = TranscripteurLocalFake(disponible = false)
        assertEquals(TranscripteurLocal.Etat.INDISPONIBLE, fake.etat)
    }

    @Test
    fun fakeAccepteEchantillons() {
        val fake = TranscripteurLocalFake()
        assertNull(fake.accepterEchantillons(ShortArray(160), 160))
        assertNull(fake.accepterEchantillons(ShortArray(160), 160))
        assertEquals(2, fake.nombreBuffersRecus())
    }

    @Test
    fun fakeFinaliserRetourneTexte() {
        val fake = TranscripteurLocalFake()
        assertEquals("transcription simulée", fake.finaliser())
    }

    @Test
    fun fakeReinitialiser() {
        val fake = TranscripteurLocalFake()
        fake.accepterEchantillons(ShortArray(100), 100)
        fake.reinitialiser()
        assertTrue(fake.reinitialiseAppele)
        assertEquals(0, fake.nombreBuffersRecus())
    }
}