Skip to content

Commit 4b69f4b

Browse files
committed
[test] plural rules with 3 languages with ignorePluralRules in different cases
- English - Russian - Arabic
1 parent 8c46f8d commit 4b69f4b

File tree

1 file changed

+212
-0
lines changed

1 file changed

+212
-0
lines changed
Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
import 'dart:developer';
2+
3+
import 'package:easy_localization/src/easy_localization_controller.dart';
4+
import 'package:easy_localization/src/localization.dart';
5+
import 'package:flutter/material.dart';
6+
import 'package:flutter_test/flutter_test.dart';
7+
8+
import 'utils/test_asset_loaders.dart';
9+
10+
void main() {
11+
// Setup
12+
var r = EasyLocalizationController(
13+
forceLocale: const Locale('fb'),
14+
supportedLocales: [const Locale('en'), const Locale('ar'), const Locale('ru'), const Locale('fb')],
15+
fallbackLocale: const Locale('fb'),
16+
path: 'path',
17+
useOnlyLangCode: true,
18+
useFallbackTranslations: true,
19+
onLoadError: (FlutterError e) {
20+
log(e.toString());
21+
},
22+
saveLocale: false,
23+
assetLoader: const JsonAssetLoader());
24+
25+
setUpAll(() async {
26+
await r.loadTranslations();
27+
});
28+
29+
group('English plural', () {
30+
test('English one (no ignorePluralRules)', () async {
31+
Localization.load(
32+
const Locale('en'),
33+
translations: r.translations,
34+
fallbackTranslations: r.fallbackTranslations,
35+
ignorePluralRules: false,
36+
);
37+
38+
expect(Localization.instance.plural('hat', 1), 'one hat');
39+
});
40+
test('English all cases (no ignorePluralRules)', () async {
41+
Localization.load(
42+
const Locale('en'),
43+
translations: r.translations,
44+
fallbackTranslations: r.fallbackTranslations,
45+
ignorePluralRules: false,
46+
);
47+
48+
expect(Localization.instance.plural('hat', 1), 'one hat');
49+
expect(Localization.instance.plural('hat', 0), 'other hats');
50+
expect(Localization.instance.plural('hat', 2), 'other hats');
51+
expect(Localization.instance.plural('hat', 3), 'other hats');
52+
expect(Localization.instance.plural('hat', 4), 'other hats');
53+
expect(Localization.instance.plural('hat', 11), 'other hats');
54+
expect(Localization.instance.plural('hat', 101), 'other hats');
55+
expect(Localization.instance.plural('hat', 111), 'other hats');
56+
});
57+
test('English all cases (with ignorePluralRules) | using `_pluralCaseFallback`', () async {
58+
Localization.load(
59+
const Locale('en'),
60+
translations: r.translations,
61+
fallbackTranslations: r.fallbackTranslations,
62+
ignorePluralRules: true,
63+
);
64+
65+
expect(Localization.instance.plural('hat', 0), 'no hats');
66+
expect(Localization.instance.plural('hat', 1), 'one hat');
67+
expect(Localization.instance.plural('hat', 2), 'two hats');
68+
expect(Localization.instance.plural('hat', 3), 'other hats');
69+
expect(Localization.instance.plural('hat', 4), 'other hats');
70+
expect(Localization.instance.plural('hat', 11), 'other hats');
71+
expect(Localization.instance.plural('hat', 101), 'other hats');
72+
expect(Localization.instance.plural('hat', 111), 'other hats');
73+
});
74+
});
75+
76+
group('Russian plural', () {
77+
test('Russian one', () async {
78+
Localization.load(
79+
const Locale('ru'),
80+
translations: r.translations,
81+
fallbackTranslations: r.fallbackTranslations,
82+
);
83+
expect(Localization.instance.plural('hat', 1), 'one hat');
84+
});
85+
test('Russian few (no ignorePluralRules)', () async {
86+
Localization.load(
87+
const Locale('ru'),
88+
translations: r.translations,
89+
fallbackTranslations: r.fallbackTranslations,
90+
ignorePluralRules: false,
91+
);
92+
expect(Localization.instance.plural('hat', 2), 'few hats');
93+
expect(Localization.instance.plural('hat', 3), 'few hats');
94+
});
95+
test('Russian few (with ignorePluralRules)', () async {
96+
Localization.load(
97+
const Locale('ru'),
98+
translations: r.translations,
99+
fallbackTranslations: r.fallbackTranslations,
100+
ignorePluralRules: true,
101+
);
102+
expect(Localization.instance.plural('hat', 2), 'two hats');
103+
expect(Localization.instance.plural('hat', 3), 'other hats');
104+
});
105+
test('Russian many (no ignorePluralRules)', () async {
106+
Localization.load(
107+
const Locale('ru'),
108+
translations: r.translations,
109+
fallbackTranslations: r.fallbackTranslations,
110+
ignorePluralRules: false,
111+
);
112+
expect(Localization.instance.plural('hat', 0), 'many hats');
113+
expect(Localization.instance.plural('hat', 5), 'many hats');
114+
expect(Localization.instance.plural('hat', 101), 'one hat');
115+
});
116+
test('Russian many (with ignorePluralRules)', () async {
117+
Localization.load(
118+
const Locale('ru'),
119+
translations: r.translations,
120+
fallbackTranslations: r.fallbackTranslations,
121+
ignorePluralRules: true,
122+
);
123+
expect(Localization.instance.plural('hat', 0), 'no hats');
124+
expect(Localization.instance.plural('hat', 5), 'other hats');
125+
expect(Localization.instance.plural('hat', 101), 'other hats');
126+
});
127+
});
128+
129+
group("Arabic plural", () {
130+
test('Arabic few (no ignorePluralRules)', () async {
131+
Localization.load(
132+
const Locale('ar'),
133+
translations: r.translations,
134+
fallbackTranslations: r.fallbackTranslations,
135+
ignorePluralRules: false,
136+
);
137+
expect(Localization.instance.plural('hat', 2), 'two hats');
138+
expect(Localization.instance.plural('hat', 10), 'few hats');
139+
expect(Localization.instance.plural('hat', 110), 'few hats');
140+
});
141+
test('Arabic few (with ignorePluralRules)', () async {
142+
Localization.load(
143+
const Locale('ar'),
144+
translations: r.translations,
145+
fallbackTranslations: r.fallbackTranslations,
146+
ignorePluralRules: true,
147+
);
148+
expect(Localization.instance.plural('hat', 2), 'two hats');
149+
expect(Localization.instance.plural('hat', 3), 'other hats');
150+
expect(Localization.instance.plural('hat', 10), 'other hats');
151+
expect(Localization.instance.plural('hat', 110), 'other hats');
152+
});
153+
test('Arabic many (no ignorePluralRules)', () async {
154+
Localization.load(
155+
const Locale('ar'),
156+
translations: r.translations,
157+
fallbackTranslations: r.fallbackTranslations,
158+
ignorePluralRules: false,
159+
);
160+
161+
expect(Localization.instance.plural('hat', 11), 'many hats');
162+
expect(Localization.instance.plural('hat', 111), 'many hats');
163+
});
164+
test('Arabic many (with ignorePluralRules)', () async {
165+
Localization.load(
166+
const Locale('ar'),
167+
translations: r.translations,
168+
fallbackTranslations: r.fallbackTranslations,
169+
ignorePluralRules: true,
170+
);
171+
expect(Localization.instance.plural('hat', 10), 'other hats');
172+
expect(Localization.instance.plural('hat', 11), 'other hats');
173+
expect(Localization.instance.plural('hat', 111), 'other hats');
174+
});
175+
test('Arabic all cases (no ignorePluralRules)', () async {
176+
Localization.load(
177+
const Locale('ar'),
178+
translations: r.translations,
179+
fallbackTranslations: r.fallbackTranslations,
180+
ignorePluralRules: false,
181+
);
182+
183+
expect(Localization.instance.plural('hat', 0), 'no hats');
184+
expect(Localization.instance.plural('hat', 1), 'one hat');
185+
expect(Localization.instance.plural('hat', 2), 'two hats');
186+
expect(Localization.instance.plural('hat', 3), 'few hats');
187+
expect(Localization.instance.plural('hat', 4), 'few hats');
188+
expect(Localization.instance.plural('hat', 11), 'many hats');
189+
expect(Localization.instance.plural('hat', 101), 'other hats');
190+
expect(Localization.instance.plural('hat', 111), 'many hats');
191+
expect(Localization.instance.plural('hat', 103), 'few hats');
192+
});
193+
test('Arabic all cases (with ignorePluralRules) | using `_pluralCaseFallback`', () async {
194+
Localization.load(
195+
const Locale('en'),
196+
translations: r.translations,
197+
fallbackTranslations: r.fallbackTranslations,
198+
ignorePluralRules: true,
199+
);
200+
201+
expect(Localization.instance.plural('hat', 0), 'no hats');
202+
expect(Localization.instance.plural('hat', 1), 'one hat');
203+
expect(Localization.instance.plural('hat', 2), 'two hats');
204+
expect(Localization.instance.plural('hat', 3), 'other hats');
205+
expect(Localization.instance.plural('hat', 4), 'other hats');
206+
expect(Localization.instance.plural('hat', 11), 'other hats');
207+
expect(Localization.instance.plural('hat', 101), 'other hats');
208+
expect(Localization.instance.plural('hat', 111), 'other hats');
209+
expect(Localization.instance.plural('hat', 103), 'other hats');
210+
});
211+
});
212+
}

0 commit comments

Comments
 (0)