mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
6b444c4dd7
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.
162 lines
6.7 KiB
Dart
162 lines
6.7 KiB
Dart
// 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);
|
||
});
|
||
}
|