From 21f3ce8b693b43e683e8dd4d9c0d4cc2727e60a8 Mon Sep 17 00:00:00 2001 From: Tae Hyung Kim Date: Tue, 6 Dec 2022 11:16:23 -0800 Subject: [PATCH] [gen_l10n] Multiline descriptions (#116380) * init * empty commit to start google testing --- .../lib/src/localizations/gen_l10n.dart | 6 +- .../src/localizations/gen_l10n_templates.dart | 4 +- .../generate_localizations_test.dart | 70 +++++++++++++++++++ 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/packages/flutter_tools/lib/src/localizations/gen_l10n.dart b/packages/flutter_tools/lib/src/localizations/gen_l10n.dart index 740a54cdd269..51d6e534f19a 100644 --- a/packages/flutter_tools/lib/src/localizations/gen_l10n.dart +++ b/packages/flutter_tools/lib/src/localizations/gen_l10n.dart @@ -201,7 +201,11 @@ Map pluralCases = { }; String generateBaseClassMethod(Message message, LocaleInfo? templateArbLocale) { - final String comment = message.description ?? 'No description provided for @${message.resourceId}.'; + final String comment = message + .description + ?.split('\n') + .map((String line) => ' /// $line') + .join('\n') ?? ' /// No description provided for @${message.resourceId}.'; final String templateLocaleTranslationComment = ''' /// In $templateArbLocale, this message translates to: /// **'${generateString(message.value)}'**'''; diff --git a/packages/flutter_tools/lib/src/localizations/gen_l10n_templates.dart b/packages/flutter_tools/lib/src/localizations/gen_l10n_templates.dart index 5fe28380c229..022e4962e3a0 100644 --- a/packages/flutter_tools/lib/src/localizations/gen_l10n_templates.dart +++ b/packages/flutter_tools/lib/src/localizations/gen_l10n_templates.dart @@ -179,14 +179,14 @@ class @(class) extends @(baseLanguageClassName) { '''; const String baseClassGetterTemplate = ''' - /// @(comment) +@(comment) /// @(templateLocaleTranslationComment) String get @(name); '''; const String baseClassMethodTemplate = ''' - /// @(comment) +@(comment) /// @(templateLocaleTranslationComment) String @(name)(@(parameters)); diff --git a/packages/flutter_tools/test/general.shard/generate_localizations_test.dart b/packages/flutter_tools/test/general.shard/generate_localizations_test.dart index 0a60bc946932..9da376bc977e 100644 --- a/packages/flutter_tools/test/general.shard/generate_localizations_test.dart +++ b/packages/flutter_tools/test/general.shard/generate_localizations_test.dart @@ -1318,6 +1318,76 @@ class AppLocalizationsEn extends AppLocalizations { ^''')); } }); + + testWithoutContext('no description generates generic comment', () { + final Directory l10nDirectory = fs.currentDirectory.childDirectory('lib').childDirectory('l10n') + ..createSync(recursive: true); + l10nDirectory.childFile(defaultTemplateArbFileName) + .writeAsStringSync(r''' +{ + "helloWorld": "Hello world!" +}'''); + l10nDirectory.childFile(esArbFileName) + .writeAsStringSync(singleEsMessageArbFileString); + LocalizationsGenerator( + fileSystem: fs, + inputPathString: defaultL10nPathString, + outputPathString: defaultL10nPathString, + templateArbFileName: defaultTemplateArbFileName, + outputFileString: defaultOutputFileString, + classNameString: defaultClassNameString, + logger: logger, + ) + ..loadResources() + ..writeOutputFiles(); + final File baseLocalizationsFile = fs.file( + fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart') + ); + expect(baseLocalizationsFile.existsSync(), isTrue); + + final String baseLocalizationsFileContents = fs.file( + fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart') + ).readAsStringSync(); + expect(baseLocalizationsFileContents, contains('/// No description provided for @helloWorld.')); + }); + + testWithoutContext('multiline descriptions are correctly formatted as comments', () { + final Directory l10nDirectory = fs.currentDirectory.childDirectory('lib').childDirectory('l10n') + ..createSync(recursive: true); + l10nDirectory.childFile(defaultTemplateArbFileName) + .writeAsStringSync(r''' +{ + "helloWorld": "Hello world!", + "@helloWorld": { + "description": "The generic example string in every language.\nUse this for tests!" + } +}'''); + l10nDirectory.childFile(esArbFileName) + .writeAsStringSync(singleEsMessageArbFileString); + LocalizationsGenerator( + fileSystem: fs, + inputPathString: defaultL10nPathString, + outputPathString: defaultL10nPathString, + templateArbFileName: defaultTemplateArbFileName, + outputFileString: defaultOutputFileString, + classNameString: defaultClassNameString, + logger: logger, + ) + ..loadResources() + ..writeOutputFiles(); + final File baseLocalizationsFile = fs.file( + fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart') + ); + expect(baseLocalizationsFile.existsSync(), isTrue); + + final String baseLocalizationsFileContents = fs.file( + fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart') + ).readAsStringSync(); + expect(baseLocalizationsFileContents, contains(''' + /// The generic example string in every language. + /// Use this for tests!''')); + }); + testWithoutContext('message without placeholders - should generate code comment with description and template message translation', () { _standardFlutterDirectoryL10nSetup(fs); LocalizationsGenerator(