Unverified Commit 001c499f authored by Tae Hyung Kim's avatar Tae Hyung Kim Committed by GitHub

[gen_l10n] Warn users when placeholder types are converted to 'num' when using...

[gen_l10n] Warn users when placeholder types are converted to 'num' when using pluralization (#108036)

* init

* asdf

* fix tests

* change warning slightly

* fix test again

* fix spacing and comment

* fix lint
parent f1df76e9
...@@ -252,9 +252,10 @@ class GenerateLocalizationsCommand extends FlutterCommand { ...@@ -252,9 +252,10 @@ class GenerateLocalizationsCommand extends FlutterCommand {
areResourceAttributesRequired: areResourceAttributesRequired, areResourceAttributesRequired: areResourceAttributesRequired,
untranslatedMessagesFile: untranslatedMessagesFile, untranslatedMessagesFile: untranslatedMessagesFile,
usesNullableGetter: usesNullableGetter, usesNullableGetter: usesNullableGetter,
logger: _logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(_logger); ..writeOutputFiles();
} on L10nException catch (e) { } on L10nException catch (e) {
throwToolExit(e.message); throwToolExit(e.message);
} }
......
...@@ -64,9 +64,10 @@ LocalizationsGenerator generateLocalizations({ ...@@ -64,9 +64,10 @@ LocalizationsGenerator generateLocalizations({
areResourceAttributesRequired: options.areResourceAttributesRequired, areResourceAttributesRequired: options.areResourceAttributesRequired,
untranslatedMessagesFile: options.untranslatedMessagesFile?.toFilePath(), untranslatedMessagesFile: options.untranslatedMessagesFile?.toFilePath(),
usesNullableGetter: options.usesNullableGetter, usesNullableGetter: options.usesNullableGetter,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(logger, isFromYaml: true); ..writeOutputFiles(isFromYaml: true);
} on L10nException catch (e) { } on L10nException catch (e) {
throwToolExit(e.message); throwToolExit(e.message);
} }
...@@ -698,6 +699,7 @@ class LocalizationsGenerator { ...@@ -698,6 +699,7 @@ class LocalizationsGenerator {
bool areResourceAttributesRequired = false, bool areResourceAttributesRequired = false,
String? untranslatedMessagesFile, String? untranslatedMessagesFile,
bool usesNullableGetter = true, bool usesNullableGetter = true,
required Logger logger,
}) { }) {
final Directory? projectDirectory = projectDirFromPath(fileSystem, projectPathString); final Directory? projectDirectory = projectDirFromPath(fileSystem, projectPathString);
final Directory inputDirectory = inputDirectoryFromPath(fileSystem, inputPathString, projectDirectory); final Directory inputDirectory = inputDirectoryFromPath(fileSystem, inputPathString, projectDirectory);
...@@ -718,6 +720,7 @@ class LocalizationsGenerator { ...@@ -718,6 +720,7 @@ class LocalizationsGenerator {
untranslatedMessagesFile: _untranslatedMessagesFileFromPath(fileSystem, untranslatedMessagesFile), untranslatedMessagesFile: _untranslatedMessagesFileFromPath(fileSystem, untranslatedMessagesFile),
inputsAndOutputsListFile: _inputsAndOutputsListFileFromPath(fileSystem, inputsAndOutputsListPath), inputsAndOutputsListFile: _inputsAndOutputsListFileFromPath(fileSystem, inputsAndOutputsListPath),
areResourceAttributesRequired: areResourceAttributesRequired, areResourceAttributesRequired: areResourceAttributesRequired,
logger: logger,
); );
} }
...@@ -739,6 +742,7 @@ class LocalizationsGenerator { ...@@ -739,6 +742,7 @@ class LocalizationsGenerator {
this.areResourceAttributesRequired = false, this.areResourceAttributesRequired = false,
this.untranslatedMessagesFile, this.untranslatedMessagesFile,
this.usesNullableGetter = true, this.usesNullableGetter = true,
required this.logger,
}); });
final FileSystem _fs; final FileSystem _fs;
...@@ -859,6 +863,9 @@ class LocalizationsGenerator { ...@@ -859,6 +863,9 @@ class LocalizationsGenerator {
@visibleForTesting @visibleForTesting
final bool areResourceAttributesRequired; final bool areResourceAttributesRequired;
/// Logger to be used during the execution of the script.
Logger logger;
static final RegExp _selectRE = RegExp(r'\{([\w\s,]*),\s*select\s*,\s*([\w\d]+\s*\{.*\})+\s*\}'); static final RegExp _selectRE = RegExp(r'\{([\w\s,]*),\s*select\s*,\s*([\w\d]+\s*\{.*\})+\s*\}');
static bool _isNotReadable(FileStat fileStat) { static bool _isNotReadable(FileStat fileStat) {
...@@ -1141,6 +1148,21 @@ class LocalizationsGenerator { ...@@ -1141,6 +1148,21 @@ class LocalizationsGenerator {
); );
}); });
for (final Message message in messages) {
if (message.isPlural) {
if (message.placeholders.isEmpty) {
throw L10nException(
'Unable to find placeholders for the plural message: ${message.resourceId}.\n'
'Check to see if the plural message is in the proper ICU syntax format '
'and ensure that placeholders are properly specified.');
}
final Placeholder countPlaceholder = message.getCountPlaceholder();
if (countPlaceholder.type != null && countPlaceholder.type != 'num') {
logger.printWarning("Placeholders for plurals are automatically converted to type 'num' for the message: ${message.resourceId}.");
}
}
}
return classFileTemplate return classFileTemplate
.replaceAll('@(header)', header.isEmpty ? '' : '$header\n\n') .replaceAll('@(header)', header.isEmpty ? '' : '$header\n\n')
.replaceAll('@(language)', describeLocale(locale.toString())) .replaceAll('@(language)', describeLocale(locale.toString()))
...@@ -1317,7 +1339,7 @@ class LocalizationsGenerator { ...@@ -1317,7 +1339,7 @@ class LocalizationsGenerator {
|| message.placeholdersRequireFormatting; || message.placeholdersRequireFormatting;
}); });
void writeOutputFiles(Logger logger, { bool isFromYaml = false }) { void writeOutputFiles({ bool isFromYaml = false }) {
// First, generate the string contents of all necessary files. // First, generate the string contents of all necessary files.
final String generatedLocalizationsFile = _generateCode(); final String generatedLocalizationsFile = _generateCode();
......
...@@ -61,12 +61,14 @@ void _standardFlutterDirectoryL10nSetup(FileSystem fs) { ...@@ -61,12 +61,14 @@ void _standardFlutterDirectoryL10nSetup(FileSystem fs) {
void main() { void main() {
late MemoryFileSystem fs; late MemoryFileSystem fs;
late BufferLogger logger;
late String defaultL10nPathString; late String defaultL10nPathString;
late String syntheticPackagePath; late String syntheticPackagePath;
late String syntheticL10nPackagePath; late String syntheticL10nPackagePath;
setUp(() { setUp(() {
fs = MemoryFileSystem.test(); fs = MemoryFileSystem.test();
logger = BufferLogger.test();
defaultL10nPathString = fs.path.join('lib', 'l10n'); defaultL10nPathString = fs.path.join('lib', 'l10n');
syntheticPackagePath = fs.path.join('.dart_tool', 'flutter_gen'); syntheticPackagePath = fs.path.join('.dart_tool', 'flutter_gen');
...@@ -123,9 +125,10 @@ void main() { ...@@ -123,9 +125,10 @@ void main() {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
// Output files should be generated in the provided absolute path. // Output files should be generated in the provided absolute path.
expect( expect(
...@@ -171,6 +174,7 @@ void main() { ...@@ -171,6 +174,7 @@ void main() {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
), ),
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -197,6 +201,7 @@ void main() { ...@@ -197,6 +201,7 @@ void main() {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
), ),
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -268,6 +273,7 @@ void main() { ...@@ -268,6 +273,7 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
headerString: '/// Sample header', headerString: '/// Sample header',
logger: logger,
); );
expect(generator.header, '/// Sample header'); expect(generator.header, '/// Sample header');
...@@ -288,6 +294,7 @@ void main() { ...@@ -288,6 +294,7 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
headerFile: 'header.txt', headerFile: 'header.txt',
logger: logger,
); );
expect(generator.header, '/// Sample header in a text file'); expect(generator.header, '/// Sample header in a text file');
...@@ -306,9 +313,10 @@ void main() { ...@@ -306,9 +313,10 @@ void main() {
templateArbFileName: 'app_localizations_en.arb', templateArbFileName: 'app_localizations_en.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final Directory outputDirectory = fs.directory(syntheticL10nPackagePath); final Directory outputDirectory = fs.directory(syntheticL10nPackagePath);
expect(outputDirectory.childFile('output-localization-file.dart').existsSync(), isTrue); expect(outputDirectory.childFile('output-localization-file.dart').existsSync(), isTrue);
...@@ -331,6 +339,7 @@ void main() { ...@@ -331,6 +339,7 @@ void main() {
templateArbFileName: 'app_localizations_en.arb', templateArbFileName: 'app_localizations_en.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
).loadResources(); ).loadResources();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
...@@ -355,9 +364,10 @@ void main() { ...@@ -355,9 +364,10 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
untranslatedMessagesFile: fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'), untranslatedMessagesFile: fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'),
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final File unimplementedOutputFile = fs.file( final File unimplementedOutputFile = fs.file(
fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'), fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'),
...@@ -388,9 +398,10 @@ void main() { ...@@ -388,9 +398,10 @@ void main() {
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useSyntheticPackage: false, useSyntheticPackage: false,
untranslatedMessagesFile: fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'), untranslatedMessagesFile: fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'),
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final File unimplementedOutputFile = fs.file( final File unimplementedOutputFile = fs.file(
fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'), fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'),
...@@ -410,7 +421,6 @@ void main() { ...@@ -410,7 +421,6 @@ void main() {
'untranslated messages suggestion is printed when translation is missing: ' 'untranslated messages suggestion is printed when translation is missing: '
'command line message', 'command line message',
() { () {
final BufferLogger testLogger = BufferLogger.test();
fs.currentDirectory.childDirectory('lib').childDirectory('l10n') fs.currentDirectory.childDirectory('lib').childDirectory('l10n')
..createSync(recursive: true) ..createSync(recursive: true)
..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString)
...@@ -424,16 +434,17 @@ void main() { ...@@ -424,16 +434,17 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useSyntheticPackage: false, useSyntheticPackage: false,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(testLogger); ..writeOutputFiles();
expect( expect(
testLogger.statusText, logger.statusText,
contains('To see a detailed report, use the --untranslated-messages-file'), contains('To see a detailed report, use the --untranslated-messages-file'),
); );
expect( expect(
testLogger.statusText, logger.statusText,
contains('flutter gen-l10n --untranslated-messages-file=desiredFileName.txt'), contains('flutter gen-l10n --untranslated-messages-file=desiredFileName.txt'),
); );
}, },
...@@ -443,7 +454,6 @@ void main() { ...@@ -443,7 +454,6 @@ void main() {
'untranslated messages suggestion is printed when translation is missing: ' 'untranslated messages suggestion is printed when translation is missing: '
'l10n.yaml message', 'l10n.yaml message',
() { () {
final BufferLogger testLogger = BufferLogger.test();
fs.currentDirectory.childDirectory('lib').childDirectory('l10n') fs.currentDirectory.childDirectory('lib').childDirectory('l10n')
..createSync(recursive: true) ..createSync(recursive: true)
..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString)
...@@ -455,16 +465,17 @@ void main() { ...@@ -455,16 +465,17 @@ void main() {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(testLogger, isFromYaml: true); ..writeOutputFiles(isFromYaml: true);
expect( expect(
testLogger.statusText, logger.statusText,
contains('To see a detailed report, use the untranslated-messages-file'), contains('To see a detailed report, use the untranslated-messages-file'),
); );
expect( expect(
testLogger.statusText, logger.statusText,
contains('untranslated-messages-file: desiredFileName.txt'), contains('untranslated-messages-file: desiredFileName.txt'),
); );
}, },
...@@ -474,7 +485,6 @@ void main() { ...@@ -474,7 +485,6 @@ void main() {
'unimplemented messages suggestion is not printed when all messages ' 'unimplemented messages suggestion is not printed when all messages '
'are fully translated', 'are fully translated',
() { () {
final BufferLogger testLogger = BufferLogger.test();
fs.currentDirectory.childDirectory('lib').childDirectory('l10n') fs.currentDirectory.childDirectory('lib').childDirectory('l10n')
..createSync(recursive: true) ..createSync(recursive: true)
..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString)
...@@ -487,11 +497,12 @@ void main() { ...@@ -487,11 +497,12 @@ void main() {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(testLogger); ..writeOutputFiles();
expect(testLogger.statusText, ''); expect(logger.statusText, '');
}, },
); );
...@@ -506,9 +517,10 @@ void main() { ...@@ -506,9 +517,10 @@ void main() {
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
inputsAndOutputsListPath: syntheticL10nPackagePath, inputsAndOutputsListPath: syntheticL10nPackagePath,
untranslatedMessagesFile: fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'), untranslatedMessagesFile: fs.path.join('lib', 'l10n', 'unimplemented_message_translations.json'),
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final File inputsAndOutputsList = fs.file( final File inputsAndOutputsList = fs.file(
fs.path.join(syntheticL10nPackagePath, 'gen_l10n_inputs_and_outputs.json'), fs.path.join(syntheticL10nPackagePath, 'gen_l10n_inputs_and_outputs.json'),
...@@ -535,9 +547,10 @@ void main() { ...@@ -535,9 +547,10 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useSyntheticPackage: false, useSyntheticPackage: false,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final Directory outputDirectory = fs.directory('lib').childDirectory('l10n'); final Directory outputDirectory = fs.directory('lib').childDirectory('l10n');
expect(outputDirectory.childFile('output-localization-file.dart').existsSync(), isTrue); expect(outputDirectory.childFile('output-localization-file.dart').existsSync(), isTrue);
...@@ -572,9 +585,10 @@ void main() { ...@@ -572,9 +585,10 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useSyntheticPackage: false, useSyntheticPackage: false,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final Directory outputDirectory = fs.directory('lib').childDirectory('l10n').childDirectory('output'); final Directory outputDirectory = fs.directory('lib').childDirectory('l10n').childDirectory('output');
expect(outputDirectory.existsSync(), isTrue); expect(outputDirectory.existsSync(), isTrue);
...@@ -598,9 +612,10 @@ void main() { ...@@ -598,9 +612,10 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useSyntheticPackage: false, useSyntheticPackage: false,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final Directory outputDirectory = fs.directory('lib').childDirectory('l10n').childDirectory('output'); final Directory outputDirectory = fs.directory('lib').childDirectory('l10n').childDirectory('output');
expect(outputDirectory.existsSync(), isTrue); expect(outputDirectory.existsSync(), isTrue);
...@@ -624,9 +639,10 @@ void main() { ...@@ -624,9 +639,10 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useSyntheticPackage: false, useSyntheticPackage: false,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final Directory outputDirectory = fs.directory('lib').childDirectory('l10n').childDirectory('output'); final Directory outputDirectory = fs.directory('lib').childDirectory('l10n').childDirectory('output');
expect(outputDirectory.existsSync(), isTrue); expect(outputDirectory.existsSync(), isTrue);
...@@ -656,9 +672,10 @@ void main() { ...@@ -656,9 +672,10 @@ void main() {
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useSyntheticPackage: false, useSyntheticPackage: false,
usesNullableGetter: false, usesNullableGetter: false,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final Directory outputDirectory = fs.directory('lib').childDirectory('l10n').childDirectory('output'); final Directory outputDirectory = fs.directory('lib').childDirectory('l10n').childDirectory('output');
expect(outputDirectory.existsSync(), isTrue); expect(outputDirectory.existsSync(), isTrue);
...@@ -684,9 +701,10 @@ void main() { ...@@ -684,9 +701,10 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
inputsAndOutputsListPath: syntheticL10nPackagePath, inputsAndOutputsListPath: syntheticL10nPackagePath,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final File inputsAndOutputsList = fs.file( final File inputsAndOutputsList = fs.file(
fs.path.join(syntheticL10nPackagePath, 'gen_l10n_inputs_and_outputs.json'), fs.path.join(syntheticL10nPackagePath, 'gen_l10n_inputs_and_outputs.json'),
...@@ -724,6 +742,7 @@ void main() { ...@@ -724,6 +742,7 @@ void main() {
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
headerString: '/// Sample header for localizations file.', headerString: '/// Sample header for localizations file.',
headerFile: 'header.txt', headerFile: 'header.txt',
logger: logger,
); );
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
...@@ -754,6 +773,7 @@ void main() { ...@@ -754,6 +773,7 @@ void main() {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
headerFile: 'header.tx', // Intentionally spelled incorrectly headerFile: 'header.tx', // Intentionally spelled incorrectly
logger: logger,
); );
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
...@@ -786,7 +806,7 @@ void main() { ...@@ -786,7 +806,7 @@ void main() {
final LocalizationsGenerator generator = generateLocalizations( final LocalizationsGenerator generator = generateLocalizations(
fileSystem: fs, fileSystem: fs,
options: options, options: options,
logger: BufferLogger.test(), logger: logger,
projectDir: fs.currentDirectory, projectDir: fs.currentDirectory,
dependenciesDir: fs.currentDirectory, dependenciesDir: fs.currentDirectory,
); );
...@@ -899,7 +919,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -899,7 +919,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFile: Uri.file(defaultTemplateArbFileName, windows: false), templateArbFile: Uri.file(defaultTemplateArbFileName, windows: false),
useSyntheticPackage: false, useSyntheticPackage: false,
), ),
logger: BufferLogger.test(), logger: logger,
projectDir: fs.currentDirectory, projectDir: fs.currentDirectory,
dependenciesDir: fs.currentDirectory, dependenciesDir: fs.currentDirectory,
); );
...@@ -931,6 +951,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -931,6 +951,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources(); ..loadResources();
...@@ -956,6 +977,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -956,6 +977,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources(); ..loadResources();
...@@ -983,6 +1005,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -983,6 +1005,7 @@ class AppLocalizationsEn extends AppLocalizations {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
preferredSupportedLocales: preferredSupportedLocale, preferredSupportedLocales: preferredSupportedLocale,
logger: logger,
) )
..loadResources(); ..loadResources();
...@@ -1014,6 +1037,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1014,6 +1037,7 @@ class AppLocalizationsEn extends AppLocalizations {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
preferredSupportedLocales: preferredSupportedLocale, preferredSupportedLocales: preferredSupportedLocale,
logger: logger,
).loadResources(); ).loadResources();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
...@@ -1043,6 +1067,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1043,6 +1067,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources(); ..loadResources();
...@@ -1084,6 +1109,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1084,6 +1109,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: 'first_file.arb', templateArbFileName: 'first_file.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources(); ..loadResources();
...@@ -1126,6 +1152,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1126,6 +1152,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: 'app_es.arb', templateArbFileName: 'app_es.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
).loadResources(); ).loadResources();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
...@@ -1150,6 +1177,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1150,6 +1177,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: 'app.arb', templateArbFileName: 'app.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
).loadResources(); ).loadResources();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
...@@ -1182,6 +1210,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1182,6 +1210,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: 'app_en.arb', templateArbFileName: 'app_en.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
).loadResources(), ).loadResources(),
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1216,6 +1245,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1216,6 +1245,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: 'app_en.arb', templateArbFileName: 'app_en.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
).loadResources(); ).loadResources();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
...@@ -1241,6 +1271,7 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1241,6 +1271,7 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: 'app_en_US.arb', templateArbFileName: 'app_en_US.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
).loadResources(); ).loadResources();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
...@@ -1255,7 +1286,6 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1255,7 +1286,6 @@ class AppLocalizationsEn extends AppLocalizations {
group('writeOutputFiles', () { group('writeOutputFiles', () {
testWithoutContext('message without placeholders - should generate code comment with description and template message translation', () { testWithoutContext('message without placeholders - should generate code comment with description and template message translation', () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
final BufferLogger testLogger = BufferLogger.test();
LocalizationsGenerator( LocalizationsGenerator(
fileSystem: fs, fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
...@@ -1263,9 +1293,10 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1263,9 +1293,10 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(testLogger); ..writeOutputFiles();
final File baseLocalizationsFile = fs.file( final File baseLocalizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart') fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart')
...@@ -1295,8 +1326,6 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1295,8 +1326,6 @@ class AppLocalizationsEn extends AppLocalizations {
l10nDirectory.childFile(esArbFileName) l10nDirectory.childFile(esArbFileName)
.writeAsStringSync(singleEsMessageArbFileString); .writeAsStringSync(singleEsMessageArbFileString);
final BufferLogger testLogger = BufferLogger.test();
LocalizationsGenerator( LocalizationsGenerator(
fileSystem: fs, fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
...@@ -1304,9 +1333,10 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1304,9 +1333,10 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(testLogger); ..writeOutputFiles();
final File baseLocalizationsFile = fs.file( final File baseLocalizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart') fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart')
...@@ -1345,7 +1375,6 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1345,7 +1375,6 @@ class AppLocalizationsEn extends AppLocalizations {
"price": "el precio de este artículo es: ${price}" "price": "el precio de este artículo es: ${price}"
}'''); }''');
final BufferLogger testLogger = BufferLogger.test();
LocalizationsGenerator( LocalizationsGenerator(
fileSystem: fs, fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
...@@ -1353,9 +1382,10 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1353,9 +1382,10 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(testLogger); ..writeOutputFiles();
final File baseLocalizationsFile = fs.file( final File baseLocalizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart') fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart')
...@@ -1387,9 +1417,10 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1387,9 +1417,10 @@ class AppLocalizationsEn extends AppLocalizations {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
expect(fs.isFileSync(fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart')), true); expect(fs.isFileSync(fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart')), true);
expect(fs.isFileSync(fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en_US.dart')), false); expect(fs.isFileSync(fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en_US.dart')), false);
...@@ -1416,9 +1447,10 @@ class AppLocalizationsEn extends AppLocalizations { ...@@ -1416,9 +1447,10 @@ class AppLocalizationsEn extends AppLocalizations {
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
preferredSupportedLocales: preferredSupportedLocale, preferredSupportedLocales: preferredSupportedLocale,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, defaultOutputFileString), fs.path.join(syntheticL10nPackagePath, defaultOutputFileString),
...@@ -1443,9 +1475,10 @@ import 'output-localization-file_zh.dart'; ...@@ -1443,9 +1475,10 @@ import 'output-localization-file_zh.dart';
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: 'output-localization-file.g.dart', outputFileString: 'output-localization-file.g.dart',
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String baseLocalizationsFile = fs.file( final String baseLocalizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.g.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file.g.dart'),
...@@ -1477,9 +1510,10 @@ import 'output-localization-file.g.dart'; ...@@ -1477,9 +1510,10 @@ import 'output-localization-file.g.dart';
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: 'asdf', outputFileString: 'asdf',
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1502,9 +1536,10 @@ import 'output-localization-file.g.dart'; ...@@ -1502,9 +1536,10 @@ import 'output-localization-file.g.dart';
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: '.g.dart', outputFileString: '.g.dart',
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1530,9 +1565,10 @@ import 'output-localization-file.g.dart'; ...@@ -1530,9 +1565,10 @@ import 'output-localization-file.g.dart';
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useDeferredLoading: true, useDeferredLoading: true,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, defaultOutputFileString), fs.path.join(syntheticL10nPackagePath, defaultOutputFileString),
...@@ -1570,9 +1606,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1570,9 +1606,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'),
...@@ -1608,9 +1645,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1608,9 +1645,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1651,9 +1689,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1651,9 +1689,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'),
...@@ -1688,9 +1727,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1688,9 +1727,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'),
...@@ -1725,9 +1765,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1725,9 +1765,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1765,9 +1806,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1765,9 +1806,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'),
...@@ -1803,9 +1845,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1803,9 +1845,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1844,9 +1887,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1844,9 +1887,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1880,9 +1924,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1880,9 +1924,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1912,9 +1957,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1912,9 +1957,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1947,9 +1993,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1947,9 +1993,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -1961,6 +2008,36 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1961,6 +2008,36 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
)), )),
); );
}); });
testWithoutContext('should warn attempting to generate a plural message whose placeholder is not num or null', () {
const String pluralMessageWithIncorrectPlaceholderType = '''
{
"helloWorlds": "{count,plural, =0{Hello}=1{Hello World}=2{Hello two worlds}few{Hello {count} worlds}many{Hello all {count} worlds}other{Hello other {count} worlds}}",
"@helloWorlds": {
"placeholders": {
"count": {
"type": "int"
}
}
}
}''';
final Directory l10nDirectory = fs.currentDirectory.childDirectory('lib').childDirectory('l10n')
..createSync(recursive: true);
l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(pluralMessageWithIncorrectPlaceholderType);
LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString,
logger: logger,
)
..loadResources()
..writeOutputFiles();
expect(logger.warningText, contains("Placeholders for plurals are automatically converted to type 'num'"));
});
}); });
group('select messages', () { group('select messages', () {
...@@ -1987,9 +2064,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1987,9 +2064,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2023,9 +2101,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2023,9 +2101,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2055,9 +2134,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2055,9 +2134,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2090,9 +2170,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2090,9 +2170,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2130,9 +2211,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2130,9 +2211,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2158,9 +2240,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2158,9 +2240,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'),
...@@ -2198,9 +2281,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2198,9 +2281,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'),
...@@ -2238,9 +2322,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2238,9 +2322,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'),
...@@ -2258,9 +2343,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2258,9 +2343,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart'),
...@@ -2292,9 +2378,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2292,9 +2378,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useDeferredLoading: true, useDeferredLoading: true,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart'),
...@@ -2314,9 +2401,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2314,9 +2401,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart'),
...@@ -2438,9 +2526,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2438,9 +2526,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'),
...@@ -2507,9 +2596,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2507,9 +2596,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_es.dart'),
...@@ -2553,9 +2643,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2553,9 +2643,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2590,9 +2681,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2590,9 +2681,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
areResourceAttributesRequired: true, areResourceAttributesRequired: true,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2625,9 +2717,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2625,9 +2717,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2659,9 +2752,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2659,9 +2752,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2692,9 +2786,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2692,9 +2786,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2726,9 +2821,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2726,9 +2821,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: 'app_invalid.arb', templateArbFileName: 'app_invalid.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
}, },
throwsA(isA<L10nException>().having( throwsA(isA<L10nException>().having(
(L10nException e) => e.message, (L10nException e) => e.message,
...@@ -2747,9 +2843,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2747,9 +2843,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final Directory outputDirectory = fs.directory(syntheticPackagePath); final Directory outputDirectory = fs.directory(syntheticPackagePath);
final File pubspecFile = outputDirectory.childFile('pubspec.yaml'); final File pubspecFile = outputDirectory.childFile('pubspec.yaml');
...@@ -2777,9 +2874,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2777,9 +2874,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
// The original pubspec file should not be overwritten. // The original pubspec file should not be overwritten.
expect(pubspecFile.readAsStringSync(), 'abcd'); expect(pubspecFile.readAsStringSync(), 'abcd');
...@@ -2811,9 +2909,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2811,9 +2909,10 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'),
...@@ -2839,9 +2938,10 @@ String orderNumber(int number) { ...@@ -2839,9 +2938,10 @@ String orderNumber(int number) {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file.dart'),
...@@ -2883,9 +2983,10 @@ AppLocalizations lookupAppLocalizations(Locale locale) { ...@@ -2883,9 +2983,10 @@ AppLocalizations lookupAppLocalizations(Locale locale) {
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
logger: logger,
) )
..loadResources() ..loadResources()
..writeOutputFiles(BufferLogger.test()); ..writeOutputFiles();
final String localizationsFile = fs.file( final String localizationsFile = fs.file(
fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'), fs.path.join(syntheticL10nPackagePath, 'output-localization-file_en.dart'),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment