Index: packages/intl/test/plural_test.dart |
diff --git a/packages/intl/test/plural_test.dart b/packages/intl/test/plural_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..65a5f67d9ca4eacb5e43f296e7f5286881e2575d |
--- /dev/null |
+++ b/packages/intl/test/plural_test.dart |
@@ -0,0 +1,208 @@ |
+// Copyright (c) 2016, 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. |
+ |
+/// Test plurals without translation. |
+/// |
+/// This exercises the plural selection rules. We aren't worried about the text, |
+/// just that it picks the right phrase for the right number. |
+ |
+library plural_test; |
+ |
+import 'package:intl/intl.dart'; |
+import 'package:test/test.dart'; |
+ |
+/// Hard-coded expected values for a Russian plural rule. |
+/// |
+/// Note that the way I'm interpreting this is that if there's a case for zero, |
+/// one or two and the number is exactly that, then use that value. Otherwise we |
+/// use One for the singular, Few for the genitive singular, and Many for the |
+/// genitive plural. Other would be used for fractional values if we supported |
+/// those. |
+var expectedRu = ''' |
+0:Zero |
+1:One |
+2:Few |
+3:Few |
+4:Few |
+5:Many |
+6:Many |
+7:Many |
+8:Many |
+9:Many |
+10:Many |
+11:Many |
+12:Many |
+13:Many |
+14:Many |
+15:Many |
+16:Many |
+17:Many |
+18:Many |
+19:Many |
+20:Many |
+21:One |
+22:Few |
+23:Few |
+24:Few |
+25:Many |
+26:Many |
+27:Many |
+28:Many |
+29:Many |
+30:Many |
+31:One |
+32:Few |
+59:Many |
+60:Many |
+61:One |
+62:Few |
+63:Few |
+64:Few |
+65:Many |
+66:Many |
+67:Many |
+68:Many |
+69:Many |
+70:Many |
+71:One |
+72:Few |
+100:Many |
+101:One |
+102:Few |
+103:Few |
+104:Few |
+105:Many |
+106:Many |
+107:Many |
+108:Many |
+109:Many |
+110:Many |
+111:Many |
+112:Many |
+113:Many |
+114:Many |
+115:Many |
+116:Many |
+117:Many |
+118:Many |
+119:Many |
+120:Many |
+121:One |
+122:Few |
+129:Many |
+130:Many |
+131:One |
+132:Few |
+139:Many |
+140:Many |
+141:One |
+142:Few |
+143:Few |
+144:Few |
+145:Many |
+'''; |
+ |
+var expectedEn = ''' |
+0:Zero |
+1:One |
+2:Other |
+3:Other |
+4:Other |
+5:Other |
+6:Other |
+7:Other |
+8:Other |
+9:Other |
+10:Other |
+11:Other |
+12:Other |
+13:Other |
+14:Other |
+15:Other |
+16:Other |
+17:Other |
+18:Other |
+19:Other |
+20:Other |
+21:Other |
+22:Other |
+145:Other |
+'''; |
+ |
+var expectedRo = ''' |
+0:Few |
+1:One |
+2:Few |
+12:Few |
+23:Other |
+1212:Few |
+1223:Other |
+'''; |
+ |
+var expectedSr = ''' |
+0:Other |
+1:One |
+31:One |
+3:Few |
+33:Few |
+5:Other |
+10:Other |
+35:Other |
+37:Other |
+40:Other |
+2:Few |
+20:Other |
+21:One |
+22:Few |
+23:Few |
+24:Few |
+25:Other |
+'''; |
+ |
+plural(n, locale) => Intl.plural(n, |
+ locale: locale, |
+ name: 'plural', |
+ desc: 'A simple plural test case', |
+ examples: {'n': 1}, |
+ args: [n], |
+ zero: '$n:Zero', |
+ one: '$n:One', |
+ few: '$n:Few', |
+ many: '$n:Many', |
+ other: '$n:Other'); |
+ |
+pluralNoZero(n, locale) => Intl.plural(n, |
+ locale: locale, |
+ name: 'plural', |
+ desc: 'A simple plural test case', |
+ examples: {'n': 1}, |
+ args: [n], |
+ one: '$n:One', |
+ few: '$n:Few', |
+ many: '$n:Many', |
+ other: '$n:Other'); |
+ |
+main() { |
+ verify(expectedRu, 'ru', plural); |
+ verify(expectedRu, 'ru_RU', plural); |
+ verify(expectedEn, 'en', plural); |
+ verify(expectedRo, 'ro', pluralNoZero); |
+ verify(expectedSr, 'sr', pluralNoZero); |
+ |
+ test("Check null howMany", () { |
+ expect(plural(0, null), "0:Zero"); |
+ expect(() => plural(null, null), throwsArgumentError); |
+ expect(() => plural(null, "ru"), throwsArgumentError); |
+ }); |
+} |
+ |
+verify(expectedValues, locale, pluralFunction) { |
+ var lines = expectedValues.split('\n').where((x) => x.isNotEmpty).toList(); |
+ for (var i = 0; i < lines.length; i++) { |
+ test(lines[i], () { |
+ var number = int.parse(lines[i].split(':').first); |
+ expect(pluralFunction(number, locale), lines[i]); |
+ }); |
+ } |
+} |