From e20e41ed85f87fa9c7f5892cf79581d1201b78b8 Mon Sep 17 00:00:00 2001 From: Nathan Memmott Date: Tue, 18 Feb 2025 15:08:07 -0800 Subject: [PATCH] Translator: Echo empty string If the an empty string is passed to AITranslator.translate, then echo it back. This does two things: - Aligns with the spec more since it wants us to echo back any non-translatable content. - Fixes an issue where passing an empty string to translate causes us to reject the translate promise. Fixed: 392057205, 395120677 Change-Id: I05bda0c7b8b75145d9b9fd58183bdaf174e8dd95 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6245038 Commit-Queue: Nathan Memmott Reviewed-by: Ming-Ying Chung Cr-Commit-Position: refs/heads/main@{#1421657} --- ...ranslator_translate.tentative.https.any.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ai/translator/ai_translator_translate.tentative.https.any.js b/ai/translator/ai_translator_translate.tentative.https.any.js index 5cd8cb86b22b80..926325b620c179 100644 --- a/ai/translator/ai_translator_translate.tentative.https.any.js +++ b/ai/translator/ai_translator_translate.tentative.https.any.js @@ -138,3 +138,34 @@ promise_test(async t => { assert_equals(progressEvent.total, 1); } }, 'AITranslatorFactory.create() monitor option is called correctly.'); + +promise_test(async t => { + const translator = + await ai.translator.create({sourceLanguage: 'en', targetLanguage: 'ja'}); + + // Strings containing only white space are not translatable. + const nonTranslatableStrings = ['', ' ', ' ', ' \r\n\t\f']; + + // Strings containing only control characters are not translatable. + for (let c = 0; c < 0x1F; c++) { + nonTranslatableStrings.push(String.fromCharCode(c)); + } + + const translatedNonTranslatableString = await Promise.all( + nonTranslatableStrings.map(str => translator.translate(str))); + + // Non translatable strings should be echoed back + assert_array_equals(translatedNonTranslatableString, nonTranslatableStrings); + + // Adding translatable text makes it translatable. + const translatableStrings = + nonTranslatableStrings.map(str => `Hello ${str} world`); + + const translatedTranslatableString = await Promise.all( + translatableStrings.map(str => translator.translate(str))); + + // All the strings should have been translated in some way. + for (let i = 0; i < translatableStrings.length; i++) { + assert_not_equals(translatedTranslatableString[i], translatableStrings[i]); + } +}, 'AITranslator.translate() echos non-translatable content');