mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Migration of Localization Generation [Option 1](https://docs.flutter.dev/release/breaking-changes/flutter-generate-i10n-source#migration-guide) breaks `dart format . --set-exit-if-changed` checks (as commonly used in pipelines), as the generated file does not comply the `dart format` rules. This PR: - Formats the generated localization files by default - In contrast to [this comment](https://github.com/flutter/flutter/pull/109171#issuecomment-1209710029) I don't see it as breaking as the files are generated dynamically on every change and there's no need in migrating them. Also any tests should not fail as either the format was done manually afterwards anyways, or the formatting was not checked at all (in third party apps / libraries) as the output had not a correct format in any use case of checking via `dart format`. - Add tests for `no-format` - Add option to add arbitrary arguments to the `dart format` command to allow customized formatting Closes #167982 Contributes to: https://github.com/flutter/flutter/issues/102983#issuecomment-2707419112 *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
This commit is contained in:
parent
6ae7e3b575
commit
45f431fde9
@ -356,7 +356,7 @@ class LocalizationOptions {
|
||||
syntheticPackage = syntheticPackage ?? !featureFlags.isExplicitPackageDependenciesEnabled,
|
||||
requiredResourceAttributes = requiredResourceAttributes ?? false,
|
||||
nullableGetter = nullableGetter ?? true,
|
||||
format = format ?? false,
|
||||
format = format ?? true,
|
||||
useEscaping = useEscaping ?? false,
|
||||
suppressWarnings = suppressWarnings ?? false,
|
||||
relaxSyntax = relaxSyntax ?? false,
|
||||
|
||||
@ -202,7 +202,7 @@ flutter:
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
processManager: FakeProcessManager.any(),
|
||||
);
|
||||
await createTestCommandRunner(command).run(<String>['gen-l10n']);
|
||||
|
||||
@ -241,7 +241,7 @@ flutter:
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
processManager: FakeProcessManager.any(),
|
||||
);
|
||||
await createTestCommandRunner(command).run(<String>['gen-l10n']);
|
||||
expect(command.usage, contains(' If this value is set to false, then '));
|
||||
@ -299,6 +299,43 @@ flutter:
|
||||
},
|
||||
);
|
||||
|
||||
testUsingContext(
|
||||
'dart format is not run when --no-format is passed',
|
||||
() async {
|
||||
final File arbFile = fileSystem.file(fileSystem.path.join('lib', 'l10n', 'app_en.arb'))
|
||||
..createSync(recursive: true);
|
||||
arbFile.writeAsStringSync('''
|
||||
{
|
||||
"helloWorld": "Hello, World!",
|
||||
"@helloWorld": {
|
||||
"description": "Sample description"
|
||||
}
|
||||
}''');
|
||||
final File pubspecFile = fileSystem.file('pubspec.yaml')..createSync();
|
||||
pubspecFile.writeAsStringSync(BasicProjectWithFlutterGen().pubspec);
|
||||
|
||||
final GenerateLocalizationsCommand command = GenerateLocalizationsCommand(
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
);
|
||||
|
||||
await createTestCommandRunner(command).run(<String>['gen-l10n', '--no-format']);
|
||||
|
||||
final Directory outputDirectory = fileSystem.directory(fileSystem.path.join('lib', 'l10n'));
|
||||
expect(outputDirectory.existsSync(), true);
|
||||
expect(outputDirectory.childFile('app_localizations_en.dart').existsSync(), true);
|
||||
expect(outputDirectory.childFile('app_localizations.dart').existsSync(), true);
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
},
|
||||
overrides: <Type, Generator>{
|
||||
FeatureFlags: enableExplicitPackageDependencies,
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
},
|
||||
);
|
||||
|
||||
testUsingContext(
|
||||
'dart format is run when format: true is passed into l10n.yaml',
|
||||
() async {
|
||||
@ -348,6 +385,45 @@ format: true
|
||||
},
|
||||
);
|
||||
|
||||
testUsingContext(
|
||||
'dart format is not running when format: false is passed into l10n.yaml',
|
||||
() async {
|
||||
final File arbFile = fileSystem.file(fileSystem.path.join('lib', 'l10n', 'app_en.arb'))
|
||||
..createSync(recursive: true);
|
||||
arbFile.writeAsStringSync('''
|
||||
{
|
||||
"helloWorld": "Hello, World!",
|
||||
"@helloWorld": {
|
||||
"description": "Sample description"
|
||||
}
|
||||
}''');
|
||||
final File configFile = fileSystem.file('l10n.yaml')..createSync();
|
||||
configFile.writeAsStringSync('''
|
||||
format: false
|
||||
''');
|
||||
final File pubspecFile = fileSystem.file('pubspec.yaml')..createSync();
|
||||
pubspecFile.writeAsStringSync(BasicProjectWithFlutterGen().pubspec);
|
||||
final GenerateLocalizationsCommand command = GenerateLocalizationsCommand(
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
);
|
||||
await createTestCommandRunner(command).run(<String>['gen-l10n']);
|
||||
|
||||
final Directory outputDirectory = fileSystem.directory(fileSystem.path.join('lib', 'l10n'));
|
||||
expect(outputDirectory.existsSync(), true);
|
||||
expect(outputDirectory.childFile('app_localizations_en.dart').existsSync(), true);
|
||||
expect(outputDirectory.childFile('app_localizations.dart').existsSync(), true);
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
},
|
||||
overrides: <Type, Generator>{
|
||||
FeatureFlags: enableExplicitPackageDependencies,
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
},
|
||||
);
|
||||
|
||||
// Regression test for https://github.com/flutter/flutter/issues/119594
|
||||
testUsingContext(
|
||||
'dart format is working when the untranslated messages file is produced',
|
||||
|
||||
@ -76,7 +76,6 @@ void main() {
|
||||
late MemoryFileSystem fs;
|
||||
late BufferLogger logger;
|
||||
late Artifacts artifacts;
|
||||
late ProcessManager processManager;
|
||||
late String defaultL10nPathString;
|
||||
late String syntheticPackagePath;
|
||||
late String syntheticL10nPackagePath;
|
||||
@ -152,7 +151,6 @@ void main() {
|
||||
fs = MemoryFileSystem.test();
|
||||
logger = BufferLogger.test();
|
||||
artifacts = Artifacts.test();
|
||||
processManager = FakeProcessManager.empty();
|
||||
|
||||
defaultL10nPathString = fs.path.join('lib', 'l10n');
|
||||
syntheticPackagePath = fs.path.join('.dart_tool', 'flutter_gen');
|
||||
@ -757,7 +755,7 @@ flutter:
|
||||
projectDir: projectDir,
|
||||
dependenciesDir: fs.currentDirectory,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
processManager: FakeProcessManager.any(),
|
||||
);
|
||||
});
|
||||
|
||||
@ -780,7 +778,7 @@ flutter:
|
||||
projectDir: fs.currentDirectory,
|
||||
dependenciesDir: fs.currentDirectory,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
processManager: FakeProcessManager.any(),
|
||||
);
|
||||
});
|
||||
|
||||
@ -809,7 +807,7 @@ flutter:
|
||||
projectDir: fs.currentDirectory,
|
||||
dependenciesDir: fs.currentDirectory,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
processManager: FakeProcessManager.any(),
|
||||
);
|
||||
|
||||
expect(generator.inputDirectory.path, '/lib/l10n/');
|
||||
@ -880,7 +878,7 @@ flutter:
|
||||
projectDir: fs.currentDirectory,
|
||||
dependenciesDir: fs.currentDirectory,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
processManager: FakeProcessManager.any(),
|
||||
),
|
||||
throwsToolExit(
|
||||
message:
|
||||
@ -916,7 +914,7 @@ flutter:\r
|
||||
projectDir: fs.currentDirectory,
|
||||
dependenciesDir: fs.currentDirectory,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
processManager: FakeProcessManager.any(),
|
||||
);
|
||||
final String content = getInPackageGeneratedFileContent(locale: 'en');
|
||||
expect(content, contains('\r\n'));
|
||||
@ -940,7 +938,7 @@ flutter:\r
|
||||
projectDir: fs.currentDirectory,
|
||||
dependenciesDir: fs.currentDirectory,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
processManager: FakeProcessManager.any(),
|
||||
);
|
||||
|
||||
expect(fs.file('/lib/l10n/app_localizations_en.dart').readAsStringSync(), '''
|
||||
@ -973,7 +971,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
projectDir: fs.currentDirectory,
|
||||
dependenciesDir: fs.currentDirectory,
|
||||
artifacts: artifacts,
|
||||
processManager: processManager,
|
||||
processManager: FakeProcessManager.any(),
|
||||
);
|
||||
|
||||
expect(fs.file('/lib/l10n/app_localizations_en.dart').readAsStringSync(), '''
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user