// Piper selbst laeuft hier nicht - das Programm gibt es nur im Hub. Geprueft // wird, was vorher mit dem fremden Text passiert. import { test } from 'node:test'; import assert from 'node:assert/strict'; import { piperFehlt, sprechen, stimmenPfad, textFuerPiper } from './piper.ts'; test('Zeilenumbrueche werden zu Leerzeichen, sonst liest Piper zwei Durchlaeufe', () => { assert.equal(textFuerPiper('Hallo\nWelt\r\nwie gehts'), 'Hallo Welt wie gehts'); }); test('Steuerzeichen fliegen raus, Umlaute und Emoji bleiben', () => { assert.equal(textFuerPiper('Grüße\u0007 aus\u0000 Köln 🎉'), 'Grüße aus Köln 🎉'); }); test('leerer Text wird gar nicht erst gesprochen', async () => { await assert.rejects(sprechen(' \n ', { model: '/gibt/es/nicht.onnx' }), /kein Text/); }); test('fehlendes Programm meldet sich als Fehler statt als Stille', async () => { await assert.rejects( sprechen('Hallo', { binary: '/gibt/es/nicht/piper', model: '/gibt/es/nicht.onnx' }), /Piper nicht startbar/, ); }); test('piperFehlt nennt Programm und Stimme', () => { const fehlt = piperFehlt({ binary: '/gibt/es/nicht/piper', model: '/gibt/es/nicht.onnx' }); assert.equal(fehlt.length, 2); }); test('Stimmenname wird zum Pfad im Modellordner, ein absoluter Pfad bleibt', () => { assert.match(stimmenPfad('de_DE-thorsten-medium'), /piper[\\/]de_DE-thorsten-medium\.onnx$/); const abs = process.platform === 'win32' ? 'C:\\x\\s.onnx' : '/x/s.onnx'; assert.equal(stimmenPfad(abs), abs); });