flutter/packages/flutter_tools/test/integration.shard/gen_l10n_test.dart
Jonah Williams 6b444c4dd7
[flutter_tools] standardize patterns for integration.shard (#64980)
Integration tests must only go through the real file system/process manager/platform. The global indirection makes this code harder to understand than if it directly referred to the concrete instances that are being used.

Update the integration shard to use a const instance of a LocalFIleSystem, LocalProcessManager, and LocalPlatform. Remove global usage and apply testWithoutContext.
2020-09-08 15:56:00 -07:00

162 lines
6.7 KiB
Dart
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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 'dart:async';
import 'package:file/file.dart';
import '../src/common.dart';
import 'test_data/gen_l10n_project.dart';
import 'test_driver.dart';
import 'test_utils.dart';
final GenL10nProject project = GenL10nProject();
// Verify that the code generated by gen_l10n executes correctly.
// It can fail if gen_l10n produces a lib/l10n/app_localizations.dart that:
// - Does not analyze cleanly.
// - Can't be processed by the intl_translation:generate_from_arb tool.
// The generate_from_arb step can take close to a minute on a lightly
// loaded workstation, so the test could time out on a heavily loaded bot.
void main() {
Directory tempDir;
FlutterRunTestDriver flutter;
setUp(() async {
tempDir = createResolvedTempDirectorySync('gen_l10n_test.');
});
tearDown(() async {
await flutter.stop();
tryToDelete(tempDir);
});
Future<StringBuffer> runApp() async {
// Run the app defined in GenL10nProject.main and wait for it to
// send '#l10n END' to its stdout.
final Completer<void> l10nEnd = Completer<void>();
final StringBuffer stdout = StringBuffer();
final StreamSubscription<String> subscription = flutter.stdout.listen((String line) {
if (line.contains('#l10n')) {
stdout.writeln(line.substring(line.indexOf('#l10n')));
}
if (line.contains('#l10n END')) {
l10nEnd.complete();
}
});
await flutter.run();
await l10nEnd.future;
await subscription.cancel();
return stdout;
}
void expectOutput(StringBuffer stdout) {
expect(stdout.toString(),
'#l10n 0 (--- supportedLocales tests ---)\n'
'#l10n 1 (supportedLocales[0]: languageCode: en, countryCode: null, scriptCode: null)\n'
'#l10n 2 (supportedLocales[1]: languageCode: en, countryCode: CA, scriptCode: null)\n'
'#l10n 3 (supportedLocales[2]: languageCode: en, countryCode: GB, scriptCode: null)\n'
'#l10n 4 (supportedLocales[3]: languageCode: es, countryCode: null, scriptCode: null)\n'
'#l10n 5 (supportedLocales[4]: languageCode: es, countryCode: 419, scriptCode: null)\n'
'#l10n 6 (supportedLocales[5]: languageCode: zh, countryCode: null, scriptCode: null)\n'
'#l10n 7 (supportedLocales[6]: languageCode: zh, countryCode: null, scriptCode: Hans)\n'
'#l10n 8 (supportedLocales[7]: languageCode: zh, countryCode: null, scriptCode: Hant)\n'
'#l10n 9 (supportedLocales[8]: languageCode: zh, countryCode: TW, scriptCode: Hant)\n'
'#l10n 10 (--- countryCode (en_CA) tests ---)\n'
'#l10n 11 (CA Hello World)\n'
'#l10n 12 (Hello CA fallback World)\n'
'#l10n 13 (--- countryCode (en_GB) tests ---)\n'
'#l10n 14 (GB Hello World)\n'
'#l10n 15 (Hello GB fallback World)\n'
'#l10n 16 (--- zh ---)\n'
'#l10n 17 (你好世界)\n'
'#l10n 18 (你好)\n'
'#l10n 19 (你好世界)\n'
'#l10n 20 (你好2个其他世界)\n'
'#l10n 21 (Hello 世界)\n'
'#l10n 22 (--- scriptCode: zh_Hans ---)\n'
'#l10n 23 (简体你好世界)\n'
'#l10n 24 (--- scriptCode - zh_Hant ---)\n'
'#l10n 25 (繁體你好世界)\n'
'#l10n 26 (--- scriptCode - zh_Hant_TW ---)\n'
'#l10n 27 (台灣繁體你好世界)\n'
'#l10n 28 (--- General formatting tests ---)\n'
'#l10n 29 (Hello World)\n'
'#l10n 30 (Hello _NEWLINE_ World)\n'
'#l10n 31 (Hello World)\n'
'#l10n 32 (Hello World)\n'
'#l10n 33 (Hello World on Friday, January 1, 1960)\n'
'#l10n 34 (Hello world argument on 1/1/1960 at 00:00)\n'
'#l10n 35 (Hello World from 1960 to 2020)\n'
'#l10n 36 (Hello for 123)\n'
'#l10n 37 (Hello for price USD123.00)\n'
'#l10n 38 (Hello)\n'
'#l10n 39 (Hello World)\n'
'#l10n 40 (Hello two worlds)\n'
'#l10n 41 (Hello)\n'
'#l10n 42 (Hello new World)\n'
'#l10n 43 (Hello two new worlds)\n'
'#l10n 44 (Hello on Friday, January 1, 1960)\n'
'#l10n 45 (Hello World, on Friday, January 1, 1960)\n'
'#l10n 46 (Hello two worlds, on Friday, January 1, 1960)\n'
'#l10n 47 (Hello other 0 worlds, with a total of 100 citizens)\n'
'#l10n 48 (Hello World of 101 citizens)\n'
'#l10n 49 (Hello two worlds with 102 total citizens)\n'
'#l10n 50 ([Hello] -World- #123#)\n'
'#l10n 51 (\$!)\n'
'#l10n 52 (One \$)\n'
'#l10n 53 (Flutter\'s amazing!)\n'
'#l10n 54 (Flutter\'s amazing, times 2!)\n'
'#l10n 55 (Flutter is "amazing"!)\n'
'#l10n 56 (Flutter is "amazing", times 2!)\n'
'#l10n 57 (--- es ---)\n'
'#l10n 58 (ES - Hello world)\n'
'#l10n 59 (ES - Hello _NEWLINE_ World)\n'
'#l10n 60 (ES - Hello Mundo)\n'
'#l10n 61 (ES - Hola Mundo)\n'
'#l10n 62 (ES - Hello World on viernes, 1 de enero de 1960)\n'
'#l10n 63 (ES - Hello world argument on 1/1/1960 at 0:00)\n'
'#l10n 64 (ES - Hello World from 1960 to 2020)\n'
'#l10n 65 (ES - Hello for 123)\n'
// Note that the space between "123.00" and "EUR" is a
// non-breaking space (U+00A0) and not a regular space(U+0020)
'#l10n 66 (ES - Hello for el precio 123,00 EUR)\n'
'#l10n 67 (ES - Hello)\n'
'#l10n 68 (ES - Hello World)\n'
'#l10n 69 (ES - Hello two worlds)\n'
'#l10n 70 (ES - Hello)\n'
'#l10n 71 (ES - Hello nuevo World)\n'
'#l10n 72 (ES - Hello two nuevo worlds)\n'
'#l10n 73 (ES - Hello on viernes, 1 de enero de 1960)\n'
'#l10n 74 (ES - Hello World, on viernes, 1 de enero de 1960)\n'
'#l10n 75 (ES - Hello two worlds, on viernes, 1 de enero de 1960)\n'
'#l10n 76 (ES - Hello other 0 worlds, with a total of 100 citizens)\n'
'#l10n 77 (ES - Hello World of 101 citizens)\n'
'#l10n 78 (ES - Hello two worlds with 102 total citizens)\n'
'#l10n 79 (ES - [Hola] -Mundo- #123#)\n'
'#l10n 80 (ES - \$!)\n'
'#l10n 81 (ES - One \$)\n'
'#l10n 82 (ES - Flutter\'s amazing!)\n'
'#l10n 83 (ES - Flutter\'s amazing, times 2!)\n'
'#l10n 84 (ES - Flutter is "amazing"!)\n'
'#l10n 85 (ES - Flutter is "amazing", times 2!)\n'
'#l10n 86 (--- es_419 ---)\n'
'#l10n 87 (ES 419 - Hello World)\n'
'#l10n 88 (ES 419 - Hello)\n'
'#l10n 89 (ES 419 - Hello World)\n'
'#l10n 90 (ES 419 - Hello two worlds)\n'
'#l10n END\n'
);
}
// TODO(jsimmons): need a localization test that uses deferred loading
// (see https://github.com/flutter/flutter/issues/61911)
testWithoutContext('generated l10n classes produce expected localized strings', () async {
await project.setUpIn(tempDir);
flutter = FlutterRunTestDriver(tempDir);
final StringBuffer stdout = await runApp();
expectOutput(stdout);
});
}