blob: 461f36e393c4f82501d89f3c74b88ce5272306d2 [file]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. 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:convert';
import 'package:intl/intl.dart' as old_intl;
import 'package:messages/messages_json.dart';
import 'package:messages_builder/arb_parser.dart';
import 'package:messages_builder/parameterized_message.dart';
import 'package:messages_serializer/messages_serializer.dart';
import 'package:test/test.dart';
import 'testarb.arb.dart';
Message intlPluralSelector(
num howMany,
String locale, {
Map<int, Message>? numberCases,
Map<int, Message>? wordCases,
Message? few,
Message? many,
required Message other,
}) {
return old_intl.Intl.pluralLogic(
howMany,
few: few,
many: many,
zero: numberCases?[0] ?? wordCases?[0],
one: numberCases?[1] ?? wordCases?[1],
two: numberCases?[2] ?? wordCases?[2],
other: other,
locale: locale,
);
}
void main() {
test('generateMessageFile from Object json', () {
final message = StringMessage('Hello World');
final message1 = ParameterizedMessage(message, 'helloWorld', []);
final messageList = <ParameterizedMessage>[message1];
final buffer = JsonSerializer()
.serialize('', '', messageList.map((e) => e.message).toList())
.data;
final messages =
JsonDeserializer(buffer).deserialize(intlPluralSelector).messages;
expect((messages[0] as StringMessage).value, message.value);
});
test('generateMessageFile from simple arb JSON', () {
final arb = <String, dynamic>{
'@@locale': 'en',
'helloWorld': 'Hello World'
};
final parsed = ArbParser().parseMessageFile(arb);
final buffer = JsonSerializer()
.serialize('', '', parsed.messages.map((e) => e.message).toList())
.data;
final messages =
JsonDeserializer(buffer).deserialize(intlPluralSelector).messages;
expect((messages[0] as StringMessage).value, 'Hello World');
});
test('generateMessageFile from simple arb JSON with placeholder', () {
final arb = <String, dynamic>{
'@@locale': 'en',
'helloWorld': 'Hello {name}'
};
final parsed = ArbParser().parseMessageFile(arb);
final buffer = JsonSerializer()
.serialize('', '', parsed.messages.map((e) => e.message).toList())
.data;
final messages =
JsonDeserializer(buffer).deserialize(intlPluralSelector).messages;
expect((messages[0] as StringMessage).value, 'Hello ');
expect(
(messages[0] as StringMessage).argPositions,
[(argIndex: 0, stringIndex: 6)],
);
});
test('generateMessageFile from simple arb JSON with only placeholders', () {
final arb = <String, dynamic>{
'@@locale': 'en',
'helloWorld': '{greeting}{space}{name}'
};
final parsed = ArbParser().parseMessageFile(arb);
final buffer = JsonSerializer()
.serialize('', '', parsed.messages.map((e) => e.message).toList())
.data;
final messages =
JsonDeserializer(buffer).deserialize(intlPluralSelector).messages;
expect((messages[0] as StringMessage).value, '');
expect(
(messages[0] as StringMessage).argPositions,
[
(argIndex: 0, stringIndex: 0),
(argIndex: 1, stringIndex: 0),
(argIndex: 2, stringIndex: 0),
],
);
});
test('generateMessageFile from complex arb JSON', () {
final arb = jsonDecode(arbFile) as Map<String, dynamic>;
final parsed = ArbParser().parseMessageFile(arb);
final buffer = JsonSerializer()
.serialize('', '', parsed.messages.map((e) => e.message).toList())
.data;
final messages =
JsonDeserializer(buffer).deserialize(intlPluralSelector).messages;
expect(
messages[2].generateString(
['female', 'b'],
pluralSelector: intlPluralSelector,
),
'test One new message');
});
test('Key with spaces is not ok', () {
final key = 'key with spaces';
final message = ArbParser().parseMessage('Some message', null, key, 'id');
expect(message.nameIsDartConform, false);
});
test('Key without spaces is ok', () {
final key = 'key_without_spaces';
final message = ArbParser().parseMessage('Some message', null, key, 'id');
expect(message.nameIsDartConform, true);
});
}