profileShare

rasmusjy / voicetask

Read-only snapshot

No repository description.

main default branch 105 files Expires Sep 13, 2026, 9:06 AM
tts.test.ts 1,000 bytes
1 import { describe, expect, it } from 'vitest'
2 import { selectVoice } from './tts'
3
4 function makeVoice(
5 name: string,
6 lang: string,
7 options: { default?: boolean } = {},
8 ): SpeechSynthesisVoice {
9 return {
10 default: options.default ?? false,
11 lang,
12 localService: true,
13 name,
14 voiceURI: `${name}-${lang}`,
15 }
16 }
17
18 describe('selectVoice', () => {
19 it('prefers a voice matching the browser locale', () => {
20 const voices = [
21 makeVoice('English default', 'en-US', { default: true }),
22 makeVoice('Estonian', 'et-EE'),
23 ]
24
25 expect(selectVoice(voices, 'et-EE')?.name).toBe('Estonian')
26 })
27
28 it('uses a default voice when no locale matches', () => {
29 const voices = [
30 makeVoice('German', 'de-DE'),
31 makeVoice('English default', 'en-US', { default: true }),
32 ]
33
34 expect(selectVoice(voices, 'et-EE')?.name).toBe('English default')
35 })
36
37 it('returns null for an empty voice list', () => {
38 expect(selectVoice([], 'et-EE')).toBeNull()
39 })
40 })
41