/* eslint-disable */ // TODO: Make these more compatible with eslint // Core test functions for txt2speech functionality const testTxt2SpeechBasicCore = async function() { // Test basic text-to-speech with simple text const result = await puter.ai.txt2speech("Hello, this is a test message."); // Check that result is an Audio object assert(result instanceof Audio, "txt2speech should return an Audio object"); assert(result !== null, "txt2speech should not return null"); // Check that Audio object has proper methods assert(typeof result.play === 'function', "result should have play method"); assert(typeof result.pause === 'function', "result should have pause method"); assert(typeof result.toString === 'function', "result should have toString method"); assert(typeof result.valueOf === 'function', "result should have valueOf method"); // Get the actual values to debug const toStringValue = result.toString(); const valueOfValue = result.valueOf(); const srcValue = result.src; // Check that toString() and valueOf() return strings assert(typeof toStringValue === 'string', `toString() should return a string, got: ${typeof toStringValue} with value: ${toStringValue}`); assert(typeof valueOfValue === 'string', `valueOf() should return a string, got: ${typeof valueOfValue} with value: ${valueOfValue}`); // Check that the URL is valid (could be blob: or data: or http:) assert(toStringValue.length > 0, "toString() should not return empty string"); assert(valueOfValue.length > 0, "valueOf() should not return empty string"); // Check that it's a valid URL format (blob:, data:, http:, or https:) const isValidUrl = toStringValue.startsWith('blob:') || toStringValue.startsWith('data:') || toStringValue.startsWith('http:') || toStringValue.startsWith('https:'); assert(isValidUrl, `toString() should return a valid URL, got: ${toStringValue}`); // Check that src is set and is a valid URL assert(typeof srcValue === 'string', "result should have src property as string"); assert(srcValue.length > 0, "src should not be empty"); // Verify toString() and valueOf() return the same value as src assert(toStringValue === srcValue, `toString() should return the same as src. toString(): ${toStringValue}, src: ${srcValue}`); assert(valueOfValue === srcValue, `valueOf() should return the same as src. valueOf(): ${valueOfValue}, src: ${srcValue}`); }; const testTxt2SpeechWithParametersCore = async function() { // Test text-to-speech with language and voice parameters const result = await puter.ai.txt2speech("Hello, this is a test with parameters.", "en-US", "Brian"); // Check that result is an Audio object assert(result instanceof Audio, "txt2speech should return an Audio object"); assert(result !== null, "txt2speech should not return null"); // Check that Audio object has proper methods assert(typeof result.play === 'function', "result should have play method"); assert(typeof result.pause === 'function', "result should have pause method"); assert(typeof result.toString === 'function', "result should have toString method"); assert(typeof result.valueOf === 'function', "result should have valueOf method"); // Get the actual values to debug const toStringValue = result.toString(); const valueOfValue = result.valueOf(); const srcValue = result.src; // Check that toString() and valueOf() return strings assert(typeof toStringValue === 'string', `toString() should return a string, got: ${typeof toStringValue} with value: ${toStringValue}`); assert(typeof valueOfValue === 'string', `valueOf() should return a string, got: ${typeof valueOfValue} with value: ${valueOfValue}`); // Check that the URL is valid (could be blob: or data: or http:) assert(toStringValue.length > 0, "toString() should not return empty string"); assert(valueOfValue.length > 0, "valueOf() should not return empty string"); // Check that it's a valid URL format const isValidUrl = toStringValue.startsWith('blob:') || toStringValue.startsWith('data:') || toStringValue.startsWith('http:') || toStringValue.startsWith('https:'); assert(isValidUrl, `toString() should return a valid URL, got: ${toStringValue}`); // Check that src is set and is a valid URL assert(typeof srcValue === 'string', "result should have src property as string"); assert(srcValue.length > 0, "src should not be empty"); // Verify toString() and valueOf() return the same value as src assert(toStringValue === srcValue, `toString() should return the same as src. toString(): ${toStringValue}, src: ${srcValue}`); assert(valueOfValue === srcValue, `valueOf() should return the same as src. valueOf(): ${valueOfValue}, src: ${srcValue}`); // Verify that different parameters produce different audio (comparing with basic call) const basicResult = await puter.ai.txt2speech("Hello, this is a test with parameters."); assert(result.src !== basicResult.src, "different parameters should produce different audio URLs"); }; const testTxt2SpeechWithTestModeCore = async function() { // Test text-to-speech with testMode enabled const result = await puter.ai.txt2speech("Hello, this is a test message.", "en-US", true); // Check that result is an Audio object (same structure in test mode) assert(result instanceof Audio, "txt2speech should return an Audio object in test mode"); assert(result !== null, "txt2speech should not return null in test mode"); // Check that Audio object has proper methods assert(typeof result.play === 'function', "result should have play method in test mode"); assert(typeof result.pause === 'function', "result should have pause method in test mode"); assert(typeof result.toString === 'function', "result should have toString method in test mode"); assert(typeof result.valueOf === 'function', "result should have valueOf method in test mode"); // Get the actual values to debug const toStringValue = result.toString(); const valueOfValue = result.valueOf(); const srcValue = result.src; // Check that toString() and valueOf() return strings assert(typeof toStringValue === 'string', `toString() should return a string in test mode, got: ${typeof toStringValue} with value: ${toStringValue}`); assert(typeof valueOfValue === 'string', `valueOf() should return a string in test mode, got: ${typeof valueOfValue} with value: ${valueOfValue}`); // Check that the URL is valid (could be blob: or data: or http:) assert(toStringValue.length > 0, "toString() should not return empty string in test mode"); assert(valueOfValue.length > 0, "valueOf() should not return empty string in test mode"); // Check that it's a valid URL format const isValidUrl = toStringValue.startsWith('blob:') || toStringValue.startsWith('data:') || toStringValue.startsWith('http:') || toStringValue.startsWith('https:'); assert(isValidUrl, `toString() should return a valid URL in test mode, got: ${toStringValue}`); // Check that src is set and is a valid URL assert(typeof srcValue === 'string', "result should have src property as string in test mode"); assert(srcValue.length > 0, "src should not be empty in test mode"); // Verify toString() and valueOf() return the same value as src assert(toStringValue === srcValue, `toString() should return the same as src in test mode. toString(): ${toStringValue}, src: ${srcValue}`); assert(valueOfValue === srcValue, `valueOf() should return the same as src in test mode. valueOf(): ${valueOfValue}, src: ${srcValue}`); }; const testTxt2SpeechWithOpenAIProviderCore = async function() { // Test OpenAI-based text-to-speech using test mode to avoid live requests const result = await puter.ai.txt2speech("Hello, this is an OpenAI provider test.", { provider: "openai", voice: "alloy" }, true); assert(result instanceof Audio, "txt2speech should return an Audio object for OpenAI provider"); assert(result !== null, "txt2speech should not return null for OpenAI provider"); const toStringValue = result.toString(); const valueOfValue = result.valueOf(); const srcValue = result.src; assert(typeof toStringValue === 'string', "toString() should return a string for OpenAI provider"); assert(typeof valueOfValue === 'string', "valueOf() should return a string for OpenAI provider"); assert(typeof srcValue === 'string', "src should be a string for OpenAI provider"); assert(toStringValue.length > 0, "toString() should not be empty for OpenAI provider"); assert(valueOfValue.length > 0, "valueOf() should not be empty for OpenAI provider"); assert(srcValue.length > 0, "src should not be empty for OpenAI provider"); assert(toStringValue === srcValue, "toString() should match src for OpenAI provider"); assert(valueOfValue === srcValue, "valueOf() should match src for OpenAI provider"); }; const testTxt2SpeechWithElevenLabsProviderCore = async function() { // Test ElevenLabs provider in test mode to avoid external calls const result = await puter.ai.txt2speech( "Hello, this is an ElevenLabs provider test.", { provider: "elevenlabs", voice: "21m00Tcm4TlvDq8ikWAM" }, true, ); assert(result instanceof Audio, "txt2speech should return an Audio object for ElevenLabs provider"); assert(result !== null, "txt2speech should not return null for ElevenLabs provider"); const toStringValue = result.toString(); const valueOfValue = result.valueOf(); const srcValue = result.src; assert(typeof toStringValue === 'string', "toString() should return a string for ElevenLabs provider"); assert(typeof valueOfValue === 'string', "valueOf() should return a string for ElevenLabs provider"); assert(typeof srcValue === 'string', "src should be a string for ElevenLabs provider"); assert(toStringValue.length > 0, "toString() should not be empty for ElevenLabs provider"); assert(valueOfValue.length > 0, "valueOf() should not be empty for ElevenLabs provider"); assert(srcValue.length > 0, "src should not be empty for ElevenLabs provider"); assert(toStringValue === srcValue, "toString() should match src for ElevenLabs provider"); assert(valueOfValue === srcValue, "valueOf() should match src for ElevenLabs provider"); }; // Export test functions window.txt2speechTests = [ { name: "testTxt2SpeechBasic", description: "Test basic text-to-speech functionality and verify Audio object structure", test: async function() { try { await testTxt2SpeechBasicCore(); pass("testTxt2SpeechBasic passed"); } catch (error) { fail("testTxt2SpeechBasic failed:", error); } } }, { name: "testTxt2SpeechWithParameters", description: "Test text-to-speech with language and voice parameters (en-US, Brian)", test: async function() { try { await testTxt2SpeechWithParametersCore(); pass("testTxt2SpeechWithParameters passed"); } catch (error) { fail("testTxt2SpeechWithParameters failed:", error); } } }, { name: "testTxt2SpeechWithTestMode", description: "Test text-to-speech with testMode enabled to verify test functionality", test: async function() { try { await testTxt2SpeechWithTestModeCore(); pass("testTxt2SpeechWithTestMode passed"); } catch (error) { fail("testTxt2SpeechWithTestMode failed:", error); } } }, { name: "testTxt2SpeechWithOpenAIProvider", description: "Test text-to-speech using the OpenAI provider in test mode", test: async function() { try { await testTxt2SpeechWithOpenAIProviderCore(); pass("testTxt2SpeechWithOpenAIProvider passed"); } catch (error) { fail("testTxt2SpeechWithOpenAIProvider failed:", error); } } }, { name: "testTxt2SpeechWithElevenLabsProvider", description: "Test text-to-speech using the ElevenLabs provider in test mode", test: async function() { try { await testTxt2SpeechWithElevenLabsProviderCore(); pass("testTxt2SpeechWithElevenLabsProvider passed"); } catch (error) { fail("testTxt2SpeechWithElevenLabsProvider failed:", error); } } } ];