diff options
Diffstat (limited to 'vendor/symfony/translation/Symfony/Component/Translation/Tests/PluralizationRulesTest.php')
-rw-r--r-- | vendor/symfony/translation/Symfony/Component/Translation/Tests/PluralizationRulesTest.php | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/vendor/symfony/translation/Symfony/Component/Translation/Tests/PluralizationRulesTest.php b/vendor/symfony/translation/Symfony/Component/Translation/Tests/PluralizationRulesTest.php new file mode 100644 index 00000000..26f9e2f9 --- /dev/null +++ b/vendor/symfony/translation/Symfony/Component/Translation/Tests/PluralizationRulesTest.php | |||
@@ -0,0 +1,124 @@ | |||
1 | <?php | ||
2 | |||
3 | /* | ||
4 | * This file is part of the Symfony package. | ||
5 | * | ||
6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
7 | * | ||
8 | * For the full copyright and license information, please view the LICENSE | ||
9 | * file that was distributed with this source code. | ||
10 | */ | ||
11 | |||
12 | namespace Symfony\Component\Translation\Tests; | ||
13 | |||
14 | use Symfony\Component\Translation\PluralizationRules; | ||
15 | |||
16 | /** | ||
17 | * Test should cover all languages mentioned on http://translate.sourceforge.net/wiki/l10n/pluralforms | ||
18 | * and Plural forms mentioned on http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms | ||
19 | * | ||
20 | * See also https://developer.mozilla.org/en/Localization_and_Plurals which mentions 15 rules having a maximum of 6 forms. | ||
21 | * The mozilla code is also interesting to check for. | ||
22 | * | ||
23 | * As mentioned by chx http://drupal.org/node/1273968 we can cover all by testing number from 0 to 199 | ||
24 | * | ||
25 | * The goal to cover all languages is to far fetched so this test case is smaller. | ||
26 | * | ||
27 | * @author Clemens Tolboom clemens@build2be.nl | ||
28 | */ | ||
29 | class PluralizationRulesTest extends \PHPUnit_Framework_TestCase | ||
30 | { | ||
31 | |||
32 | /** | ||
33 | * We test failed langcode here. | ||
34 | * | ||
35 | * TODO: The languages mentioned in the data provide need to get fixed somehow within PluralizationRules. | ||
36 | * | ||
37 | * @dataProvider failingLangcodes | ||
38 | */ | ||
39 | public function testFailedLangcodes($nplural, $langCodes) | ||
40 | { | ||
41 | $matrix = $this->generateTestData($nplural, $langCodes); | ||
42 | $this->validateMatrix($nplural, $matrix, false); | ||
43 | } | ||
44 | |||
45 | /** | ||
46 | * @dataProvider successLangcodes | ||
47 | */ | ||
48 | public function testLangcodes($nplural, $langCodes) | ||
49 | { | ||
50 | $matrix = $this->generateTestData($nplural, $langCodes); | ||
51 | $this->validateMatrix($nplural, $matrix); | ||
52 | } | ||
53 | |||
54 | /** | ||
55 | * This array should contain all currently known langcodes. | ||
56 | * | ||
57 | * As it is impossible to have this ever complete we should try as hard as possible to have it almost complete. | ||
58 | * | ||
59 | * @return type | ||
60 | */ | ||
61 | public function successLangcodes() | ||
62 | { | ||
63 | return array( | ||
64 | array('1' , array('ay','bo', 'cgg','dz','id', 'ja', 'jbo', 'ka','kk','km','ko','ky')), | ||
65 | array('2' , array('nl', 'fr', 'en', 'de', 'de_GE')), | ||
66 | array('3' , array('be','bs','cs','hr')), | ||
67 | array('4' , array('cy','mt', 'sl')), | ||
68 | array('5' , array()), | ||
69 | array('6' , array('ar')), | ||
70 | ); | ||
71 | } | ||
72 | |||
73 | /** | ||
74 | * This array should be at least empty within the near future. | ||
75 | * | ||
76 | * This both depends on a complete list trying to add above as understanding | ||
77 | * the plural rules of the current failing languages. | ||
78 | * | ||
79 | * @return array with nplural together with langcodes | ||
80 | */ | ||
81 | public function failingLangcodes() | ||
82 | { | ||
83 | return array( | ||
84 | array('1' , array('fa')), | ||
85 | array('2' , array('jbo')), | ||
86 | array('3' , array('cbs')), | ||
87 | array('4' , array('gd','kw')), | ||
88 | array('5' , array('ga')), | ||
89 | array('6' , array()), | ||
90 | ); | ||
91 | } | ||
92 | |||
93 | /** | ||
94 | * We validate only on the plural coverage. Thus the real rules is not tested. | ||
95 | * | ||
96 | * @param string $nplural plural expected | ||
97 | * @param array $matrix containing langcodes and their plural index values. | ||
98 | * @param boolean $expectSuccess | ||
99 | */ | ||
100 | protected function validateMatrix($nplural, $matrix, $expectSuccess = true) | ||
101 | { | ||
102 | foreach ($matrix as $langCode => $data) { | ||
103 | $indexes = array_flip($data); | ||
104 | if ($expectSuccess) { | ||
105 | $this->assertEquals($nplural, count($indexes), "Langcode '$langCode' has '$nplural' plural forms."); | ||
106 | } else { | ||
107 | $this->assertNotEquals((int) $nplural, count($indexes), "Langcode '$langCode' has '$nplural' plural forms."); | ||
108 | } | ||
109 | } | ||
110 | } | ||
111 | |||
112 | protected function generateTestData($plural, $langCodes) | ||
113 | { | ||
114 | $matrix = array(); | ||
115 | foreach ($langCodes as $langCode) { | ||
116 | for ($count=0; $count<200; $count++) { | ||
117 | $plural = PluralizationRules::get($count, $langCode); | ||
118 | $matrix[$langCode][$count] = $plural; | ||
119 | } | ||
120 | } | ||
121 | |||
122 | return $matrix; | ||
123 | } | ||
124 | } | ||