Chris@0: parsePluralForms($plural); Chris@0: list($nplurals, $new_plural) = $parsed; Chris@0: foreach ($expected as $number => $plural_form) { Chris@0: $result = isset($new_plural[$number]) ? $new_plural[$number] : $new_plural['default']; Chris@0: $this->assertEquals($result, $plural_form, 'Difference found at ' . $number . ': ' . $plural_form . ' versus ' . $result); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Data provider for testPluralsFormula. Chris@0: * Chris@0: * Gets pairs of plural expressions and expected plural positions keyed by Chris@0: * plural value. Chris@0: * Chris@0: * @return array Chris@0: * Pairs of plural expressions and expected plural positions keyed by plural Chris@0: * value. Chris@0: */ Chris@0: public function providerTestPluralsFormula() { Chris@0: return [ Chris@0: [ Chris@0: 'nplurals=1; plural=0;', Chris@0: ['default' => 0], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=2; plural=(n > 1);', Chris@0: [0 => 0, 1 => 0, 'default' => 1], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=2; plural=(n!=1);', Chris@0: [1 => 0, 'default' => 1], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=2; plural=(((n==1)||((n%10)==1))?(0):1);', Chris@0: [ Chris@0: 1 => 0, Chris@0: 11 => 0, Chris@0: 21 => 0, Chris@0: 31 => 0, Chris@0: 41 => 0, Chris@0: 51 => 0, Chris@0: 61 => 0, Chris@0: 71 => 0, Chris@0: 81 => 0, Chris@0: 91 => 0, Chris@0: 101 => 0, Chris@0: 111 => 0, Chris@0: 121 => 0, Chris@0: 131 => 0, Chris@0: 141 => 0, Chris@0: 151 => 0, Chris@0: 161 => 0, Chris@0: 171 => 0, Chris@0: 181 => 0, Chris@0: 191 => 0, Chris@0: 'default' => 1, Chris@0: ], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=3; plural=((((n%10)==1)&&((n%100)!=11))?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));', Chris@0: [ Chris@0: 1 => 0, Chris@0: 2 => 1, Chris@0: 3 => 1, Chris@0: 4 => 1, Chris@0: 21 => 0, Chris@0: 22 => 1, Chris@0: 23 => 1, Chris@0: 24 => 1, Chris@0: 31 => 0, Chris@0: 32 => 1, Chris@0: 33 => 1, Chris@0: 34 => 1, Chris@0: 41 => 0, Chris@0: 42 => 1, Chris@0: 43 => 1, Chris@0: 44 => 1, Chris@0: 51 => 0, Chris@0: 52 => 1, Chris@0: 53 => 1, Chris@0: 54 => 1, Chris@0: 61 => 0, Chris@0: 62 => 1, Chris@0: 63 => 1, Chris@0: 64 => 1, Chris@0: 71 => 0, Chris@0: 72 => 1, Chris@0: 73 => 1, Chris@0: 74 => 1, Chris@0: 81 => 0, Chris@0: 82 => 1, Chris@0: 83 => 1, Chris@0: 84 => 1, Chris@0: 91 => 0, Chris@0: 92 => 1, Chris@0: 93 => 1, Chris@0: 94 => 1, Chris@0: 101 => 0, Chris@0: 102 => 1, Chris@0: 103 => 1, Chris@0: 104 => 1, Chris@0: 121 => 0, Chris@0: 122 => 1, Chris@0: 123 => 1, Chris@0: 124 => 1, Chris@0: 131 => 0, Chris@0: 132 => 1, Chris@0: 133 => 1, Chris@0: 134 => 1, Chris@0: 141 => 0, Chris@0: 142 => 1, Chris@0: 143 => 1, Chris@0: 144 => 1, Chris@0: 151 => 0, Chris@0: 152 => 1, Chris@0: 153 => 1, Chris@0: 154 => 1, Chris@0: 161 => 0, Chris@0: 162 => 1, Chris@0: 163 => 1, Chris@0: 164 => 1, Chris@0: 171 => 0, Chris@0: 172 => 1, Chris@0: 173 => 1, Chris@0: 174 => 1, Chris@0: 181 => 0, Chris@0: 182 => 1, Chris@0: 183 => 1, Chris@0: 184 => 1, Chris@0: 191 => 0, Chris@0: 192 => 1, Chris@0: 193 => 1, Chris@0: 194 => 1, Chris@0: 'default' => 2, Chris@0: ], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=3; plural=((n==1)?(0):(((n>=2)&&(n<=4))?(1):2));', Chris@0: [ Chris@0: 1 => 0, Chris@0: 2 => 1, Chris@0: 3 => 1, Chris@0: 4 => 1, Chris@0: 'default' => 2, Chris@0: ], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=3; plural=((n==1)?(0):(((n==0)||(((n%100)>0)&&((n%100)<20)))?(1):2));', Chris@0: [ Chris@0: 0 => 1, Chris@0: 1 => 0, Chris@0: 2 => 1, Chris@0: 3 => 1, Chris@0: 4 => 1, Chris@0: 5 => 1, Chris@0: 6 => 1, Chris@0: 7 => 1, Chris@0: 8 => 1, Chris@0: 9 => 1, Chris@0: 10 => 1, Chris@0: 11 => 1, Chris@0: 12 => 1, Chris@0: 13 => 1, Chris@0: 14 => 1, Chris@0: 15 => 1, Chris@0: 16 => 1, Chris@0: 17 => 1, Chris@0: 18 => 1, Chris@0: 19 => 1, Chris@0: 101 => 1, Chris@0: 102 => 1, Chris@0: 103 => 1, Chris@0: 104 => 1, Chris@0: 105 => 1, Chris@0: 106 => 1, Chris@0: 107 => 1, Chris@0: 108 => 1, Chris@0: 109 => 1, Chris@0: 110 => 1, Chris@0: 111 => 1, Chris@0: 112 => 1, Chris@0: 113 => 1, Chris@0: 114 => 1, Chris@0: 115 => 1, Chris@0: 116 => 1, Chris@0: 117 => 1, Chris@0: 118 => 1, Chris@0: 119 => 1, Chris@0: 'default' => 2, Chris@0: ], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=3; plural=((n==1)?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));', Chris@0: [ Chris@0: 1 => 0, Chris@0: 2 => 1, Chris@0: 3 => 1, Chris@0: 4 => 1, Chris@0: 22 => 1, Chris@0: 23 => 1, Chris@0: 24 => 1, Chris@0: 32 => 1, Chris@0: 33 => 1, Chris@0: 34 => 1, Chris@0: 42 => 1, Chris@0: 43 => 1, Chris@0: 44 => 1, Chris@0: 52 => 1, Chris@0: 53 => 1, Chris@0: 54 => 1, Chris@0: 62 => 1, Chris@0: 63 => 1, Chris@0: 64 => 1, Chris@0: 72 => 1, Chris@0: 73 => 1, Chris@0: 74 => 1, Chris@0: 82 => 1, Chris@0: 83 => 1, Chris@0: 84 => 1, Chris@0: 92 => 1, Chris@0: 93 => 1, Chris@0: 94 => 1, Chris@0: 102 => 1, Chris@0: 103 => 1, Chris@0: 104 => 1, Chris@0: 122 => 1, Chris@0: 123 => 1, Chris@0: 124 => 1, Chris@0: 132 => 1, Chris@0: 133 => 1, Chris@0: 134 => 1, Chris@0: 142 => 1, Chris@0: 143 => 1, Chris@0: 144 => 1, Chris@0: 152 => 1, Chris@0: 153 => 1, Chris@0: 154 => 1, Chris@0: 162 => 1, Chris@0: 163 => 1, Chris@0: 164 => 1, Chris@0: 172 => 1, Chris@0: 173 => 1, Chris@0: 174 => 1, Chris@0: 182 => 1, Chris@0: 183 => 1, Chris@0: 184 => 1, Chris@0: 192 => 1, Chris@0: 193 => 1, Chris@0: 194 => 1, Chris@0: 'default' => 2, Chris@0: ], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=4; plural=(((n==1)||(n==11))?(0):(((n==2)||(n==12))?(1):(((n>2)&&(n<20))?(2):3)));', Chris@0: [ Chris@0: 1 => 0, Chris@0: 2 => 1, Chris@0: 3 => 2, Chris@0: 4 => 2, Chris@0: 5 => 2, Chris@0: 6 => 2, Chris@0: 7 => 2, Chris@0: 8 => 2, Chris@0: 9 => 2, Chris@0: 10 => 2, Chris@0: 11 => 0, Chris@0: 12 => 1, Chris@0: 13 => 2, Chris@0: 14 => 2, Chris@0: 15 => 2, Chris@0: 16 => 2, Chris@0: 17 => 2, Chris@0: 18 => 2, Chris@0: 19 => 2, Chris@0: 'default' => 3, Chris@0: ], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=4; plural=(((n%100)==1)?(0):(((n%100)==2)?(1):((((n%100)==3)||((n%100)==4))?(2):3)));', Chris@0: [ Chris@0: 1 => 0, Chris@0: 2 => 1, Chris@0: 3 => 2, Chris@0: 4 => 2, Chris@0: 101 => 0, Chris@0: 102 => 1, Chris@0: 103 => 2, Chris@0: 104 => 2, Chris@0: 'default' => 3, Chris@0: ], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=5; plural=((n==1)?(0):((n==2)?(1):((n<7)?(2):((n<11)?(3):4))));', Chris@0: [ Chris@0: 0 => 2, Chris@0: 1 => 0, Chris@0: 2 => 1, Chris@0: 3 => 2, Chris@0: 4 => 2, Chris@0: 5 => 2, Chris@0: 6 => 2, Chris@0: 7 => 3, Chris@0: 8 => 3, Chris@0: 9 => 3, Chris@0: 10 => 3, Chris@0: 'default' => 4, Chris@0: ], Chris@0: ], Chris@0: [ Chris@0: 'nplurals=6; plural=((n==1)?(0):((n==0)?(1):((n==2)?(2):((((n%100)>=3)&&((n%100)<=10))?(3):((((n%100)>=11)&&((n%100)<=99))?(4):5)))));', Chris@0: [ Chris@0: 0 => 1, Chris@0: 1 => 0, Chris@0: 2 => 2, Chris@0: 3 => 3, Chris@0: 4 => 3, Chris@0: 5 => 3, Chris@0: 6 => 3, Chris@0: 7 => 3, Chris@0: 8 => 3, Chris@0: 9 => 3, Chris@0: 10 => 3, Chris@0: 100 => 5, Chris@0: 101 => 5, Chris@0: 102 => 5, Chris@0: 103 => 3, Chris@0: 104 => 3, Chris@0: 105 => 3, Chris@0: 106 => 3, Chris@0: 107 => 3, Chris@0: 108 => 3, Chris@0: 109 => 3, Chris@0: 110 => 3, Chris@0: 'default' => 4, Chris@0: ], Chris@0: ], Chris@0: ]; Chris@0: } Chris@0: Chris@0: }