You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.2 KiB
86 lines
3.2 KiB
import { describe, expect, it } from 'vitest' |
|
import { |
|
EXTRA_READ_ALOUD_PIPER_VOICE, |
|
getPiperVoiceForChosenLanguage, |
|
TRINITY_PIPER_VOICE |
|
} from '@/lib/trinity-languages' |
|
|
|
describe('getPiperVoiceForChosenLanguage', () => { |
|
it('uses native Piper for trinity codes', () => { |
|
const r = getPiperVoiceForChosenLanguage('de') |
|
expect(r.voice).toBe(TRINITY_PIPER_VOICE.de) |
|
expect(r.usedEnglishVoiceFallback).toBe(false) |
|
expect(r.usedRelatedVoiceFallback).toBe(false) |
|
expect(r.piperProfileCode).toBe('de') |
|
}) |
|
|
|
it('uses English Piper for Japanese and Korean (no native ja/ko voices)', () => { |
|
const ja = getPiperVoiceForChosenLanguage('ja') |
|
expect(ja.voice).toBe(TRINITY_PIPER_VOICE.en) |
|
expect(ja.usedEnglishVoiceFallback).toBe(true) |
|
expect(ja.usedRelatedVoiceFallback).toBe(false) |
|
expect(ja.piperProfileCode).toBe('en') |
|
|
|
const ko = getPiperVoiceForChosenLanguage('ko') |
|
expect(ko.voice).toBe(TRINITY_PIPER_VOICE.en) |
|
expect(ko.usedEnglishVoiceFallback).toBe(true) |
|
expect(ko.piperProfileCode).toBe('en') |
|
}) |
|
|
|
it('routes Ukrainian to Russian Piper', () => { |
|
const r = getPiperVoiceForChosenLanguage('uk') |
|
expect(r.voice).toBe(TRINITY_PIPER_VOICE.ru) |
|
expect(r.usedRelatedVoiceFallback).toBe(true) |
|
expect(r.piperProfileCode).toBe('ru') |
|
}) |
|
|
|
it('uses native Portuguese Piper for pt', () => { |
|
const r = getPiperVoiceForChosenLanguage('pt') |
|
expect(r.voice).toBe(EXTRA_READ_ALOUD_PIPER_VOICE.pt) |
|
expect(r.usedEnglishVoiceFallback).toBe(false) |
|
expect(r.usedRelatedVoiceFallback).toBe(false) |
|
expect(r.piperProfileCode).toBe('pt') |
|
}) |
|
|
|
it('uses native Italian Piper for it', () => { |
|
const r = getPiperVoiceForChosenLanguage('it') |
|
expect(r.voice).toBe(EXTRA_READ_ALOUD_PIPER_VOICE.it) |
|
expect(r.usedRelatedVoiceFallback).toBe(false) |
|
expect(r.piperProfileCode).toBe('it') |
|
}) |
|
|
|
it('routes Dutch-adjacent tags to German when not trinity native', () => { |
|
const r = getPiperVoiceForChosenLanguage('gsw') |
|
expect(r.voice).toBe(TRINITY_PIPER_VOICE.de) |
|
expect(r.usedRelatedVoiceFallback).toBe(true) |
|
}) |
|
|
|
it('uses native Arabic Piper when base is Arabic', () => { |
|
const r = getPiperVoiceForChosenLanguage('ar') |
|
expect(r.voice).toBe(EXTRA_READ_ALOUD_PIPER_VOICE.ar) |
|
expect(r.usedEnglishVoiceFallback).toBe(false) |
|
expect(r.usedRelatedVoiceFallback).toBe(false) |
|
expect(r.piperProfileCode).toBe('ar') |
|
}) |
|
|
|
it('uses British Piper for en-gb before base en would pick US', () => { |
|
const r = getPiperVoiceForChosenLanguage('en-gb') |
|
expect(r.voice).toBe(EXTRA_READ_ALOUD_PIPER_VOICE['en-gb']) |
|
expect(r.piperProfileCode).toBe('en-gb') |
|
expect(r.usedEnglishVoiceFallback).toBe(false) |
|
}) |
|
|
|
it('uses Arabic Piper for regional Arabic tags', () => { |
|
const r = getPiperVoiceForChosenLanguage('ar-SA') |
|
expect(r.voice).toBe(EXTRA_READ_ALOUD_PIPER_VOICE.ar) |
|
expect(r.piperProfileCode).toBe('ar') |
|
}) |
|
|
|
it('falls back to English Piper for unmapped languages', () => { |
|
const r = getPiperVoiceForChosenLanguage('hi') |
|
expect(r.voice).toBe(TRINITY_PIPER_VOICE.en) |
|
expect(r.usedEnglishVoiceFallback).toBe(true) |
|
expect(r.usedRelatedVoiceFallback).toBe(false) |
|
expect(r.piperProfileCode).toBe('en') |
|
}) |
|
})
|
|
|