diff --git a/packages/flutter_tools/lib/src/localizations/gen_l10n.dart b/packages/flutter_tools/lib/src/localizations/gen_l10n.dart index 0323143cab4..ea3a6597512 100644 --- a/packages/flutter_tools/lib/src/localizations/gen_l10n.dart +++ b/packages/flutter_tools/lib/src/localizations/gen_l10n.dart @@ -942,7 +942,13 @@ class LocalizationsGenerator { @visibleForTesting static File templateArbFileFromFileName(String templateArbFileName, Directory inputDirectory) { final File templateArbFile = inputDirectory.childFile(templateArbFileName); - final String templateArbFileStatModeString = templateArbFile.statSync().modeString(); + final FileStat templateArbFileStat = templateArbFile.statSync(); + if (templateArbFileStat.type == FileSystemEntityType.notFound) { + throw L10nException( + "The 'template-arb-file', $templateArbFile, does not exist." + ); + } + final String templateArbFileStatModeString = templateArbFileStat.modeString(); if (templateArbFileStatModeString[0] == '-' && templateArbFileStatModeString[3] == '-') { throw L10nException( "The 'template-arb-file', $templateArbFile, is not readable.\n" 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 692a198751e..c3a0f6ae3d7 100644 --- a/packages/flutter_tools/test/general.shard/generate_localizations_test.dart +++ b/packages/flutter_tools/test/general.shard/generate_localizations_test.dart @@ -180,6 +180,32 @@ void main() { ); }); + testWithoutContext('throws error when arb file does not exist', () { + // Set up project directory. + fs.currentDirectory + .childDirectory('lib') + .childDirectory('l10n') + .createSync(recursive: true); + + // Arb file should be nonexistent in the l10n directory. + expect( + () => LocalizationsGenerator( + fileSystem: fs, + projectPathString: './', + inputPathString: defaultL10nPathString, + outputPathString: defaultL10nPathString, + templateArbFileName: defaultTemplateArbFileName, + outputFileString: defaultOutputFileString, + classNameString: defaultClassNameString, + ), + throwsA(isA().having( + (L10nException e) => e.message, + 'message', + contains(', does not exist.'), + )), + ); + }); + group('className should only take valid Dart class names', () { setUp(() { _standardFlutterDirectoryL10nSetup(fs);