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