Unverified Commit b4175e9b authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Refactor LocalizationsGenerator initialize instance method into factory (#80605)

parent 42f21fd7
...@@ -63,7 +63,7 @@ class GenerateLocalizationsTarget extends Target { ...@@ -63,7 +63,7 @@ class GenerateLocalizationsTarget extends Target {
options: options, options: options,
projectDir: environment.projectDir, projectDir: environment.projectDir,
dependenciesDir: environment.buildDir, dependenciesDir: environment.buildDir,
localizationsGenerator: LocalizationsGenerator(environment.fileSystem), fileSystem: environment.fileSystem,
); );
final Map<String, Object> dependencies = json.decode( final Map<String, Object> dependencies = json.decode(
......
...@@ -212,7 +212,7 @@ class GenerateLocalizationsCommand extends FlutterCommand { ...@@ -212,7 +212,7 @@ class GenerateLocalizationsCommand extends FlutterCommand {
options: options, options: options,
projectDir: _fileSystem.currentDirectory, projectDir: _fileSystem.currentDirectory,
dependenciesDir: null, dependenciesDir: null,
localizationsGenerator: LocalizationsGenerator(_fileSystem), fileSystem: _fileSystem,
); );
return FlutterCommandResult.success(); return FlutterCommandResult.success();
} }
...@@ -233,13 +233,11 @@ class GenerateLocalizationsCommand extends FlutterCommand { ...@@ -233,13 +233,11 @@ class GenerateLocalizationsCommand extends FlutterCommand {
final bool areResourceAttributesRequired = boolArg('required-resource-attributes'); final bool areResourceAttributesRequired = boolArg('required-resource-attributes');
final bool usesNullableGetter = boolArg('nullable-getter'); final bool usesNullableGetter = boolArg('nullable-getter');
final LocalizationsGenerator localizationsGenerator = LocalizationsGenerator(_fileSystem);
precacheLanguageAndRegionTags(); precacheLanguageAndRegionTags();
try { try {
localizationsGenerator LocalizationsGenerator(
..initialize( fileSystem: _fileSystem,
inputPathString: inputPathString, inputPathString: inputPathString,
outputPathString: outputPathString, outputPathString: outputPathString,
templateArbFileName: templateArbFileName, templateArbFileName: templateArbFileName,
......
...@@ -11,19 +11,18 @@ import '../base/file_system.dart'; ...@@ -11,19 +11,18 @@ import '../base/file_system.dart';
import '../base/logger.dart'; import '../base/logger.dart';
import '../convert.dart'; import '../convert.dart';
import '../flutter_manifest.dart'; import '../flutter_manifest.dart';
import '../globals_null_migrated.dart' as globals;
import 'gen_l10n_templates.dart'; import 'gen_l10n_templates.dart';
import 'gen_l10n_types.dart'; import 'gen_l10n_types.dart';
import 'localizations_utils.dart'; import 'localizations_utils.dart';
/// Run the localizations generation script with the configuration [options]. /// Run the localizations generation script with the configuration [options].
void generateLocalizations({ LocalizationsGenerator generateLocalizations({
@required Directory projectDir, @required Directory projectDir,
@required Directory dependenciesDir, @required Directory dependenciesDir,
@required LocalizationOptions options, @required LocalizationOptions options,
@required LocalizationsGenerator localizationsGenerator,
@required Logger logger, @required Logger logger,
@required FileSystem fileSystem,
}) { }) {
// If generating a synthetic package, generate a warning if // If generating a synthetic package, generate a warning if
// flutter: generate is not set. // flutter: generate is not set.
...@@ -45,13 +44,13 @@ void generateLocalizations({ ...@@ -45,13 +44,13 @@ void generateLocalizations({
precacheLanguageAndRegionTags(); precacheLanguageAndRegionTags();
final String inputPathString = options?.arbDirectory?.path ?? globals.fs.path.join('lib', 'l10n'); final String inputPathString = options?.arbDirectory?.path ?? fileSystem.path.join('lib', 'l10n');
final String templateArbFileName = options?.templateArbFile?.toFilePath() ?? 'app_en.arb'; final String templateArbFileName = options?.templateArbFile?.toFilePath() ?? 'app_en.arb';
final String outputFileString = options?.outputLocalizationsFile?.toFilePath() ?? 'app_localizations.dart'; final String outputFileString = options?.outputLocalizationsFile?.toFilePath() ?? 'app_localizations.dart';
LocalizationsGenerator generator;
try { try {
localizationsGenerator generator = LocalizationsGenerator(
..initialize( fileSystem: fileSystem,
inputsAndOutputsListPath: dependenciesDir?.path, inputsAndOutputsListPath: dependenciesDir?.path,
projectPathString: projectDir.path, projectPathString: projectDir.path,
inputPathString: inputPathString, inputPathString: inputPathString,
...@@ -73,17 +72,18 @@ void generateLocalizations({ ...@@ -73,17 +72,18 @@ void generateLocalizations({
} on L10nException catch (e) { } on L10nException catch (e) {
throwToolExit(e.message); throwToolExit(e.message);
} }
return generator;
} }
/// The path for the synthetic package. /// The path for the synthetic package.
final String defaultSyntheticPackagePath = globals.fs.path.join('.dart_tool', 'flutter_gen'); String _defaultSyntheticPackagePath(FileSystem fileSystem) => fileSystem.path.join('.dart_tool', 'flutter_gen');
/// The default path used when the `_useSyntheticPackage` setting is set to true /// The default path used when the `_useSyntheticPackage` setting is set to true
/// in [LocalizationsGenerator]. /// in [LocalizationsGenerator].
/// ///
/// See [LocalizationsGenerator.initialize] for where and how it is used by the /// See [LocalizationsGenerator.initialize] for where and how it is used by the
/// localizations tool. /// localizations tool.
final String syntheticL10nPackagePath = globals.fs.path.join(defaultSyntheticPackagePath, 'gen_l10n'); String _syntheticL10nPackagePath(FileSystem fileSystem) => fileSystem.path.join(_defaultSyntheticPackagePath(fileSystem), 'gen_l10n');
List<String> generateMethodParameters(Message message) { List<String> generateMethodParameters(Message message) {
assert(message.placeholders.isNotEmpty); assert(message.placeholders.isNotEmpty);
...@@ -535,20 +535,88 @@ String _generateDelegateClass({ ...@@ -535,20 +535,88 @@ String _generateDelegateClass({
} }
class LocalizationsGenerator { class LocalizationsGenerator {
/// Initializes [inputDirectory], [outputDirectory], [templateArbFile],
/// [outputFile] and [className].
///
/// Throws an [L10nException] when a provided configuration is not allowed
/// by [LocalizationsGenerator].
///
/// Throws a [FileSystemException] when a file operation necessary for setting
/// up the [LocalizationsGenerator] cannot be completed.
factory LocalizationsGenerator({
@required FileSystem fileSystem,
@required String inputPathString,
String outputPathString,
@required String templateArbFileName,
String outputFileString,
@required String classNameString,
List<String> preferredSupportedLocales,
String headerString,
String headerFile,
bool useDeferredLoading = false,
String inputsAndOutputsListPath,
bool useSyntheticPackage = true,
String projectPathString,
bool areResourceAttributesRequired = false,
String untranslatedMessagesFile,
bool usesNullableGetter = true,
}) {
final Directory projectDirectory = projectDirFromPath(fileSystem, projectPathString);
final Directory inputDirectory = inputDirectoryFromPath(fileSystem, inputPathString, projectDirectory);
final Directory outputDirectory = outputDirectoryFromPath(fileSystem, outputPathString ?? inputPathString, useSyntheticPackage, projectDirectory);
return LocalizationsGenerator._(
fileSystem,
useSyntheticPackage: useSyntheticPackage,
usesNullableGetter: usesNullableGetter,
className: classNameFromString(classNameString),
projectDirectory: projectDirectory,
inputDirectory: inputDirectory,
outputDirectory: outputDirectory,
templateArbFile: templateArbFileFromFileName(templateArbFileName, inputDirectory),
baseOutputFile: outputDirectory.childFile(outputFileString),
preferredSupportedLocales: preferredSupportedLocalesFromLocales(preferredSupportedLocales),
header: headerFromFile(headerString, headerFile, inputDirectory),
useDeferredLoading: useDeferredLoading ?? false,
untranslatedMessagesFile: _untranslatedMessagesFileFromPath(fileSystem, untranslatedMessagesFile),
inputsAndOutputsListFile: _inputsAndOutputsListFileFromPath(fileSystem, inputsAndOutputsListPath),
areResourceAttributesRequired: areResourceAttributesRequired,
);
}
/// Creates an instance of the localizations generator class. /// Creates an instance of the localizations generator class.
/// ///
/// It takes in a [FileSystem] representation that the class will act upon. /// It takes in a [FileSystem] representation that the class will act upon.
LocalizationsGenerator(this._fs); LocalizationsGenerator._(
this._fs, {
this.inputDirectory,
@required this.outputDirectory,
@required this.templateArbFile,
@required this.baseOutputFile,
@required this.className,
this.preferredSupportedLocales = const <LocaleInfo>[],
this.header = '',
this.useDeferredLoading = false,
this.inputsAndOutputsListFile,
this.useSyntheticPackage = true,
this.projectDirectory,
this.areResourceAttributesRequired = false,
this.untranslatedMessagesFile,
this.usesNullableGetter = true,
});
final FileSystem _fs; final FileSystem _fs;
Iterable<Message> _allMessages; Iterable<Message> _allMessages;
AppResourceBundleCollection _allBundles; AppResourceBundleCollection _allBundles;
LocaleInfo _templateArbLocale; LocaleInfo _templateArbLocale;
bool _useSyntheticPackage = true;
@visibleForTesting
final bool useSyntheticPackage;
// Used to decide if the generated code is nullable or not // Used to decide if the generated code is nullable or not
// (whether AppLocalizations? or AppLocalizations is returned from // (whether AppLocalizations? or AppLocalizations is returned from
// `static {name}Localizations{?} of (BuildContext context))` // `static {name}Localizations{?} of (BuildContext context))`
bool _usesNullableGetter = true; @visibleForTesting
final bool usesNullableGetter;
/// The directory that contains the project's arb files, as well as the /// The directory that contains the project's arb files, as well as the
/// header file, if specified. /// header file, if specified.
...@@ -557,12 +625,12 @@ class LocalizationsGenerator { ...@@ -557,12 +625,12 @@ class LocalizationsGenerator {
/// for translated messages, header file templates) will reside here. /// for translated messages, header file templates) will reside here.
/// ///
/// This directory is specified with the [initialize] method. /// This directory is specified with the [initialize] method.
Directory inputDirectory; final Directory inputDirectory;
/// The Flutter project's root directory. /// The Flutter project's root directory.
/// ///
/// This directory is specified with the [initialize] method. /// This directory is specified with the [initialize] method.
Directory projectDirectory; final Directory projectDirectory;
/// The directory to generate the project's localizations files in. /// The directory to generate the project's localizations files in.
/// ///
...@@ -571,13 +639,13 @@ class LocalizationsGenerator { ...@@ -571,13 +639,13 @@ class LocalizationsGenerator {
/// will reside here. /// will reside here.
/// ///
/// This directory is specified with the [initialize] method. /// This directory is specified with the [initialize] method.
Directory outputDirectory; final Directory outputDirectory;
/// The input arb file which defines all of the messages that will be /// The input arb file which defines all of the messages that will be
/// exported by the generated class that's written to [outputFile]. /// exported by the generated class that's written to [outputFile].
/// ///
/// This file is specified with the [initialize] method. /// This file is specified with the [initialize] method.
File templateArbFile; final File templateArbFile;
/// The file to write the generated abstract localizations and /// The file to write the generated abstract localizations and
/// localizations delegate classes to. Separate localizations /// localizations delegate classes to. Separate localizations
...@@ -585,7 +653,7 @@ class LocalizationsGenerator { ...@@ -585,7 +653,7 @@ class LocalizationsGenerator {
/// filename as a prefix and the locale as the suffix. /// filename as a prefix and the locale as the suffix.
/// ///
/// This file is specified with the [initialize] method. /// This file is specified with the [initialize] method.
File baseOutputFile; final File baseOutputFile;
/// The class name to be used for the localizations class in [outputFile]. /// The class name to be used for the localizations class in [outputFile].
/// ///
...@@ -593,8 +661,7 @@ class LocalizationsGenerator { ...@@ -593,8 +661,7 @@ class LocalizationsGenerator {
/// AppLocalizations will be used for localized message lookups. /// AppLocalizations will be used for localized message lookups.
/// ///
/// The class name is specified with the [initialize] method. /// The class name is specified with the [initialize] method.
String get className => _className; final String className;
String _className;
/// The list of preferred supported locales. /// The list of preferred supported locales.
/// ///
...@@ -608,8 +675,7 @@ class LocalizationsGenerator { ...@@ -608,8 +675,7 @@ class LocalizationsGenerator {
/// ['es', 'en'] is passed in, the 'es' locale will take priority over 'en'. /// ['es', 'en'] is passed in, the 'es' locale will take priority over 'en'.
/// ///
/// The list of preferred locales is specified with the [initialize] method. /// The list of preferred locales is specified with the [initialize] method.
List<LocaleInfo> get preferredSupportedLocales => _preferredSupportedLocales; final List<LocaleInfo> preferredSupportedLocales;
List<LocaleInfo> _preferredSupportedLocales;
/// The list of all arb path strings in [inputDirectory]. /// The list of all arb path strings in [inputDirectory].
List<String> get arbPathStrings { List<String> get arbPathStrings {
...@@ -625,7 +691,7 @@ class LocalizationsGenerator { ...@@ -625,7 +691,7 @@ class LocalizationsGenerator {
final Set<LocaleInfo> supportedLocales = <LocaleInfo>{}; final Set<LocaleInfo> supportedLocales = <LocaleInfo>{};
/// The header to be prepended to the generated Dart localization file. /// The header to be prepended to the generated Dart localization file.
String header = ''; final String header;
final Map<LocaleInfo, List<String>> _unimplementedMessages = <LocaleInfo, List<String>>{}; final Map<LocaleInfo, List<String>> _unimplementedMessages = <LocaleInfo, List<String>>{};
...@@ -643,8 +709,7 @@ class LocalizationsGenerator { ...@@ -643,8 +709,7 @@ class LocalizationsGenerator {
/// ///
/// Note that this flag does not affect other platforms such as mobile or /// Note that this flag does not affect other platforms such as mobile or
/// desktop. /// desktop.
bool get useDeferredLoading => _useDeferredLoading; final bool useDeferredLoading;
bool _useDeferredLoading;
/// Contains a map of each output language file to its corresponding content in /// Contains a map of each output language file to its corresponding content in
/// string format. /// string format.
...@@ -656,60 +721,22 @@ class LocalizationsGenerator { ...@@ -656,60 +721,22 @@ class LocalizationsGenerator {
/// A generated file that will contain the list of messages for each locale /// A generated file that will contain the list of messages for each locale
/// that do not have a translation yet. /// that do not have a translation yet.
File _untranslatedMessagesFile; @visibleForTesting
final File untranslatedMessagesFile;
/// The file that contains the list of inputs and outputs for generating /// The file that contains the list of inputs and outputs for generating
/// localizations. /// localizations.
File _inputsAndOutputsListFile; @visibleForTesting
List<String> _inputFileList; final File inputsAndOutputsListFile;
List<String> _outputFileList; final List<String> _inputFileList = <String>[];
final List<String> _outputFileList = <String>[];
/// Whether or not resource attributes are required for each corresponding /// Whether or not resource attributes are required for each corresponding
/// resource id. /// resource id.
/// ///
/// Resource attributes provide metadata about the message. /// Resource attributes provide metadata about the message.
bool _areResourceAttributesRequired; @visibleForTesting
final bool areResourceAttributesRequired;
/// Initializes [inputDirectory], [outputDirectory], [templateArbFile],
/// [outputFile] and [className].
///
/// Throws an [L10nException] when a provided configuration is not allowed
/// by [LocalizationsGenerator].
///
/// Throws a [FileSystemException] when a file operation necessary for setting
/// up the [LocalizationsGenerator] cannot be completed.
void initialize({
String inputPathString,
String outputPathString,
String templateArbFileName,
String outputFileString,
String classNameString,
List<String> preferredSupportedLocales,
String headerString,
String headerFile,
bool useDeferredLoading = false,
String inputsAndOutputsListPath,
bool useSyntheticPackage = true,
String projectPathString,
bool areResourceAttributesRequired = false,
String untranslatedMessagesFile,
bool usesNullableGetter = true,
}) {
_useSyntheticPackage = useSyntheticPackage;
_usesNullableGetter = usesNullableGetter;
setProjectDir(projectPathString);
setInputDirectory(inputPathString);
setOutputDirectory(outputPathString ?? inputPathString);
setTemplateArbFile(templateArbFileName);
setBaseOutputFile(outputFileString);
setPreferredSupportedLocales(preferredSupportedLocales);
_setHeader(headerString, headerFile);
_setUseDeferredLoading(useDeferredLoading);
_setUntranslatedMessagesFile(untranslatedMessagesFile);
className = classNameString;
_setInputsAndOutputsListFile(inputsAndOutputsListPath);
_areResourceAttributesRequired = areResourceAttributesRequired;
}
static bool _isNotReadable(FileStat fileStat) { static bool _isNotReadable(FileStat fileStat) {
final String rawStatString = fileStat.modeString(); final String rawStatString = fileStat.modeString();
...@@ -726,12 +753,12 @@ class LocalizationsGenerator { ...@@ -726,12 +753,12 @@ class LocalizationsGenerator {
} }
@visibleForTesting @visibleForTesting
void setProjectDir(String projectPathString) { static Directory projectDirFromPath(FileSystem fileSystem, String projectPathString) {
if (projectPathString == null) { if (projectPathString == null) {
return; return null;
} }
final Directory directory = _fs.directory(projectPathString); final Directory directory = fileSystem.directory(projectPathString);
if (!directory.existsSync()) { if (!directory.existsSync()) {
throw L10nException( throw L10nException(
'Directory does not exist: $directory.\n' 'Directory does not exist: $directory.\n'
...@@ -739,18 +766,18 @@ class LocalizationsGenerator { ...@@ -739,18 +766,18 @@ class LocalizationsGenerator {
'resource files.' 'resource files.'
); );
} }
projectDirectory = directory; return directory;
} }
/// Sets the reference [Directory] for [inputDirectory]. /// Sets the reference [Directory] for [inputDirectory].
@visibleForTesting @visibleForTesting
void setInputDirectory(String inputPathString) { static Directory inputDirectoryFromPath(FileSystem fileSystem, String inputPathString, Directory projectDirectory) {
if (inputPathString == null) { if (inputPathString == null) {
throw L10nException('inputPathString argument cannot be null'); throw L10nException('inputPathString argument cannot be null');
} }
inputDirectory = _fs.directory( final Directory inputDirectory = fileSystem.directory(
projectDirectory != null projectDirectory != null
? _getAbsoluteProjectPath(inputPathString) ? _getAbsoluteProjectPath(inputPathString, projectDirectory)
: inputPathString : inputPathString
); );
...@@ -768,18 +795,18 @@ class LocalizationsGenerator { ...@@ -768,18 +795,18 @@ class LocalizationsGenerator {
'Please ensure that the user has read and write permissions.' 'Please ensure that the user has read and write permissions.'
); );
} }
return inputDirectory;
} }
/// Sets the reference [Directory] for [outputDirectory]. /// Sets the reference [Directory] for [outputDirectory].
@visibleForTesting @visibleForTesting
void setOutputDirectory( static Directory outputDirectoryFromPath(FileSystem fileSystem, String outputPathString, bool useSyntheticPackage, Directory projectDirectory) {
String outputPathString, Directory outputDirectory;
) { if (useSyntheticPackage) {
if (_useSyntheticPackage) { outputDirectory = fileSystem.directory(
outputDirectory = _fs.directory(
projectDirectory != null projectDirectory != null
? _getAbsoluteProjectPath(syntheticL10nPackagePath) ? _getAbsoluteProjectPath(_syntheticL10nPackagePath(fileSystem), projectDirectory)
: syntheticL10nPackagePath : _syntheticL10nPackagePath(fileSystem)
); );
} else { } else {
if (outputPathString == null) { if (outputPathString == null) {
...@@ -789,17 +816,18 @@ class LocalizationsGenerator { ...@@ -789,17 +816,18 @@ class LocalizationsGenerator {
); );
} }
outputDirectory = _fs.directory( outputDirectory = fileSystem.directory(
projectDirectory != null projectDirectory != null
? _getAbsoluteProjectPath(outputPathString) ? _getAbsoluteProjectPath(outputPathString, projectDirectory)
: outputPathString : outputPathString
); );
} }
return outputDirectory;
} }
/// Sets the reference [File] for [templateArbFile]. /// Sets the reference [File] for [templateArbFile].
@visibleForTesting @visibleForTesting
void setTemplateArbFile(String templateArbFileName) { static File templateArbFileFromFileName(String templateArbFileName, Directory inputDirectory) {
if (templateArbFileName == null) { if (templateArbFileName == null) {
throw L10nException('templateArbFileName argument cannot be null'); throw L10nException('templateArbFileName argument cannot be null');
} }
...@@ -807,7 +835,7 @@ class LocalizationsGenerator { ...@@ -807,7 +835,7 @@ class LocalizationsGenerator {
throw L10nException('inputDirectory cannot be null when setting template arb file'); throw L10nException('inputDirectory cannot be null when setting template arb file');
} }
templateArbFile = _fs.file(globals.fs.path.join(inputDirectory.path, templateArbFileName)); final File templateArbFile = inputDirectory.childFile(templateArbFileName);
final String templateArbFileStatModeString = templateArbFile.statSync().modeString(); final String templateArbFileStatModeString = templateArbFile.statSync().modeString();
if (templateArbFileStatModeString[0] == '-' && templateArbFileStatModeString[3] == '-') { if (templateArbFileStatModeString[0] == '-' && templateArbFileStatModeString[3] == '-') {
throw L10nException( throw L10nException(
...@@ -815,15 +843,16 @@ class LocalizationsGenerator { ...@@ -815,15 +843,16 @@ class LocalizationsGenerator {
'Please ensure that the user has read permissions.' 'Please ensure that the user has read permissions.'
); );
} }
return templateArbFile;
} }
/// Sets the reference [File] for the localizations delegate [outputFile]. /// Sets the reference [File] for the localizations delegate [outputFile].
@visibleForTesting @visibleForTesting
void setBaseOutputFile(String outputFileString) { static File baseOutputFileFromOutputFile(FileSystem fileSystem, String outputFileString, Directory outputDirectory) {
if (outputFileString == null) { if (outputDirectory == null) {
throw L10nException('outputFileString argument cannot be null'); throw L10nException('outputFileString argument cannot be null');
} }
baseOutputFile = _fs.file(globals.fs.path.join(outputDirectory.path, outputFileString)); return outputDirectory.childFile(outputFileString);
} }
static bool _isValidClassName(String className) { static bool _isValidClassName(String className) {
...@@ -849,7 +878,7 @@ class LocalizationsGenerator { ...@@ -849,7 +878,7 @@ class LocalizationsGenerator {
/// Sets the [className] for the localizations and localizations delegate /// Sets the [className] for the localizations and localizations delegate
/// classes. /// classes.
@visibleForTesting @visibleForTesting
set className(String classNameString) { static String classNameFromString(String classNameString) {
if (classNameString == null || classNameString.isEmpty) { if (classNameString == null || classNameString.isEmpty) {
throw L10nException('classNameString argument cannot be null or empty'); throw L10nException('classNameString argument cannot be null or empty');
} }
...@@ -858,23 +887,22 @@ class LocalizationsGenerator { ...@@ -858,23 +887,22 @@ class LocalizationsGenerator {
"The 'output-class', $classNameString, is not a valid public Dart class name.\n" "The 'output-class', $classNameString, is not a valid public Dart class name.\n"
); );
} }
_className = classNameString; return classNameString;
} }
/// Sets [preferredSupportedLocales] so that this particular list of locales /// Sets [preferredSupportedLocales] so that this particular list of locales
/// will take priority over the other locales. /// will take priority over the other locales.
@visibleForTesting @visibleForTesting
void setPreferredSupportedLocales(List<String> inputLocales) { static List<LocaleInfo> preferredSupportedLocalesFromLocales(List<String> inputLocales) {
if (inputLocales == null || inputLocales.isEmpty) { if (inputLocales == null || inputLocales.isEmpty) {
_preferredSupportedLocales = const <LocaleInfo>[]; return const <LocaleInfo>[];
} else { }
_preferredSupportedLocales = inputLocales.map((String localeString) { return inputLocales.map((String localeString) {
return LocaleInfo.fromString(localeString); return LocaleInfo.fromString(localeString);
}).toList(); }).toList();
} }
}
void _setHeader(String headerString, String headerFile) { static String headerFromFile(String headerString, String headerFile, Directory inputDirectory) {
if (headerString != null && headerFile != null) { if (headerString != null && headerFile != null) {
throw L10nException( throw L10nException(
'Cannot accept both header and header file arguments. \n' 'Cannot accept both header and header file arguments. \n'
...@@ -883,10 +911,10 @@ class LocalizationsGenerator { ...@@ -883,10 +911,10 @@ class LocalizationsGenerator {
} }
if (headerString != null) { if (headerString != null) {
header = headerString; return headerString;
} else if (headerFile != null) { } else if (headerFile != null) {
try { try {
header = _fs.file(globals.fs.path.join(inputDirectory.path, headerFile)).readAsStringSync(); return inputDirectory.childFile(headerFile).readAsStringSync();
} on FileSystemException catch (error) { } on FileSystemException catch (error) {
throw L10nException ( throw L10nException (
'Failed to read header file: "$headerFile". \n' 'Failed to read header file: "$headerFile". \n'
...@@ -894,38 +922,28 @@ class LocalizationsGenerator { ...@@ -894,38 +922,28 @@ class LocalizationsGenerator {
); );
} }
} }
return '';
} }
String _getAbsoluteProjectPath(String relativePath) => globals.fs.path.join(projectDirectory.path, relativePath); static String _getAbsoluteProjectPath(String relativePath, Directory projectDirectory) =>
projectDirectory.fileSystem.path.join(projectDirectory.path, relativePath);
void _setUseDeferredLoading(bool useDeferredLoading) { static File _untranslatedMessagesFileFromPath(FileSystem fileSystem, String untranslatedMessagesFileString) {
if (useDeferredLoading == null) {
throw L10nException('useDeferredLoading argument cannot be null.');
}
_useDeferredLoading = useDeferredLoading;
}
void _setUntranslatedMessagesFile(String untranslatedMessagesFileString) {
if (untranslatedMessagesFileString == null || untranslatedMessagesFileString.isEmpty) { if (untranslatedMessagesFileString == null || untranslatedMessagesFileString.isEmpty) {
return; return null;
} }
_untranslatedMessagesFile = _fs.file( return fileSystem.file(untranslatedMessagesFileString);
globals.fs.path.join(untranslatedMessagesFileString),
);
} }
void _setInputsAndOutputsListFile(String inputsAndOutputsListPath) { static File _inputsAndOutputsListFileFromPath(FileSystem fileSystem, String inputsAndOutputsListPath) {
if (inputsAndOutputsListPath == null) { if (inputsAndOutputsListPath == null) {
return; return null;
} }
_inputsAndOutputsListFile = _fs.file( return fileSystem.file(
globals.fs.path.join(inputsAndOutputsListPath, 'gen_l10n_inputs_and_outputs.json'), fileSystem.path.join(inputsAndOutputsListPath, 'gen_l10n_inputs_and_outputs.json'),
); );
_inputFileList = <String>[];
_outputFileList = <String>[];
} }
static bool _isValidGetterAndMethodName(String name) { static bool _isValidGetterAndMethodName(String name) {
...@@ -954,7 +972,7 @@ class LocalizationsGenerator { ...@@ -954,7 +972,7 @@ class LocalizationsGenerator {
final AppResourceBundle templateBundle = AppResourceBundle(templateArbFile); final AppResourceBundle templateBundle = AppResourceBundle(templateArbFile);
_templateArbLocale = templateBundle.locale; _templateArbLocale = templateBundle.locale;
_allMessages = templateBundle.resourceIds.map((String id) => Message( _allMessages = templateBundle.resourceIds.map((String id) => Message(
templateBundle.resources, id, _areResourceAttributesRequired, templateBundle.resources, id, areResourceAttributesRequired,
)); ));
for (final String resourceId in templateBundle.resourceIds) { for (final String resourceId in templateBundle.resourceIds) {
if (!_isValidGetterAndMethodName(resourceId)) { if (!_isValidGetterAndMethodName(resourceId)) {
...@@ -968,7 +986,7 @@ class LocalizationsGenerator { ...@@ -968,7 +986,7 @@ class LocalizationsGenerator {
} }
_allBundles = AppResourceBundleCollection(inputDirectory); _allBundles = AppResourceBundleCollection(inputDirectory);
if (_inputsAndOutputsListFile != null) { if (inputsAndOutputsListFile != null) {
_inputFileList.addAll(_allBundles.bundles.map((AppResourceBundle bundle) { _inputFileList.addAll(_allBundles.bundles.map((AppResourceBundle bundle) {
return bundle.file.absolute.path; return bundle.file.absolute.path;
})); }));
...@@ -1077,8 +1095,8 @@ class LocalizationsGenerator { ...@@ -1077,8 +1095,8 @@ class LocalizationsGenerator {
.map((AppResourceBundle bundle) => bundle.locale).toList(); .map((AppResourceBundle bundle) => bundle.locale).toList();
} }
final String directory = globals.fs.path.basename(outputDirectory.path); final String directory = _fs.path.basename(outputDirectory.path);
final String outputFileName = globals.fs.path.basename(baseOutputFile.path); final String outputFileName = _fs.path.basename(baseOutputFile.path);
final Iterable<String> supportedLocalesCode = supportedLocales.map((LocaleInfo locale) { final Iterable<String> supportedLocalesCode = supportedLocales.map((LocaleInfo locale) {
final String languageCode = locale.languageCode; final String languageCode = locale.languageCode;
...@@ -1104,9 +1122,7 @@ class LocalizationsGenerator { ...@@ -1104,9 +1122,7 @@ class LocalizationsGenerator {
final String fileName = outputFileName.split('.')[0]; final String fileName = outputFileName.split('.')[0];
for (final LocaleInfo locale in allLocales) { for (final LocaleInfo locale in allLocales) {
if (isBaseClassLocale(locale, locale.languageCode)) { if (isBaseClassLocale(locale, locale.languageCode)) {
final File languageMessageFile = _fs.file( final File languageMessageFile = outputDirectory.childFile('${fileName}_$locale.dart');
globals.fs.path.join(outputDirectory.path, '${fileName}_$locale.dart'),
);
// Generate the template for the base class file. Further string // Generate the template for the base class file. Further string
// interpolation will be done to determine if there are // interpolation will be done to determine if there are
...@@ -1168,10 +1184,10 @@ class LocalizationsGenerator { ...@@ -1168,10 +1184,10 @@ class LocalizationsGenerator {
.replaceAll('@(supportedLanguageCodes)', supportedLanguageCodes.join(', ')) .replaceAll('@(supportedLanguageCodes)', supportedLanguageCodes.join(', '))
.replaceAll('@(messageClassImports)', sortedClassImports.join('\n')) .replaceAll('@(messageClassImports)', sortedClassImports.join('\n'))
.replaceAll('@(delegateClass)', delegateClass) .replaceAll('@(delegateClass)', delegateClass)
.replaceAll('@(requiresFoundationImport)', _useDeferredLoading ? '' : "import 'package:flutter/foundation.dart';") .replaceAll('@(requiresFoundationImport)', useDeferredLoading ? '' : "import 'package:flutter/foundation.dart';")
.replaceAll('@(requiresIntlImport)', _containsPluralMessage() ? "import 'package:intl/intl.dart' as intl;" : '') .replaceAll('@(requiresIntlImport)', _containsPluralMessage() ? "import 'package:intl/intl.dart' as intl;" : '')
.replaceAll('@(canBeNullable)', _usesNullableGetter ? '?' : '') .replaceAll('@(canBeNullable)', usesNullableGetter ? '?' : '')
.replaceAll('@(needsNullCheck)', _usesNullableGetter ? '' : '!'); .replaceAll('@(needsNullCheck)', usesNullableGetter ? '' : '!');
} }
bool _containsPluralMessage() => _allMessages.any((Message message) => message.isPlural); bool _containsPluralMessage() => _allMessages.any((Message message) => message.isPlural);
...@@ -1182,8 +1198,8 @@ class LocalizationsGenerator { ...@@ -1182,8 +1198,8 @@ class LocalizationsGenerator {
// A pubspec.yaml file is required when using a synthetic package. If it does not // A pubspec.yaml file is required when using a synthetic package. If it does not
// exist, create a blank one. // exist, create a blank one.
if (_useSyntheticPackage) { if (useSyntheticPackage) {
final Directory syntheticPackageDirectory = _fs.directory(defaultSyntheticPackagePath); final Directory syntheticPackageDirectory = _fs.directory(_defaultSyntheticPackagePath(_fs));
syntheticPackageDirectory.createSync(recursive: true); syntheticPackageDirectory.createSync(recursive: true);
final File flutterGenPubspec = syntheticPackageDirectory.childFile('pubspec.yaml'); final File flutterGenPubspec = syntheticPackageDirectory.childFile('pubspec.yaml');
if (!flutterGenPubspec.existsSync()) { if (!flutterGenPubspec.existsSync()) {
...@@ -1207,14 +1223,14 @@ class LocalizationsGenerator { ...@@ -1207,14 +1223,14 @@ class LocalizationsGenerator {
// Generate the required files for localizations. // Generate the required files for localizations.
_languageFileMap.forEach((File file, String contents) { _languageFileMap.forEach((File file, String contents) {
file.writeAsStringSync(contents); file.writeAsStringSync(contents);
if (_inputsAndOutputsListFile != null) { if (inputsAndOutputsListFile != null) {
_outputFileList.add(file.absolute.path); _outputFileList.add(file.absolute.path);
} }
}); });
baseOutputFile.writeAsStringSync(_generatedLocalizationsFile); baseOutputFile.writeAsStringSync(_generatedLocalizationsFile);
if (_untranslatedMessagesFile != null) { if (untranslatedMessagesFile != null) {
_generateUntranslatedMessagesFile(logger); _generateUntranslatedMessagesFile(logger);
} else if (_unimplementedMessages.isNotEmpty) { } else if (_unimplementedMessages.isNotEmpty) {
_unimplementedMessages.forEach((LocaleInfo locale, List<String> messages) { _unimplementedMessages.forEach((LocaleInfo locale, List<String> messages) {
...@@ -1242,15 +1258,15 @@ class LocalizationsGenerator { ...@@ -1242,15 +1258,15 @@ class LocalizationsGenerator {
); );
} }
if (_inputsAndOutputsListFile != null) { if (inputsAndOutputsListFile != null) {
_outputFileList.add(baseOutputFile.absolute.path); _outputFileList.add(baseOutputFile.absolute.path);
// Generate a JSON file containing the inputs and outputs of the gen_l10n script. // Generate a JSON file containing the inputs and outputs of the gen_l10n script.
if (!_inputsAndOutputsListFile.existsSync()) { if (!inputsAndOutputsListFile.existsSync()) {
_inputsAndOutputsListFile.createSync(recursive: true); inputsAndOutputsListFile.createSync(recursive: true);
} }
_inputsAndOutputsListFile.writeAsStringSync( inputsAndOutputsListFile.writeAsStringSync(
json.encode(<String, Object> { json.encode(<String, Object> {
'inputs': _inputFileList, 'inputs': _inputFileList,
'outputs': _outputFileList, 'outputs': _outputFileList,
...@@ -1267,9 +1283,9 @@ class LocalizationsGenerator { ...@@ -1267,9 +1283,9 @@ class LocalizationsGenerator {
} }
if (_unimplementedMessages.isEmpty) { if (_unimplementedMessages.isEmpty) {
_untranslatedMessagesFile.writeAsStringSync('{}'); untranslatedMessagesFile.writeAsStringSync('{}');
if (_inputsAndOutputsListFile != null) { if (inputsAndOutputsListFile != null) {
_outputFileList.add(_untranslatedMessagesFile.absolute.path); _outputFileList.add(untranslatedMessagesFile.absolute.path);
} }
return; return;
} }
...@@ -1297,9 +1313,9 @@ class LocalizationsGenerator { ...@@ -1297,9 +1313,9 @@ class LocalizationsGenerator {
}); });
resultingFile += '}\n'; resultingFile += '}\n';
_untranslatedMessagesFile.writeAsStringSync(resultingFile); untranslatedMessagesFile.writeAsStringSync(resultingFile);
if (_inputsAndOutputsListFile != null) { if (inputsAndOutputsListFile != null) {
_outputFileList.add(_untranslatedMessagesFile.absolute.path); _outputFileList.add(untranslatedMessagesFile.absolute.path);
} }
} }
} }
...@@ -9,119 +9,12 @@ import 'package:flutter_tools/src/base/file_system.dart'; ...@@ -9,119 +9,12 @@ import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/build_system/build_system.dart'; import 'package:flutter_tools/src/build_system/build_system.dart';
import 'package:flutter_tools/src/build_system/targets/localizations.dart'; import 'package:flutter_tools/src/build_system/targets/localizations.dart';
import 'package:flutter_tools/src/localizations/gen_l10n.dart';
import 'package:flutter_tools/src/localizations/localizations_utils.dart'; import 'package:flutter_tools/src/localizations/localizations_utils.dart';
import 'package:mockito/mockito.dart';
import '../../../src/common.dart'; import '../../../src/common.dart';
import '../../../src/fake_process_manager.dart'; import '../../../src/fake_process_manager.dart';
void main() { void main() {
// Verifies that values are correctly passed through the localizations
// target, but does not validate them beyond the serialized data type.
testWithoutContext('generateLocalizations forwards arguments correctly', () async {
final FileSystem fileSystem = MemoryFileSystem.test();
final Logger logger = BufferLogger.test();
final Directory flutterProjectDirectory = fileSystem
.directory(fileSystem.path.join('path', 'to', 'flutter_project'))
..createSync(recursive: true);
final Directory arbDirectory = flutterProjectDirectory
.childDirectory('arb')
..createSync();
arbDirectory.childFile('foo.arb').createSync();
arbDirectory.childFile('bar.arb').createSync();
final LocalizationOptions options = LocalizationOptions(
header: 'HEADER',
headerFile: Uri.file('header'),
arbDirectory: Uri.file('arb'),
deferredLoading: true,
outputClass: 'Foo',
outputLocalizationsFile: Uri.file('bar'),
outputDirectory: Uri.directory(fileSystem.path.join('lib', 'l10n')),
preferredSupportedLocales: <String>['en_US'],
templateArbFile: Uri.file('example.arb'),
untranslatedMessagesFile: Uri.file('untranslated'),
useSyntheticPackage: false,
areResourceAttributesRequired: true,
usesNullableGetter: false,
);
final LocalizationsGenerator mockLocalizationsGenerator = MockLocalizationsGenerator();
generateLocalizations(
localizationsGenerator: mockLocalizationsGenerator,
options: options,
logger: logger,
projectDir: fileSystem.currentDirectory,
dependenciesDir: fileSystem.currentDirectory,
);
verify(
mockLocalizationsGenerator.initialize(
inputPathString: 'arb',
outputPathString: fileSystem.path.join('lib', 'l10n/'),
templateArbFileName: 'example.arb',
outputFileString: 'bar',
classNameString: 'Foo',
preferredSupportedLocales: <String>['en_US'],
headerString: 'HEADER',
headerFile: 'header',
useDeferredLoading: true,
inputsAndOutputsListPath: '/',
useSyntheticPackage: false,
projectPathString: '/',
areResourceAttributesRequired: true,
untranslatedMessagesFile: 'untranslated',
usesNullableGetter: false,
),
).called(1);
verify(mockLocalizationsGenerator.loadResources()).called(1);
verify(mockLocalizationsGenerator.writeOutputFiles(logger, isFromYaml: true)).called(1);
});
testWithoutContext('generateLocalizations throws exception on missing flutter: generate: true flag', () async {
final FileSystem fileSystem = MemoryFileSystem.test();
final BufferLogger logger = BufferLogger.test();
final Directory arbDirectory = fileSystem.directory('arb')
..createSync();
arbDirectory.childFile('foo.arb').createSync();
arbDirectory.childFile('bar.arb').createSync();
// Missing flutter: generate: true should throw exception.
fileSystem.file('pubspec.yaml').writeAsStringSync('''
flutter:
uses-material-design: true
''');
final LocalizationOptions options = LocalizationOptions(
header: 'HEADER',
headerFile: Uri.file('header'),
arbDirectory: Uri.file('arb'),
deferredLoading: true,
outputClass: 'Foo',
outputLocalizationsFile: Uri.file('bar'),
preferredSupportedLocales: <String>['en_US'],
templateArbFile: Uri.file('example.arb'),
untranslatedMessagesFile: Uri.file('untranslated'),
// Set synthetic package to true.
useSyntheticPackage: true,
);
final LocalizationsGenerator mockLocalizationsGenerator = MockLocalizationsGenerator();
expect(
() => generateLocalizations(
localizationsGenerator: mockLocalizationsGenerator,
options: options,
logger: logger,
projectDir: fileSystem.currentDirectory,
dependenciesDir: fileSystem.currentDirectory,
),
throwsToolExit(
message: 'Attempted to generate localizations code without having the '
'flutter: generate flag turned on.',
),
);
});
testWithoutContext('generateLocalizations is skipped if l10n.yaml does not exist.', () async { testWithoutContext('generateLocalizations is skipped if l10n.yaml does not exist.', () async {
final FileSystem fileSystem = MemoryFileSystem.test(); final FileSystem fileSystem = MemoryFileSystem.test();
final Environment environment = Environment.test( final Environment environment = Environment.test(
...@@ -207,5 +100,3 @@ use-deferred-loading: string ...@@ -207,5 +100,3 @@ use-deferred-loading: string
); );
}); });
} }
class MockLocalizationsGenerator extends Mock implements LocalizationsGenerator {}
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
// @dart = 2.8 // @dart = 2.8
import 'dart:io';
import 'package:file/memory.dart'; import 'package:file/memory.dart';
import 'package:yaml/yaml.dart'; import 'package:yaml/yaml.dart';
...@@ -77,9 +75,7 @@ void main() { ...@@ -77,9 +75,7 @@ void main() {
String syntheticL10nPackagePath; String syntheticL10nPackagePath;
setUp(() { setUp(() {
fs = MemoryFileSystem( fs = MemoryFileSystem.test();
style: Platform.isWindows ? FileSystemStyle.windows : FileSystemStyle.posix
);
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');
...@@ -89,9 +85,8 @@ void main() { ...@@ -89,9 +85,8 @@ void main() {
group('Setters', () { group('Setters', () {
testWithoutContext('setInputDirectory fails if the directory does not exist', () { testWithoutContext('setInputDirectory fails if the directory does not exist', () {
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.setInputDirectory('lib'); LocalizationsGenerator.inputDirectoryFromPath(fs, 'lib', fs.directory('bogus'));
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('Make sure that the correct path was provided')); expect(e.message, contains('Make sure that the correct path was provided'));
return; return;
...@@ -105,9 +100,8 @@ void main() { ...@@ -105,9 +100,8 @@ void main() {
testWithoutContext('setInputDirectory fails if input string is null', () { testWithoutContext('setInputDirectory fails if input string is null', () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.setInputDirectory(null); LocalizationsGenerator.inputDirectoryFromPath(fs, null, fs.directory('bogus'));
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('cannot be null')); expect(e.message, contains('cannot be null'));
return; return;
...@@ -124,10 +118,8 @@ void main() { ...@@ -124,10 +118,8 @@ void main() {
'synthetic package option', 'synthetic package option',
() { () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize(useSyntheticPackage: false); LocalizationsGenerator.outputDirectoryFromPath(fs, null, false, null);
generator.setOutputDirectory(null);
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('cannot be null')); expect(e.message, contains('cannot be null'));
return; return;
...@@ -141,9 +133,8 @@ void main() { ...@@ -141,9 +133,8 @@ void main() {
); );
testWithoutContext('setTemplateArbFile fails if inputDirectory is null', () { testWithoutContext('setTemplateArbFile fails if inputDirectory is null', () {
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.setTemplateArbFile(defaultTemplateArbFileName); LocalizationsGenerator.templateArbFileFromFileName(defaultTemplateArbFileName, null);
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('cannot be null')); expect(e.message, contains('cannot be null'));
return; return;
...@@ -157,9 +148,8 @@ void main() { ...@@ -157,9 +148,8 @@ void main() {
testWithoutContext('setTemplateArbFile fails if templateArbFileName is null', () { testWithoutContext('setTemplateArbFile fails if templateArbFileName is null', () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.setTemplateArbFile(null); LocalizationsGenerator.templateArbFileFromFileName(null, fs.directory('bogus'));
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('cannot be null')); expect(e.message, contains('cannot be null'));
return; return;
...@@ -171,43 +161,10 @@ void main() { ...@@ -171,43 +161,10 @@ void main() {
); );
}); });
testWithoutContext('setTemplateArbFile fails if input string is null', () {
_standardFlutterDirectoryL10nSetup(fs);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try {
generator.setTemplateArbFile(null);
} on L10nException catch (e) {
expect(e.message, contains('cannot be null'));
return;
}
fail(
'LocalizationsGenerator.setTemplateArbFile should fail if the '
'input string is null.'
);
});
testWithoutContext('setBaseOutputFile fails if input string is null', () {
_standardFlutterDirectoryL10nSetup(fs);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try {
generator.setBaseOutputFile(null);
} on L10nException catch (e) {
expect(e.message, contains('cannot be null'));
return;
}
fail(
'LocalizationsGenerator.setBaseOutputFile should fail if the '
'input string is null.'
);
});
testWithoutContext('setting className fails if input string is null', () { testWithoutContext('setting className fails if input string is null', () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.className = null; LocalizationsGenerator.classNameFromString(null);
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('cannot be null')); expect(e.message, contains('cannot be null'));
return; return;
...@@ -235,19 +192,19 @@ void main() { ...@@ -235,19 +192,19 @@ void main() {
.writeAsStringSync(singleEsMessageArbFileString); .writeAsStringSync(singleEsMessageArbFileString);
// Run localizations generator in specified absolute path. // Run localizations generator in specified absolute path.
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
final String flutterProjectPath = fs.path.join('absolute', 'path', 'to', 'flutter_project'); final String flutterProjectPath = fs.path.join('absolute', 'path', 'to', 'flutter_project');
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
projectPathString: flutterProjectPath, projectPathString: flutterProjectPath,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
throw TestFailure('Unexpected failure during test setup: ${e.message}'); throw TestFailure('Unexpected failure during test setup: ${e.message}');
} on Exception catch (e) { } on Exception catch (e) {
...@@ -289,9 +246,9 @@ void main() { ...@@ -289,9 +246,9 @@ void main() {
.writeAsStringSync(singleEsMessageArbFileString); .writeAsStringSync(singleEsMessageArbFileString);
// Project path should be intentionally a directory that does not exist. // Project path should be intentionally a directory that does not exist.
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
projectPathString: 'absolute/path/to/flutter_project', projectPathString: 'absolute/path/to/flutter_project',
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
...@@ -311,23 +268,13 @@ void main() { ...@@ -311,23 +268,13 @@ void main() {
}); });
group('className should only take valid Dart class names', () { group('className should only take valid Dart class names', () {
LocalizationsGenerator generator;
setUp(() { setUp(() {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
generator = LocalizationsGenerator(fs);
try {
generator.setInputDirectory(defaultL10nPathString);
generator.setOutputDirectory(null);
generator.setTemplateArbFile(defaultTemplateArbFileName);
generator.setBaseOutputFile(defaultOutputFileString);
} on L10nException catch (e) {
throw TestFailure('Unexpected failure during test setup: ${e.message}');
}
}); });
testWithoutContext('fails on string with spaces', () { testWithoutContext('fails on string with spaces', () {
try { try {
generator.className = 'String with spaces'; LocalizationsGenerator.classNameFromString('String with spaces');
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('is not a valid public Dart class name')); expect(e.message, contains('is not a valid public Dart class name'));
return; return;
...@@ -340,7 +287,7 @@ void main() { ...@@ -340,7 +287,7 @@ void main() {
testWithoutContext('fails on non-alphanumeric symbols', () { testWithoutContext('fails on non-alphanumeric symbols', () {
try { try {
generator.className = 'TestClass@123'; LocalizationsGenerator.classNameFromString('TestClass@123');
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('is not a valid public Dart class name')); expect(e.message, contains('is not a valid public Dart class name'));
return; return;
...@@ -353,7 +300,7 @@ void main() { ...@@ -353,7 +300,7 @@ void main() {
testWithoutContext('fails on camel-case', () { testWithoutContext('fails on camel-case', () {
try { try {
generator.className = 'camelCaseClassName'; LocalizationsGenerator.classNameFromString('camelCaseClassName');
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('is not a valid public Dart class name')); expect(e.message, contains('is not a valid public Dart class name'));
return; return;
...@@ -366,7 +313,7 @@ void main() { ...@@ -366,7 +313,7 @@ void main() {
testWithoutContext('fails when starting with a number', () { testWithoutContext('fails when starting with a number', () {
try { try {
generator.className = '123ClassName'; LocalizationsGenerator.classNameFromString('123ClassName');
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('is not a valid public Dart class name')); expect(e.message, contains('is not a valid public Dart class name'));
return; return;
...@@ -384,8 +331,8 @@ void main() { ...@@ -384,8 +331,8 @@ void main() {
LocalizationsGenerator generator; LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); generator = LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -409,8 +356,8 @@ void main() { ...@@ -409,8 +356,8 @@ void main() {
LocalizationsGenerator generator; LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); generator = LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -432,11 +379,9 @@ void main() { ...@@ -432,11 +379,9 @@ void main() {
.writeAsStringSync(singleMessageArbFileString); .writeAsStringSync(singleMessageArbFileString);
l10nDirectory.childFile('app_localizations_es.arb') l10nDirectory.childFile('app_localizations_es.arb')
.writeAsStringSync(singleEsMessageArbFileString); .writeAsStringSync(singleEsMessageArbFileString);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: 'app_localizations_en.arb', templateArbFileName: 'app_localizations_en.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
...@@ -461,17 +406,14 @@ void main() { ...@@ -461,17 +406,14 @@ void main() {
.writeAsStringSync(singleMessageArbFileString); .writeAsStringSync(singleMessageArbFileString);
l10nDirectory.childFile('app_localizations_en_CA_foo.arb') l10nDirectory.childFile('app_localizations_en_CA_foo.arb')
.writeAsStringSync(singleMessageArbFileString); .writeAsStringSync(singleMessageArbFileString);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: 'app_localizations_en.arb', templateArbFileName: 'app_localizations_en.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
) ).loadResources();
..loadResources();
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('The following .arb file\'s locale could not be determined')); expect(e.message, contains('The following .arb file\'s locale could not be determined'));
return; return;
...@@ -486,11 +428,9 @@ void main() { ...@@ -486,11 +428,9 @@ void main() {
..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString)
..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString); ..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -524,11 +464,9 @@ void main() { ...@@ -524,11 +464,9 @@ void main() {
..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString)
..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString); ..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -567,11 +505,9 @@ void main() { ...@@ -567,11 +505,9 @@ void main() {
..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString)
..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString); ..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -606,11 +542,9 @@ void main() { ...@@ -606,11 +542,9 @@ void main() {
..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString)
..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString); ..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
...@@ -643,11 +577,9 @@ void main() { ...@@ -643,11 +577,9 @@ void main() {
..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(twoMessageArbFileString)
..childFile(esArbFileName).writeAsStringSync(twoMessageArbFileString); ..childFile(esArbFileName).writeAsStringSync(twoMessageArbFileString);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -667,11 +599,9 @@ void main() { ...@@ -667,11 +599,9 @@ void main() {
testUsingContext('untranslated messages file included in generated JSON list of outputs', () { testUsingContext('untranslated messages file included in generated JSON list of outputs', () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
...@@ -702,11 +632,9 @@ void main() { ...@@ -702,11 +632,9 @@ void main() {
'null while not using the synthetic package option', 'null while not using the synthetic package option',
() { () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
// outputPathString is intentionally not defined // outputPathString is intentionally not defined
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -745,11 +673,9 @@ void main() { ...@@ -745,11 +673,9 @@ void main() {
.childFile(esArbFileName) .childFile(esArbFileName)
.writeAsStringSync(singleEsMessageArbFileString); .writeAsStringSync(singleEsMessageArbFileString);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: fs.path.join('lib', 'l10n', 'output'), outputPathString: fs.path.join('lib', 'l10n', 'output'),
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -777,11 +703,9 @@ void main() { ...@@ -777,11 +703,9 @@ void main() {
() { () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: fs.path.join('lib', 'l10n', 'output'), outputPathString: fs.path.join('lib', 'l10n', 'output'),
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -809,11 +733,9 @@ void main() { ...@@ -809,11 +733,9 @@ void main() {
() { () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: fs.path.join('lib', 'l10n', 'output'), outputPathString: fs.path.join('lib', 'l10n', 'output'),
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -846,11 +768,9 @@ void main() { ...@@ -846,11 +768,9 @@ void main() {
() { () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: fs.path.join('lib', 'l10n', 'output'), outputPathString: fs.path.join('lib', 'l10n', 'output'),
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -882,11 +802,9 @@ void main() { ...@@ -882,11 +802,9 @@ void main() {
testUsingContext('creates list of inputs and outputs when file path is specified', () { testUsingContext('creates list of inputs and outputs when file path is specified', () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
...@@ -924,10 +842,9 @@ void main() { ...@@ -924,10 +842,9 @@ void main() {
..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString) ..childFile(esArbFileName).writeAsStringSync(singleEsMessageArbFileString)
..childFile('header.txt').writeAsStringSync('/// Sample header in a text file'); ..childFile('header.txt').writeAsStringSync('/// Sample header in a text file');
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -954,10 +871,9 @@ void main() { ...@@ -954,10 +871,9 @@ void main() {
l10nDirectory.childFile('header.txt') l10nDirectory.childFile('header.txt')
.writeAsStringSync('/// Sample header in a text file'); .writeAsStringSync('/// Sample header in a text file');
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -973,27 +889,104 @@ void main() { ...@@ -973,27 +889,104 @@ void main() {
fail('Setting headerFile that does not exist should fail'); fail('Setting headerFile that does not exist should fail');
}); });
testUsingContext('setting useDefferedLoading to null should fail', () { group('generateLocalizations', () {
testWithoutContext('forwards arguments correctly', () async {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
final LocalizationOptions options = LocalizationOptions(
header: 'HEADER',
arbDirectory: Uri.directory(defaultL10nPathString),
deferredLoading: true,
outputClass: 'Foo',
outputLocalizationsFile: Uri.file('bar', windows: false),
outputDirectory: Uri.directory(defaultL10nPathString, windows: false),
preferredSupportedLocales: <String>['es'],
templateArbFile: Uri.file(defaultTemplateArbFileName, windows: false),
untranslatedMessagesFile: Uri.file('untranslated', windows: false),
useSyntheticPackage: false,
areResourceAttributesRequired: true,
usesNullableGetter: false,
);
LocalizationsGenerator generator; // Verify that values are correctly passed through the localizations target.
try { final LocalizationsGenerator generator = generateLocalizations(
generator = LocalizationsGenerator(fs); fileSystem: fs,
generator.initialize( options: options,
inputPathString: defaultL10nPathString, logger: BufferLogger.test(),
outputPathString: defaultL10nPathString, projectDir: fs.currentDirectory,
templateArbFileName: defaultTemplateArbFileName, dependenciesDir: fs.currentDirectory,
outputFileString: defaultOutputFileString, );
classNameString: defaultClassNameString,
headerString: '/// Sample header', expect(generator.inputDirectory.path, '/lib/l10n/');
useDeferredLoading: null, expect(generator.outputDirectory.path, '/lib/l10n/');
expect(generator.templateArbFile.path, '/lib/l10n/app_en.arb');
expect(generator.baseOutputFile.path, '/lib/l10n/bar');
expect(generator.className, 'Foo');
expect(generator.preferredSupportedLocales.single, LocaleInfo.fromString('es'));
expect(generator.header, 'HEADER');
expect(generator.useDeferredLoading, isTrue);
expect(generator.inputsAndOutputsListFile.path, '/gen_l10n_inputs_and_outputs.json');
expect(generator.useSyntheticPackage, isFalse);
expect(generator.projectDirectory.path, '/');
expect(generator.areResourceAttributesRequired, isTrue);
expect(generator.untranslatedMessagesFile.path, 'untranslated');
expect(generator.usesNullableGetter, isFalse);
// Just validate one file.
expect(fs.file('/lib/l10n/bar_en.dart').readAsStringSync(), '''
HEADER
import 'bar';
/// The translations for English (`en`).
class FooEn extends Foo {
FooEn([String locale = 'en']) : super(locale);
@override
String get title => 'Title';
}
''');
});
testWithoutContext('throws exception on missing flutter: generate: true flag', () async {
_standardFlutterDirectoryL10nSetup(fs);
// Missing flutter: generate: true should throw exception.
fs.file(fs.path.join(syntheticPackagePath, 'pubspec.yaml'))
..createSync(recursive: true)
..writeAsStringSync('''
flutter:
uses-material-design: true
''');
final LocalizationOptions options = LocalizationOptions(
header: 'HEADER',
headerFile: Uri.file('header', windows: false),
arbDirectory: Uri.file('arb', windows: false),
deferredLoading: true,
outputClass: 'Foo',
outputLocalizationsFile: Uri.file('bar', windows: false),
preferredSupportedLocales: <String>['en_US'],
templateArbFile: Uri.file('example.arb', windows: false),
untranslatedMessagesFile: Uri.file('untranslated', windows: false),
// Set synthetic package to true.
useSyntheticPackage: true,
); );
} on L10nException catch (e) {
expect(e.message, contains('useDeferredLoading argument cannot be null.'));
return;
}
fail('Setting useDefferedLoading to null should fail'); expect(
() => generateLocalizations(
fileSystem: fs,
options: options,
logger: BufferLogger.test(),
projectDir: fs.currentDirectory,
dependenciesDir: fs.currentDirectory,
),
throwsToolExit(
message: 'Attempted to generate localizations code without having the '
'flutter: generate flag turned on.',
),
);
});
}); });
group('loadResources', () { group('loadResources', () {
...@@ -1002,15 +995,14 @@ void main() { ...@@ -1002,15 +995,14 @@ void main() {
LocalizationsGenerator generator; LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); generator = LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )..loadResources();
generator.loadResources();
} on L10nException catch (e) { } on L10nException catch (e) {
fail('Setting language and locales should not fail: \n${e.message}'); fail('Setting language and locales should not fail: \n${e.message}');
} }
...@@ -1032,8 +1024,8 @@ void main() { ...@@ -1032,8 +1024,8 @@ void main() {
LocalizationsGenerator generator; LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); generator = LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -1063,8 +1055,8 @@ void main() { ...@@ -1063,8 +1055,8 @@ void main() {
const List<String> preferredSupportedLocale = <String>['zh', 'es']; const List<String> preferredSupportedLocale = <String>['zh', 'es'];
LocalizationsGenerator generator; LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); generator = LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -1097,18 +1089,16 @@ void main() { ...@@ -1097,18 +1089,16 @@ void main() {
.writeAsStringSync(singleZhMessageArbFileString); .writeAsStringSync(singleZhMessageArbFileString);
const List<String> preferredSupportedLocale = <String>['am', 'es']; const List<String> preferredSupportedLocale = <String>['am', 'es'];
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
preferredSupportedLocales: preferredSupportedLocale, preferredSupportedLocales: preferredSupportedLocale,
); ).loadResources();
generator.loadResources();
} on L10nException catch (e) { } on L10nException catch (e) {
expect( expect(
e.message, e.message,
...@@ -1137,8 +1127,8 @@ void main() { ...@@ -1137,8 +1127,8 @@ void main() {
LocalizationsGenerator generator; LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); generator = LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
...@@ -1183,8 +1173,8 @@ void main() { ...@@ -1183,8 +1173,8 @@ void main() {
LocalizationsGenerator generator; LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); generator = LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: 'first_file.arb', templateArbFileName: 'first_file.arb',
...@@ -1228,8 +1218,8 @@ void main() { ...@@ -1228,8 +1218,8 @@ void main() {
LocalizationsGenerator generator; LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); generator = LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: 'app_es.arb', templateArbFileName: 'app_es.arb',
...@@ -1254,8 +1244,8 @@ void main() { ...@@ -1254,8 +1244,8 @@ void main() {
..childFile('app.arb') ..childFile('app.arb')
.writeAsStringSync(singleMessageArbFileString); .writeAsStringSync(singleMessageArbFileString);
try { try {
final LocalizationsGenerator generator = LocalizationsGenerator(fs); final LocalizationsGenerator generator = LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: 'app.arb', templateArbFileName: 'app.arb',
...@@ -1289,15 +1279,14 @@ void main() { ...@@ -1289,15 +1279,14 @@ void main() {
.writeAsStringSync(secondMessageArbFileString); .writeAsStringSync(secondMessageArbFileString);
try { try {
final LocalizationsGenerator generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: 'app_en.arb', templateArbFileName: 'app_en.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); ).loadResources();
generator.loadResources();
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains("Multiple arb files with the same 'en' locale detected")); expect(e.message, contains("Multiple arb files with the same 'en' locale detected"));
return; return;
...@@ -1316,15 +1305,14 @@ void main() { ...@@ -1316,15 +1305,14 @@ void main() {
.writeAsStringSync(singleMessageArbFileString); .writeAsStringSync(singleMessageArbFileString);
try { try {
final LocalizationsGenerator generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator.initialize( fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: 'app_en_US.arb', templateArbFileName: 'app_en_US.arb',
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); ).loadResources();
generator.loadResources();
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('Arb file for a fallback, en, does not exist')); expect(e.message, contains('Arb file for a fallback, en, does not exist'));
return; return;
...@@ -1340,18 +1328,18 @@ void main() { ...@@ -1340,18 +1328,18 @@ void main() {
group('writeOutputFiles', () { group('writeOutputFiles', () {
testUsingContext('message without placeholders - should generate code comment with description and template message translation', () { testUsingContext('message without placeholders - should generate code comment with description and template message translation', () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
final BufferLogger testLogger = BufferLogger.test(); final BufferLogger testLogger = BufferLogger.test();
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(testLogger); ..writeOutputFiles(testLogger);
} on Exception catch (e) { } on Exception catch (e) {
fail('Generating output files should not fail: $e'); fail('Generating output files should not fail: $e');
} }
...@@ -1384,19 +1372,19 @@ void main() { ...@@ -1384,19 +1372,19 @@ void main() {
l10nDirectory.childFile(esArbFileName) l10nDirectory.childFile(esArbFileName)
.writeAsStringSync(singleEsMessageArbFileString); .writeAsStringSync(singleEsMessageArbFileString);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
final BufferLogger testLogger = BufferLogger.test(); final BufferLogger testLogger = BufferLogger.test();
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(testLogger); ..writeOutputFiles(testLogger);
} on Exception catch (e) { } on Exception catch (e) {
fail('Generating output files should not fail: $e'); fail('Generating output files should not fail: $e');
} }
...@@ -1438,18 +1426,18 @@ void main() { ...@@ -1438,18 +1426,18 @@ void main() {
"price": "el precio de este artículo es: ${price}" "price": "el precio de este artículo es: ${price}"
}'''); }''');
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
final BufferLogger testLogger = BufferLogger.test(); final BufferLogger testLogger = BufferLogger.test();
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(testLogger); ..writeOutputFiles(testLogger);
} on Exception catch (e) { } on Exception catch (e) {
final L10nException exception = e as L10nException; final L10nException exception = e as L10nException;
print(exception.message); print(exception.message);
...@@ -1479,17 +1467,17 @@ void main() { ...@@ -1479,17 +1467,17 @@ void main() {
..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString)
..childFile('app_en_CA.arb').writeAsStringSync(singleEnCaMessageArbFileString); ..childFile('app_en_CA.arb').writeAsStringSync(singleEnCaMessageArbFileString);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on Exception catch (e) { } on Exception catch (e) {
fail('Generating output files should not fail: $e'); fail('Generating output files should not fail: $e');
} }
...@@ -1511,18 +1499,18 @@ void main() { ...@@ -1511,18 +1499,18 @@ void main() {
..childFile('app_es.arb').writeAsStringSync(singleEsMessageArbFileString); ..childFile('app_es.arb').writeAsStringSync(singleEsMessageArbFileString);
const List<String> preferredSupportedLocale = <String>['zh']; const List<String> preferredSupportedLocale = <String>['zh'];
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
preferredSupportedLocales: preferredSupportedLocale, preferredSupportedLocales: preferredSupportedLocale,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on Exception catch (e) { } on Exception catch (e) {
fail('Generating output files should not fail: $e'); fail('Generating output files should not fail: $e');
} }
...@@ -1542,17 +1530,17 @@ import 'output-localization-file_zh.dart'; ...@@ -1542,17 +1530,17 @@ import 'output-localization-file_zh.dart';
fs.currentDirectory.childDirectory('lib').childDirectory('l10n')..createSync(recursive: true) fs.currentDirectory.childDirectory('lib').childDirectory('l10n')..createSync(recursive: true)
..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString); ..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useDeferredLoading: true, useDeferredLoading: true,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on Exception catch (e) { } on Exception catch (e) {
fail('Generating output files should not fail: $e'); fail('Generating output files should not fail: $e');
} }
...@@ -1588,16 +1576,16 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1588,16 +1576,16 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(singleDateMessageArbFileString); .writeAsStringSync(singleDateMessageArbFileString);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('asdf')); expect(e.message, contains('asdf'));
expect(e.message, contains('springStartDate')); expect(e.message, contains('springStartDate'));
...@@ -1626,17 +1614,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1626,17 +1614,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(singleDateMessageArbFileString); .writeAsStringSync(singleDateMessageArbFileString);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('the "format" attribute needs to be set')); expect(e.message, contains('the "format" attribute needs to be set'));
return; return;
...@@ -1664,17 +1652,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1664,17 +1652,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(singleDateMessageArbFileString); .writeAsStringSync(singleDateMessageArbFileString);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('asdf')); expect(e.message, contains('asdf'));
expect(e.message, contains('progress')); expect(e.message, contains('progress'));
...@@ -1701,17 +1689,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1701,17 +1689,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(pluralMessageWithoutPlaceholdersAttribute); .writeAsStringSync(pluralMessageWithoutPlaceholdersAttribute);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('Check to see if the plural message is in the proper ICU syntax format')); expect(e.message, contains('Check to see if the plural message is in the proper ICU syntax format'));
return; return;
...@@ -1734,17 +1722,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1734,17 +1722,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(pluralMessageWithEmptyPlaceholdersMap); .writeAsStringSync(pluralMessageWithEmptyPlaceholdersMap);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('Check to see if the plural message is in the proper ICU syntax format')); expect(e.message, contains('Check to see if the plural message is in the proper ICU syntax format'));
return; return;
...@@ -1763,17 +1751,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1763,17 +1751,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(pluralMessageWithoutResourceAttributes); .writeAsStringSync(pluralMessageWithoutResourceAttributes);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('Resource attribute "@helloWorlds" was not found')); expect(e.message, contains('Resource attribute "@helloWorlds" was not found'));
return; return;
...@@ -1795,17 +1783,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1795,17 +1783,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(pluralMessageWithIncorrectPlaceholderFormat); .writeAsStringSync(pluralMessageWithIncorrectPlaceholderFormat);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('is not properly formatted')); expect(e.message, contains('is not properly formatted'));
expect(e.message, contains('Ensure that it is a map with string valued keys')); expect(e.message, contains('Ensure that it is a map with string valued keys'));
...@@ -1820,17 +1808,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1820,17 +1808,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString)
..childFile('app_es.arb').writeAsStringSync(singleEsMessageArbFileString); ..childFile('app_es.arb').writeAsStringSync(singleEsMessageArbFileString);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on Exception catch (e) { } on Exception catch (e) {
fail('Generating output files should not fail: $e'); fail('Generating output files should not fail: $e');
} }
...@@ -1864,17 +1852,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1864,17 +1852,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
..childFile(defaultTemplateArbFileName).writeAsStringSync(pluralMessageArb) ..childFile(defaultTemplateArbFileName).writeAsStringSync(pluralMessageArb)
..childFile('app_es.arb').writeAsStringSync(pluralMessageEsArb); ..childFile('app_es.arb').writeAsStringSync(pluralMessageEsArb);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on Exception catch (e) { } on Exception catch (e) {
fail('Generating output files should not fail: $e'); fail('Generating output files should not fail: $e');
} }
...@@ -1890,18 +1878,18 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1890,18 +1878,18 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString)
..childFile('app_es.arb').writeAsStringSync(singleEsMessageArbFileString); ..childFile('app_es.arb').writeAsStringSync(singleEsMessageArbFileString);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useDeferredLoading: true, useDeferredLoading: true,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on Exception catch (e) { } on Exception catch (e) {
fail('Generating output files should not fail: $e'); fail('Generating output files should not fail: $e');
} }
...@@ -1917,18 +1905,18 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -1917,18 +1905,18 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString) ..childFile(defaultTemplateArbFileName).writeAsStringSync(singleMessageArbFileString)
..childFile('app_es.arb').writeAsStringSync(singleEsMessageArbFileString); ..childFile('app_es.arb').writeAsStringSync(singleEsMessageArbFileString);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
useDeferredLoading: false, useDeferredLoading: false,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on Exception catch (e) { } on Exception catch (e) {
fail('Generating output files should not fail: $e'); fail('Generating output files should not fail: $e');
} }
...@@ -2046,17 +2034,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2046,17 +2034,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
..childFile(defaultTemplateArbFileName).writeAsStringSync(enArbCheckList) ..childFile(defaultTemplateArbFileName).writeAsStringSync(enArbCheckList)
..childFile('app_es.arb').writeAsStringSync(esArbCheckList); ..childFile('app_es.arb').writeAsStringSync(esArbCheckList);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on Exception catch (e) { } on Exception catch (e) {
if (e is L10nException) { if (e is L10nException) {
print(e.message); print(e.message);
...@@ -2112,17 +2100,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2112,17 +2100,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
..childFile(defaultTemplateArbFileName).writeAsStringSync(enArbCheckList) ..childFile(defaultTemplateArbFileName).writeAsStringSync(enArbCheckList)
..childFile('app_es.arb').writeAsStringSync(esArbCheckList); ..childFile('app_es.arb').writeAsStringSync(esArbCheckList);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on Exception catch (e) { } on Exception catch (e) {
if (e is L10nException) { if (e is L10nException) {
print(e.message); print(e.message);
...@@ -2160,17 +2148,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2160,17 +2148,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(arbFileWithTrailingComma); .writeAsStringSync(arbFileWithTrailingComma);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('app_en.arb')); expect(e.message, contains('app_en.arb'));
expect(e.message, contains('FormatException')); expect(e.message, contains('FormatException'));
...@@ -2195,18 +2183,18 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2195,18 +2183,18 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(arbFileWithMissingResourceAttribute); .writeAsStringSync(arbFileWithMissingResourceAttribute);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
areResourceAttributesRequired: true, areResourceAttributesRequired: true,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('Resource attribute "@title" was not found')); expect(e.message, contains('Resource attribute "@title" was not found'));
return; return;
...@@ -2232,17 +2220,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2232,17 +2220,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(nonAlphaNumericArbFile); .writeAsStringSync(nonAlphaNumericArbFile);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('Invalid ARB resource name')); expect(e.message, contains('Invalid ARB resource name'));
return; return;
...@@ -2264,17 +2252,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2264,17 +2252,17 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(nonAlphaNumericArbFile); .writeAsStringSync(nonAlphaNumericArbFile);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
outputPathString: defaultL10nPathString, outputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('Invalid ARB resource name')); expect(e.message, contains('Invalid ARB resource name'));
return; return;
...@@ -2296,16 +2284,16 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2296,16 +2284,16 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
l10nDirectory.childFile(defaultTemplateArbFileName) l10nDirectory.childFile(defaultTemplateArbFileName)
.writeAsStringSync(nonAlphaNumericArbFile); .writeAsStringSync(nonAlphaNumericArbFile);
final LocalizationsGenerator generator = LocalizationsGenerator(fs);
try { try {
generator.initialize( LocalizationsGenerator(
fileSystem: fs,
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
classNameString: defaultClassNameString, classNameString: defaultClassNameString,
); )
generator.loadResources(); ..loadResources()
generator.writeOutputFiles(BufferLogger.test()); ..writeOutputFiles(BufferLogger.test());
} on L10nException catch (e) { } on L10nException catch (e) {
expect(e.message, contains('Invalid ARB resource name')); expect(e.message, contains('Invalid ARB resource name'));
return; return;
...@@ -2318,11 +2306,9 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2318,11 +2306,9 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
testUsingContext('should generate a valid pubspec.yaml file when using synthetic package if it does not already exist', () { testUsingContext('should generate a valid pubspec.yaml file when using synthetic package if it does not already exist', () {
_standardFlutterDirectoryL10nSetup(fs); _standardFlutterDirectoryL10nSetup(fs);
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
...@@ -2354,11 +2340,9 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e ...@@ -2354,11 +2340,9 @@ import 'output-localization-file_en.dart' deferred as output-localization-file_e
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync('abcd'); ..writeAsStringSync('abcd');
LocalizationsGenerator generator;
try { try {
generator = LocalizationsGenerator(fs); LocalizationsGenerator(
generator fileSystem: fs,
..initialize(
inputPathString: defaultL10nPathString, inputPathString: defaultL10nPathString,
templateArbFileName: defaultTemplateArbFileName, templateArbFileName: defaultTemplateArbFileName,
outputFileString: defaultOutputFileString, outputFileString: defaultOutputFileString,
......
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