Commit RELEASE-NOTES line for the wgCategories js variable I added some time ago.
[lhc/web/wiklou.git] / js2 / mwEmbed / tests / testLang.html
1 <html>
2 <head>
3 <title>Test Plural Conversions (should match php) </title>
4 <script type="text/javascript" src="../mv_embed.js"></script>
5 <style>
6 td{
7 border:solid thin black;
8 }
9 </style>
10 <script type="text/javascript" >
11 var scriptLoaderURID = 't15';
12 //for just setting one or two to test at a time for debug
13 //var langKeyDebug = ['sl']; //pl
14 var langKeyDebug = [ 'az', 'da', 'pt', 'fr', 'lv', 'en'];
15 //var langKeyDebug = ['en','az', 'da', 'pt', 'fr', 'lv', 'ga','hr','cy','mk','mt','pl','sl'];
16
17 //longlangKey is every language we have a much more verbose test
18 var langKeyAll = [
19 //no plurals, there are no rules
20 'az','fa','hu','ja','ko','my to','tr','vi','yo','zh',
21 'bo','dz','id','jv ka','km','kn','ms','th',
22
23 /*
24 'zero' => 0,
25 'one' => 1,
26 'two' => 2,
27 //n mod 100 in 3..10
28 'few' => array( 'mod' => 100, 'is'=>'3-10' ),
29 //n mod 100 in 11..99
30 'many' => array( 'mod' => 100, 'is'=>'11-99')
31 */
32 'ar',
33
34 /*
35 'one' => 1
36 */
37 'da','de','el','en','eo','es','et','fi','fo','gl',
38 'he','iw','it','nb','nl','nn','no','pt_PT','sv',
39 'af','bg','bn','ca','eu','fur','fy','gu','ha',
40 'is','ku','lb','ml','mr','nah','ne','om','or',
41 'pa','pap','ps','so','sq','sw','ta','te','tk',
42 'ur','zu','mn','gsw',
43
44 /*
45 'one'=> '0-1'
46 */
47 'pt','am','bh','fil','tl','guw','hi','ln','mg','nso','ti','wa',
48
49 /*
50 'one' => array( 'is'=>'0-2', 'not' => 2)
51 */
52 'fr',
53
54 /*
55 'zero' => 0,
56 //n mod 10 is 1 and n mod 100 is not 11
57 'one'=>array(
58 array( 'mod' => 10, 'is' => 1 ),
59 //AND
60 array( 'mod' => 100, 'not' => 11)
61 )
62 */
63 'lv',
64
65 /*
66 'one' => 1,
67 'two' => 2
68 */
69 'ga','se','sma','smi','smj','smn','sms',
70
71
72 /*
73 'one' => 1,
74 //n is 0 OR n is not 1 AND n mod 100 in 1..19
75 'few' => array(
76 'or'=> array(
77 array( 'is' => 0),
78 array(
79 array( 'not' => 1),
80 //and
81 array( 'mod' => 100, 'is'=>'1-19')
82 )
83 )
84 )
85 */
86 'ro','mo',
87
88
89 /*
90 //n mod 10 is 1 and n mod 100 not in 11..19
91 'one' => array(
92 array( 'mod'=>10, 'is'=> 1 ),
93 array( 'mod'=> 100, 'not'=> '11-19')
94 ),
95 //n mod 10 in 2..9 and n mod 100 not in 11..19
96 'few' => array(
97 array( 'mod'=> 10, 'is'=> '2-9' ),
98 array( 'mod'=> 100, 'not' => '11-19')
99 ),
100 */
101 'lt',
102
103
104 /*
105 //n mod 10 is 1 and n mod 100 is not 11
106 'one' => array(
107 array( 'mod' => 10, 'is' => 1),
108 array( 'mod' => 100, 'not' => 11)
109 ),
110 //n mod 10 in 2..4 and n mod 100 not in 12..14
111 'few' => array(
112 array( 'mod' => 10, 'is' => '2-4'),
113 array( 'mod' => 100, 'not' => '12-14')
114 ),
115 //n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14
116 'many' => array(
117 'or'=>array(
118 array( 'mod'=> 10, 'is' => 0),
119 array( 'mod'=> 10, 'is' => '5-9'),
120 array( 'mod'=> 100, 'is' => '11-14')
121 )
122 ),
123 */
124 'hr','ru','sr','uk','be','bs','sh',
125
126
127 /*
128 'one' => 1,
129 'few' => array(
130 //n mod 10 in 2..4
131 array( 'mod' => 10, 'is' => '2-4'),
132 //and n mod 100 not in 12..14
133 array( 'mod' => 100, 'not'=> '12-14'),
134 //and n mod 100 not in 22..24
135 array( 'mod' => 100, 'in' => '22-24')
136 )
137 */
138 'pl',
139
140 /*
141 'one' => array( 'mod'=>100, 'is' => 1 ),
142 'two' => array( 'mod'=>100, 'is' => 2 ),
143 'few' => array( 'mod'=>100, 'is' => '3-4')
144 */
145 'sl',
146
147
148 /*
149 'one' => 1,
150 //n is 0 or n mod 100 in 2..10
151 'few' => array(
152 array( 'is' => 0 ),
153 'or',
154 array( 'mod' => 100, 'is' => '2-10')
155 ),
156 //n mod 100 in 11..19
157 'many' => array( 'mod'=>100, 'is' => '11-19')
158 */
159 'mt',
160
161 /*
162 'one' => array('mod' => 10, 'is' => '1')
163 */
164 'mk',
165
166 /*
167 'one' => 1,
168 'two' => 2,
169 //n is 8 or n is 11
170 'many' => array(
171 array( 'is' => 8 ),
172 array( 'is' => 11 )
173 )*/
174 'cy'
175 ];
176
177 js2AddOnloadHook( function(){
178 //do mauall script loaders calls to test multiple languages:
179 function doLangTable( langSet ){
180 //build table output:
181 var msgTestSet = {
182 'undelete_short' : [ 0, 1, 2, 5, 21, 30 ],
183 //category-subcat-count' has two params:
184 'category-subcat-count' : [
185 [0,10],
186 [1,2],
187 [3,30]
188 ]
189 };
190
191 var passTest=0;
192 var failTest=0;
193 var testCount=0;
194
195
196 //do a manual call to the script-lodaer:
197 function doProcLangKey(langKey){
198 $j.getScript('../../../mwScriptLoader.php?class=mw.testLang&urid='+ scriptLoaderURID +'&uselang='+langKey, function(){
199 var o='';
200 o+='<tr><td colspan="6" height="20" style="font-size:large"><b>Lang:' + langKey + '</b></td></tr>';
201 //now for each langage msg:
202 $j.each(msgTestSet, function(mKey, mTestSet){
203 //output table names:
204 o+='<tr>'+
205 '<td>$1[,$2]</td>'+
206 '<td width="14%">Msg key</td>'+
207 '<td width="34%">Msg text</td>'+
208 '<td width="24%">Msg Transform JS</td>'+
209 '<td width="24%">Msg Transform Mw</td>'+
210 '</tr>';
211
212 //for each number value
213 for(var i in mTestSet){
214 var numVal = mTestSet[i];
215 var numKey = (typeof numVal== 'object')? numVal.join( '_' ).replace('/ /', '_') : numVal;
216 var tkey = mKey + '_' + numKey + '_' + langKey;
217 o+='<tr>'+
218 '<td>' + numVal + '</td>' +
219 '<td>' + mKey + '</td>' +
220 '<td>' + mw.lang.gMsgNoTrans( mKey ) + '</td>' +
221 '<td id="' + tkey + '_js">' + mw.lang.gM( mKey, numVal ) + '</td>';
222 //show mw col:
223 if( mKey.substr(0, 5) == 'test_' ){
224 o+='<td> (test msg) </td>';
225 }else{
226 o+='<td id="' + tkey + '">loading...</td>';
227
228 //get transform from mw (& compare and highlight)
229 function doPopWmMsg(mKey, numVal, numKey){
230 //set the local tkey:
231 var tkey = mKey + '_' + numKey + '_' + langKey;
232 testCount++;
233 $j('#score_card').html('Running Tests <span id="perc_done">0</sapn>% done');
234 var msgparam = (typeof numVal== 'object')? numVal.join( '|' ) : numVal;
235 do_api_req({
236 'data': {
237 'action' : 'parse',
238 'uselang' : langKey,
239 'text' : '{{int:' + mKey + '|' + msgparam + '}}'
240 },
241 'url' : '../../../api.php'
242 }, function( data ) {
243 var t = '#'+ tkey ;
244 if(data.parse && data.parse.text && data.parse.text['*']){
245 $j(t).html( data.parse.text['*'] );
246 var js_txt = $j.trim( $j(t + '_js').text().replace('\n', '') );
247 var php_txt = $j.trim( $j(t + ' p').text())
248 //just get the part in the <p> to compare with js version
249 if( js_txt != php_txt ){
250 var cat = $j.trim( $j(t + ' p').text() );
251 var dog = $j.trim( $j(t + '_js').text() );
252 if( cat == dog)
253 alert('wtf');
254 //debugger;
255 $j(t).css('color', 'red');
256 failTest++;
257 }else{
258 $j(t).css('color', 'green');
259 passTest++;
260 }
261 var perc = ( failTest + passTest ) / testCount
262 if( perc != 1){
263 $j('#perc_done').html( Math.round(perc*1000)/1000 + '%');
264 }else{
265 var failHtlm = (failTest == 0)?failTest: '<span style="color:red">'+ failTest+'</span>';
266 $j('#score_card').html(
267 'Passed: <span style="color:green">' + passTest + '</span> Failed:' + failHtlm );
268
269 //done with this lang... call outer function if we have lang keys left to proccess:
270 if(langSet.length!=0)
271 doProcLangKey( langSet.pop() );
272 }
273 }else{
274 $t.html(' error ');
275 }
276 });
277 };
278 //pop off an anonymous function call
279 doPopWmMsg(mKey, numVal, numKey);
280 }
281 o+='</tr>';
282 }
283 //output a spacer:
284 o+='<tr><td colspan="6" height="20"> </td></tr>';
285 });
286 //put the output into the page:
287 $j('#table_out').append( o );
288 });
289 }//procc lang key:
290 doProcLangKey( langSet.pop() );
291 }
292 //by default run the "debug" set:
293 doLangTable( langKeyDebug );
294 });
295
296 </script>
297 </head>
298 <body>
299 <h3>Test Javascript plural msg transformations</h3>
300 <div id="score_card" style="font-size:large"></div>
301 <table id="table_out"></table>
302
303
304 </body>
305 </html>