| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:file/memory.dart'; |
| import 'package:flutter_tools/src/artifacts.dart'; |
| import 'package:flutter_tools/src/base/file_system.dart'; |
| import 'package:flutter_tools/src/base/logger.dart'; |
| import 'package:flutter_tools/src/cache.dart'; |
| import 'package:flutter_tools/src/commands/generate_localizations.dart'; |
| |
| import '../../integration.shard/test_data/basic_project.dart'; |
| import '../../src/common.dart'; |
| import '../../src/context.dart'; |
| import '../../src/fake_process_manager.dart'; |
| import '../../src/test_flutter_command_runner.dart'; |
| |
| void main() { |
| late FileSystem fileSystem; |
| late BufferLogger logger; |
| late Artifacts artifacts; |
| late FakeProcessManager processManager; |
| |
| setUpAll(() { |
| Cache.disableLocking(); |
| }); |
| |
| setUp(() { |
| fileSystem = MemoryFileSystem.test(); |
| logger = BufferLogger.test(); |
| artifacts = Artifacts.test(); |
| processManager = FakeProcessManager.empty(); |
| }); |
| |
| testUsingContext('default l10n settings', () 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 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('.dart_tool', 'flutter_gen', 'gen_l10n')); |
| expect(outputDirectory.existsSync(), true); |
| expect(outputDirectory.childFile('app_localizations_en.dart').existsSync(), true); |
| expect(outputDirectory.childFile('app_localizations.dart').existsSync(), true); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => fileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| |
| testUsingContext('not using synthetic packages', () async { |
| final Directory l10nDirectory = fileSystem.directory( |
| fileSystem.path.join('lib', 'l10n'), |
| ); |
| final File arbFile = l10nDirectory.childFile( |
| 'app_en.arb', |
| )..createSync(recursive: true); |
| |
| arbFile.writeAsStringSync(''' |
| { |
| "helloWorld": "Hello, World!", |
| "@helloWorld": { |
| "description": "Sample description" |
| } |
| }'''); |
| |
| final GenerateLocalizationsCommand command = GenerateLocalizationsCommand( |
| fileSystem: fileSystem, |
| logger: logger, |
| artifacts: artifacts, |
| processManager: processManager, |
| ); |
| await createTestCommandRunner(command).run(<String>[ |
| 'gen-l10n', |
| '--no-synthetic-package', |
| ]); |
| |
| expect(l10nDirectory.existsSync(), true); |
| expect(l10nDirectory.childFile('app_localizations_en.dart').existsSync(), true); |
| expect(l10nDirectory.childFile('app_localizations.dart').existsSync(), true); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => fileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| |
| testUsingContext('throws error when arguments are invalid', () 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" |
| } |
| }'''); |
| fileSystem.file('header.txt').writeAsStringSync('a header file'); |
| |
| final GenerateLocalizationsCommand command = GenerateLocalizationsCommand( |
| fileSystem: fileSystem, |
| logger: logger, |
| artifacts: artifacts, |
| processManager: processManager, |
| ); |
| expect( |
| () => createTestCommandRunner(command).run(<String>[ |
| 'gen-l10n', |
| '--header="some header', |
| '--header-file="header.txt"', |
| ]), |
| throwsToolExit(), |
| ); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => fileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| |
| testUsingContext('l10n yaml file takes precedence over command line arguments', () 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" |
| } |
| }'''); |
| fileSystem.file('l10n.yaml').createSync(); |
| 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']); |
| |
| expect(logger.statusText, contains('Because l10n.yaml exists, the options defined there will be used instead.')); |
| final Directory outputDirectory = fileSystem.directory(fileSystem.path.join('.dart_tool', 'flutter_gen', 'gen_l10n')); |
| expect(outputDirectory.existsSync(), true); |
| expect(outputDirectory.childFile('app_localizations_en.dart').existsSync(), true); |
| expect(outputDirectory.childFile('app_localizations.dart').existsSync(), true); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => fileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| |
| testUsingContext('nullable-getter help message is expected string', () 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" |
| } |
| }'''); |
| fileSystem.file('l10n.yaml').createSync(); |
| 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']); |
| expect(command.usage, contains(' If this value is set to false, then ')); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => fileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| |
| testUsingContext('dart format is run when --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" |
| } |
| }'''); |
| processManager.addCommand( |
| const FakeCommand( |
| command: <String>[ |
| 'HostArtifact.engineDartBinary', |
| 'format', |
| '/.dart_tool/flutter_gen/gen_l10n/app_localizations_en.dart', |
| '/.dart_tool/flutter_gen/gen_l10n/app_localizations.dart', |
| ] |
| ) |
| ); |
| |
| final GenerateLocalizationsCommand command = GenerateLocalizationsCommand( |
| fileSystem: fileSystem, |
| logger: logger, |
| artifacts: artifacts, |
| processManager: processManager, |
| ); |
| |
| await createTestCommandRunner(command).run(<String>['gen-l10n', '--format']); |
| |
| final Directory outputDirectory = fileSystem.directory(fileSystem.path.join('.dart_tool', 'flutter_gen', 'gen_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>{ |
| FileSystem: () => fileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| |
| testUsingContext('dart format is run when format: true 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: true |
| '''); |
| final File pubspecFile = fileSystem.file('pubspec.yaml')..createSync(); |
| pubspecFile.writeAsStringSync(BasicProjectWithFlutterGen().pubspec); |
| processManager.addCommand( |
| const FakeCommand( |
| command: <String>[ |
| 'HostArtifact.engineDartBinary', |
| 'format', |
| '/.dart_tool/flutter_gen/gen_l10n/app_localizations_en.dart', |
| '/.dart_tool/flutter_gen/gen_l10n/app_localizations.dart', |
| ] |
| ) |
| ); |
| 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('.dart_tool', 'flutter_gen', 'gen_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>{ |
| FileSystem: () => fileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| } |