1 | # This file contains a collection of tests for the msgcat package. |
---|
2 | # Sourcing this file into Tcl runs the tests and |
---|
3 | # generates output for errors. No output means no errors were found. |
---|
4 | # |
---|
5 | # Copyright (c) 1998 Mark Harrison. |
---|
6 | # Copyright (c) 1998-1999 by Scriptics Corporation. |
---|
7 | # Contributions from Don Porter, NIST, 2002. (not subject to US copyright) |
---|
8 | # |
---|
9 | # See the file "license.terms" for information on usage and redistribution |
---|
10 | # of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
---|
11 | # |
---|
12 | # Note that after running these tests, entries will be left behind in the |
---|
13 | # message catalogs for locales foo, foo_BAR, and foo_BAR_baz. |
---|
14 | # |
---|
15 | # RCS: @(#) $Id: msgcat.test,v 1.20 2006/09/11 15:58:01 andreas_kupries Exp $ |
---|
16 | |
---|
17 | package require Tcl 8.2 |
---|
18 | if {[catch {package require tcltest 2}]} { |
---|
19 | puts stderr "Skipping tests in [info script]. tcltest 2 required." |
---|
20 | return |
---|
21 | } |
---|
22 | if {[catch {package require msgcat 1.4.2}]} { |
---|
23 | puts stderr "Skipping tests in [info script]. No msgcat 1.4.2 found to test." |
---|
24 | return |
---|
25 | } |
---|
26 | |
---|
27 | namespace eval ::msgcat::test { |
---|
28 | namespace import ::msgcat::* |
---|
29 | namespace import ::tcltest::test |
---|
30 | namespace import ::tcltest::cleanupTests |
---|
31 | namespace import ::tcltest::temporaryDirectory |
---|
32 | namespace import ::tcltest::make* |
---|
33 | namespace import ::tcltest::remove* |
---|
34 | |
---|
35 | # Tests msgcat-0.*: locale initialization |
---|
36 | |
---|
37 | proc PowerSet {l} { |
---|
38 | if {[llength $l] == 0} {return [list [list]]} |
---|
39 | set element [lindex $l 0] |
---|
40 | set rest [lrange $l 1 end] |
---|
41 | set result [list] |
---|
42 | foreach x [PowerSet $rest] { |
---|
43 | lappend result [linsert $x 0 $element] |
---|
44 | lappend result $x |
---|
45 | } |
---|
46 | return $result |
---|
47 | } |
---|
48 | |
---|
49 | variable envVars {LC_ALL LC_MESSAGES LANG} |
---|
50 | variable count 0 |
---|
51 | variable body |
---|
52 | variable result |
---|
53 | variable setVars |
---|
54 | foreach setVars [PowerSet $envVars] { |
---|
55 | set result [string tolower [lindex $setVars 0]] |
---|
56 | if {[string length $result] == 0} { |
---|
57 | if {[info exists ::tcl::mac::locale]} { |
---|
58 | set result [string tolower $::tcl::mac::locale] |
---|
59 | } else { |
---|
60 | set result c |
---|
61 | } |
---|
62 | } |
---|
63 | test msgcat-0.$count [list \ |
---|
64 | locale initialization from environment variables $setVars \ |
---|
65 | ] -setup { |
---|
66 | variable var |
---|
67 | foreach var $envVars { |
---|
68 | catch {variable $var $::env($var)} |
---|
69 | catch {unset ::env($var)} |
---|
70 | } |
---|
71 | foreach var $setVars { |
---|
72 | set ::env($var) $var |
---|
73 | } |
---|
74 | interp create [namespace current]::i |
---|
75 | i eval [list package ifneeded msgcat [package provide msgcat] \ |
---|
76 | [package ifneeded msgcat [package provide msgcat]]] |
---|
77 | i eval package require msgcat |
---|
78 | } -cleanup { |
---|
79 | interp delete [namespace current]::i |
---|
80 | foreach var $envVars { |
---|
81 | catch {unset ::env($var)} |
---|
82 | catch {set ::env($var) [set [namespace current]::$var]} |
---|
83 | } |
---|
84 | } -body {i eval msgcat::mclocale} -result $result |
---|
85 | incr count |
---|
86 | } |
---|
87 | catch {unset result} |
---|
88 | |
---|
89 | # Could add tests of initialization from Windows registry here. |
---|
90 | # Use a fake registry package. |
---|
91 | |
---|
92 | # Tests msgcat-1.*: [mclocale], [mcpreferences] |
---|
93 | |
---|
94 | test msgcat-1.3 {mclocale set, single element} -setup { |
---|
95 | variable locale [mclocale] |
---|
96 | } -cleanup { |
---|
97 | mclocale $locale |
---|
98 | } -body { |
---|
99 | mclocale en |
---|
100 | } -result en |
---|
101 | |
---|
102 | test msgcat-1.4 {mclocale get, single element} -setup { |
---|
103 | variable locale [mclocale] |
---|
104 | mclocale en |
---|
105 | } -cleanup { |
---|
106 | mclocale $locale |
---|
107 | } -body { |
---|
108 | mclocale |
---|
109 | } -result en |
---|
110 | |
---|
111 | test msgcat-1.5 {mcpreferences, single element} -setup { |
---|
112 | variable locale [mclocale] |
---|
113 | mclocale en |
---|
114 | } -cleanup { |
---|
115 | mclocale $locale |
---|
116 | } -body { |
---|
117 | mcpreferences |
---|
118 | } -result {en {}} |
---|
119 | |
---|
120 | test msgcat-1.6 {mclocale set, two elements} -setup { |
---|
121 | variable locale [mclocale] |
---|
122 | } -cleanup { |
---|
123 | mclocale $locale |
---|
124 | } -body { |
---|
125 | mclocale en_US |
---|
126 | } -result en_us |
---|
127 | |
---|
128 | test msgcat-1.7 {mclocale get, two elements} -setup { |
---|
129 | variable locale [mclocale] |
---|
130 | mclocale en_US |
---|
131 | } -cleanup { |
---|
132 | mclocale $locale |
---|
133 | } -body { |
---|
134 | mclocale |
---|
135 | } -result en_us |
---|
136 | |
---|
137 | test msgcat-1.8 {mcpreferences, two elements} -setup { |
---|
138 | variable locale [mclocale] |
---|
139 | mclocale en_US |
---|
140 | } -cleanup { |
---|
141 | mclocale $locale |
---|
142 | } -body { |
---|
143 | mcpreferences |
---|
144 | } -result {en_us en {}} |
---|
145 | |
---|
146 | test msgcat-1.9 {mclocale set, three elements} -setup { |
---|
147 | variable locale [mclocale] |
---|
148 | } -cleanup { |
---|
149 | mclocale $locale |
---|
150 | } -body { |
---|
151 | mclocale en_US_funky |
---|
152 | } -result en_us_funky |
---|
153 | |
---|
154 | test msgcat-1.10 {mclocale get, three elements} -setup { |
---|
155 | variable locale [mclocale] |
---|
156 | mclocale en_US_funky |
---|
157 | } -cleanup { |
---|
158 | mclocale $locale |
---|
159 | } -body { |
---|
160 | mclocale |
---|
161 | } -result en_us_funky |
---|
162 | |
---|
163 | test msgcat-1.11 {mcpreferences, three elements} -setup { |
---|
164 | variable locale [mclocale] |
---|
165 | mclocale en_US_funky |
---|
166 | } -cleanup { |
---|
167 | mclocale $locale |
---|
168 | } -body { |
---|
169 | mcpreferences |
---|
170 | } -result {en_us_funky en_us en {}} |
---|
171 | |
---|
172 | test msgcat-1.12 {mclocale set, reject evil input} -setup { |
---|
173 | variable locale [mclocale] |
---|
174 | } -cleanup { |
---|
175 | mclocale $locale |
---|
176 | } -body { |
---|
177 | mclocale /path/to/evil/code |
---|
178 | } -returnCodes error -match glob -result {invalid newLocale value *} |
---|
179 | |
---|
180 | test msgcat-1.13 {mclocale set, reject evil input} -setup { |
---|
181 | variable locale [mclocale] |
---|
182 | } -cleanup { |
---|
183 | mclocale $locale |
---|
184 | } -body { |
---|
185 | mclocale looks/ok/../../../../but/is/path/to/evil/code |
---|
186 | } -returnCodes error -match glob -result {invalid newLocale value *} |
---|
187 | |
---|
188 | # Tests msgcat-2.*: [mcset], [mcmset], namespace partitioning |
---|
189 | |
---|
190 | test msgcat-2.1 {mcset, global scope} { |
---|
191 | namespace eval :: ::msgcat::mcset foo_BAR text1 text2 |
---|
192 | } {text2} |
---|
193 | |
---|
194 | test msgcat-2.2 {mcset, global scope, default} { |
---|
195 | namespace eval :: ::msgcat::mcset foo_BAR text3 |
---|
196 | } {text3} |
---|
197 | |
---|
198 | test msgcat-2.2.1 {mcset, namespace overlap} { |
---|
199 | namespace eval baz {::msgcat::mcset foo_BAR con1 con1baz} |
---|
200 | } {con1baz} |
---|
201 | |
---|
202 | test msgcat-2.3 {mcset, namespace overlap} -setup { |
---|
203 | namespace eval bar {::msgcat::mcset foo_BAR con1 con1bar} |
---|
204 | namespace eval baz {::msgcat::mcset foo_BAR con1 con1baz} |
---|
205 | variable locale [mclocale] |
---|
206 | mclocale foo_BAR |
---|
207 | } -cleanup { |
---|
208 | mclocale $locale |
---|
209 | } -body { |
---|
210 | namespace eval bar {::msgcat::mc con1} |
---|
211 | } -result con1bar |
---|
212 | |
---|
213 | test msgcat-2.4 {mcset, namespace overlap} -setup { |
---|
214 | namespace eval bar {::msgcat::mcset foo_BAR con1 con1bar} |
---|
215 | namespace eval baz {::msgcat::mcset foo_BAR con1 con1baz} |
---|
216 | variable locale [mclocale] |
---|
217 | mclocale foo_BAR |
---|
218 | } -cleanup { |
---|
219 | mclocale $locale |
---|
220 | } -body { |
---|
221 | namespace eval baz {::msgcat::mc con1} |
---|
222 | } -result con1baz |
---|
223 | |
---|
224 | test msgcat-2.5 {mcmset, global scope} -setup { |
---|
225 | namespace eval :: { |
---|
226 | ::msgcat::mcmset foo_BAR { |
---|
227 | src1 trans1 |
---|
228 | src2 trans2 |
---|
229 | } |
---|
230 | } |
---|
231 | variable locale [mclocale] |
---|
232 | mclocale foo_BAR |
---|
233 | } -cleanup { |
---|
234 | mclocale $locale |
---|
235 | } -body { |
---|
236 | namespace eval :: { |
---|
237 | ::msgcat::mc src1 |
---|
238 | } |
---|
239 | } -result trans1 |
---|
240 | |
---|
241 | test msgcat-2.6 {mcmset, namespace overlap} -setup { |
---|
242 | namespace eval bar {::msgcat::mcmset foo_BAR {con2 con2bar}} |
---|
243 | namespace eval baz {::msgcat::mcmset foo_BAR {con2 con2baz}} |
---|
244 | variable locale [mclocale] |
---|
245 | mclocale foo_BAR |
---|
246 | } -cleanup { |
---|
247 | mclocale $locale |
---|
248 | } -body { |
---|
249 | namespace eval bar {::msgcat::mc con2} |
---|
250 | } -result con2bar |
---|
251 | |
---|
252 | test msgcat-2.7 {mcmset, namespace overlap} -setup { |
---|
253 | namespace eval bar {::msgcat::mcmset foo_BAR {con2 con2bar}} |
---|
254 | namespace eval baz {::msgcat::mcmset foo_BAR {con2 con2baz}} |
---|
255 | variable locale [mclocale] |
---|
256 | mclocale foo_BAR |
---|
257 | } -cleanup { |
---|
258 | mclocale $locale |
---|
259 | } -body { |
---|
260 | namespace eval baz {::msgcat::mc con2} |
---|
261 | } -result con2baz |
---|
262 | |
---|
263 | # Tests msgcat-3.*: [mcset], [mc], catalog "inheritance" |
---|
264 | # |
---|
265 | # Test mcset and mc, ensuring that more specific locales |
---|
266 | # (e.g. en_UK) will search less specific locales |
---|
267 | # (e.g. en) for translation strings. |
---|
268 | # |
---|
269 | # Do this for the 15 permutations of |
---|
270 | # locales: {foo foo_BAR foo_BAR_baz} |
---|
271 | # strings: {ov0 ov1 ov2 ov3 ov4} |
---|
272 | # locale ROOT defines ov0, ov1, ov2, ov3 |
---|
273 | # locale foo defines ov1, ov2, ov3 |
---|
274 | # locale foo_BAR defines ov2, ov3 |
---|
275 | # locale foo_BAR_BAZ defines ov3 |
---|
276 | # (ov4 is defined in none) |
---|
277 | # So, |
---|
278 | # ov3 should be resolved in foo, foo_BAR, foo_BAR_baz |
---|
279 | # ov2 should be resolved in foo, foo_BAR |
---|
280 | # ov2 should resolve to foo_BAR in foo_BAR_baz |
---|
281 | # ov1 should be resolved in foo |
---|
282 | # ov1 should resolve to foo in foo_BAR, foo_BAR_baz |
---|
283 | # ov4 should be resolved in none, and call mcunknown |
---|
284 | # |
---|
285 | variable count 2 |
---|
286 | variable result |
---|
287 | array set result { |
---|
288 | foo,ov0 ov0_ROOT foo,ov1 ov1_foo foo,ov2 ov2_foo |
---|
289 | foo,ov3 ov3_foo foo,ov4 ov4 |
---|
290 | foo_BAR,ov0 ov0_ROOT foo_BAR,ov1 ov1_foo foo_BAR,ov2 ov2_foo_BAR |
---|
291 | foo_BAR,ov3 ov3_foo_BAR foo_BAR,ov4 ov4 |
---|
292 | foo_BAR_baz,ov0 ov0_ROOT foo_BAR_baz,ov1 ov1_foo |
---|
293 | foo_BAR_baz,ov2 ov2_foo_BAR |
---|
294 | foo_BAR_baz,ov3 ov3_foo_BAR_baz foo_BAR_baz,ov4 ov4 |
---|
295 | } |
---|
296 | variable loc |
---|
297 | variable string |
---|
298 | foreach loc {foo foo_BAR foo_BAR_baz} { |
---|
299 | foreach string {ov0 ov1 ov2 ov3 ov4} { |
---|
300 | test msgcat-3.$count {mcset, overlap} -setup { |
---|
301 | mcset {} ov0 ov0_ROOT |
---|
302 | mcset {} ov1 ov1_ROOT |
---|
303 | mcset {} ov2 ov2_ROOT |
---|
304 | mcset {} ov3 ov3_ROOT |
---|
305 | mcset foo ov1 ov1_foo |
---|
306 | mcset foo ov2 ov2_foo |
---|
307 | mcset foo ov3 ov3_foo |
---|
308 | mcset foo_BAR ov2 ov2_foo_BAR |
---|
309 | mcset foo_BAR ov3 ov3_foo_BAR |
---|
310 | mcset foo_BAR_baz ov3 ov3_foo_BAR_baz |
---|
311 | variable locale [mclocale] |
---|
312 | mclocale $loc |
---|
313 | } -cleanup { |
---|
314 | mclocale $locale |
---|
315 | } -body { |
---|
316 | mc $string |
---|
317 | } -result $result($loc,$string) |
---|
318 | incr count |
---|
319 | } |
---|
320 | } |
---|
321 | catch {unset result} |
---|
322 | |
---|
323 | # Tests msgcat-4.*: [mcunknown] |
---|
324 | |
---|
325 | test msgcat-4.2 {mcunknown, default} -setup { |
---|
326 | mcset foo unk1 "unknown 1" |
---|
327 | variable locale [mclocale] |
---|
328 | mclocale foo |
---|
329 | } -cleanup { |
---|
330 | mclocale $locale |
---|
331 | } -body { |
---|
332 | mc unk1 |
---|
333 | } -result {unknown 1} |
---|
334 | |
---|
335 | test msgcat-4.3 {mcunknown, default} -setup { |
---|
336 | mcset foo unk1 "unknown 1" |
---|
337 | variable locale [mclocale] |
---|
338 | mclocale foo |
---|
339 | } -cleanup { |
---|
340 | mclocale $locale |
---|
341 | } -body { |
---|
342 | mc unk2 |
---|
343 | } -result unk2 |
---|
344 | |
---|
345 | test msgcat-4.4 {mcunknown, overridden} -setup { |
---|
346 | rename ::msgcat::mcunknown SavedMcunknown |
---|
347 | proc ::msgcat::mcunknown {dom s} { |
---|
348 | return unknown:$dom:$s |
---|
349 | } |
---|
350 | mcset foo unk1 "unknown 1" |
---|
351 | variable locale [mclocale] |
---|
352 | mclocale foo |
---|
353 | } -cleanup { |
---|
354 | mclocale $locale |
---|
355 | rename ::msgcat::mcunknown {} |
---|
356 | rename SavedMcunknown ::msgcat::mcunknown |
---|
357 | } -body { |
---|
358 | mc unk1 |
---|
359 | } -result {unknown 1} |
---|
360 | |
---|
361 | test msgcat-4.5 {mcunknown, overridden} -setup { |
---|
362 | rename ::msgcat::mcunknown SavedMcunknown |
---|
363 | proc ::msgcat::mcunknown {dom s} { |
---|
364 | return unknown:$dom:$s |
---|
365 | } |
---|
366 | mcset foo unk1 "unknown 1" |
---|
367 | variable locale [mclocale] |
---|
368 | mclocale foo |
---|
369 | } -cleanup { |
---|
370 | mclocale $locale |
---|
371 | rename ::msgcat::mcunknown {} |
---|
372 | rename SavedMcunknown ::msgcat::mcunknown |
---|
373 | } -body { |
---|
374 | mc unk2 |
---|
375 | } -result {unknown:foo:unk2} |
---|
376 | |
---|
377 | test msgcat-4.6 {mcunknown, uplevel context} -setup { |
---|
378 | rename ::msgcat::mcunknown SavedMcunknown |
---|
379 | proc ::msgcat::mcunknown {dom s} { |
---|
380 | return "unknown:$dom:$s:[expr {[info level] - 1}]" |
---|
381 | } |
---|
382 | mcset foo unk1 "unknown 1" |
---|
383 | variable locale [mclocale] |
---|
384 | mclocale foo |
---|
385 | } -cleanup { |
---|
386 | mclocale $locale |
---|
387 | rename ::msgcat::mcunknown {} |
---|
388 | rename SavedMcunknown ::msgcat::mcunknown |
---|
389 | } -body { |
---|
390 | mc unk2 |
---|
391 | } -result unknown:foo:unk2:[info level] |
---|
392 | |
---|
393 | # Tests msgcat-5.*: [mcload] |
---|
394 | |
---|
395 | variable locales {{} foo foo_BAR foo_BAR_baz} |
---|
396 | set msgdir [makeDirectory msgdir] |
---|
397 | foreach loc $locales { |
---|
398 | if { $loc eq {} } { |
---|
399 | set msg ROOT |
---|
400 | } else { |
---|
401 | set msg [string tolower $loc] |
---|
402 | } |
---|
403 | makeFile [list ::msgcat::mcset $loc abc abc-$loc] $msg.msg $msgdir |
---|
404 | } |
---|
405 | variable count 1 |
---|
406 | foreach loc {foo foo_BAR foo_BAR_baz} { |
---|
407 | test msgcat-5.$count {mcload} -setup { |
---|
408 | variable locale [mclocale] |
---|
409 | mclocale $loc |
---|
410 | } -cleanup { |
---|
411 | mclocale $locale |
---|
412 | } -body { |
---|
413 | mcload $msgdir |
---|
414 | } -result [expr { $count+1 }] |
---|
415 | incr count |
---|
416 | } |
---|
417 | |
---|
418 | # Even though foo_BAR_notexist does not exist, |
---|
419 | # foo_BAR, foo and the root should be loaded. |
---|
420 | test msgcat-5.4 {mcload} -setup { |
---|
421 | variable locale [mclocale] |
---|
422 | mclocale foo_BAR_notexist |
---|
423 | } -cleanup { |
---|
424 | mclocale $locale |
---|
425 | } -body { |
---|
426 | mcload $msgdir |
---|
427 | } -result 3 |
---|
428 | |
---|
429 | test msgcat-5.5 {mcload} -setup { |
---|
430 | variable locale [mclocale] |
---|
431 | mclocale no_FI_notexist |
---|
432 | } -cleanup { |
---|
433 | mclocale $locale |
---|
434 | } -body { |
---|
435 | mcload $msgdir |
---|
436 | } -result 1 |
---|
437 | |
---|
438 | test msgcat-5.6 {mcload} -setup { |
---|
439 | variable locale [mclocale] |
---|
440 | mclocale foo |
---|
441 | mcload $msgdir |
---|
442 | } -cleanup { |
---|
443 | mclocale $locale |
---|
444 | } -body { |
---|
445 | mc abc |
---|
446 | } -result abc-foo |
---|
447 | |
---|
448 | test msgcat-5.7 {mcload} -setup { |
---|
449 | variable locale [mclocale] |
---|
450 | mclocale foo_BAR |
---|
451 | mcload $msgdir |
---|
452 | } -cleanup { |
---|
453 | mclocale $locale |
---|
454 | } -body { |
---|
455 | mc abc |
---|
456 | } -result abc-foo_BAR |
---|
457 | |
---|
458 | test msgcat-5.8 {mcload} -setup { |
---|
459 | variable locale [mclocale] |
---|
460 | mclocale foo_BAR_baz |
---|
461 | mcload $msgdir |
---|
462 | } -cleanup { |
---|
463 | mclocale $locale |
---|
464 | } -body { |
---|
465 | mc abc |
---|
466 | } -result abc-foo_BAR_baz |
---|
467 | |
---|
468 | test msgcat-5.9 {mcload} -setup { |
---|
469 | variable locale [mclocale] |
---|
470 | mclocale no_FI_notexist |
---|
471 | mcload $msgdir |
---|
472 | } -cleanup { |
---|
473 | mclocale $locale |
---|
474 | } -body { |
---|
475 | mc abc |
---|
476 | } -result abc- |
---|
477 | |
---|
478 | test msgcat-5.10 {mcload} -setup { |
---|
479 | rename ::msgcat::mcunknown SavedMcunknown |
---|
480 | proc ::msgcat::mcunknown {dom s} { |
---|
481 | return unknown:$dom:$s |
---|
482 | } |
---|
483 | variable locale [mclocale] |
---|
484 | mclocale no_FI_notexist |
---|
485 | mcload $msgdir |
---|
486 | } -cleanup { |
---|
487 | mclocale $locale |
---|
488 | rename ::msgcat::mcunknown {} |
---|
489 | rename SavedMcunknown ::msgcat::mcunknown |
---|
490 | } -body { |
---|
491 | mc def |
---|
492 | } -result unknown:no_fi_notexist:def |
---|
493 | |
---|
494 | foreach loc $locales { |
---|
495 | if { $loc eq {} } { |
---|
496 | set msg ROOT |
---|
497 | } else { |
---|
498 | set msg [string tolower $loc] |
---|
499 | } |
---|
500 | removeFile $msg.msg $msgdir |
---|
501 | } |
---|
502 | removeDirectory msgdir |
---|
503 | |
---|
504 | # Tests msgcat-6.*: [mcset], [mc] namespace inheritance |
---|
505 | # |
---|
506 | # Test mcset and mc, ensuring that resolution for messages |
---|
507 | # proceeds from the current ns to its parent and so on to the |
---|
508 | # global ns. |
---|
509 | # |
---|
510 | # Do this for the 12 permutations of |
---|
511 | # locales: foo |
---|
512 | # namespaces: foo foo::bar foo::bar::baz |
---|
513 | # strings: {ov1 ov2 ov3 ov4} |
---|
514 | # namespace ::foo defines ov1, ov2, ov3 |
---|
515 | # namespace ::foo::bar defines ov2, ov3 |
---|
516 | # namespace ::foo::bar::baz defines ov3 |
---|
517 | # |
---|
518 | # ov4 is not defined in any namespace. |
---|
519 | # |
---|
520 | # So, |
---|
521 | # ov3 should be resolved in ::foo::bar::baz, ::foo::bar, ::foo; |
---|
522 | # ov2 should be resolved in ::foo, ::foo::bar |
---|
523 | # ov1 should be resolved in ::foo |
---|
524 | # ov4 should be resolved in none, and call mcunknown |
---|
525 | # |
---|
526 | |
---|
527 | variable result |
---|
528 | array set result { |
---|
529 | foo,ov1 ov1_foo foo,ov2 ov2_foo foo,ov3 ov3_foo foo,ov4 ov4 |
---|
530 | foo::bar,ov1 ov1_foo foo::bar,ov2 ov2_foo_bar |
---|
531 | foo::bar,ov3 ov3_foo_bar foo::bar,ov4 ov4 foo::bar::baz,ov1 ov1_foo |
---|
532 | foo::bar::baz,ov2 ov2_foo_bar foo::bar::baz,ov3 ov3_foo_bar_baz |
---|
533 | foo::bar::baz,ov4 ov4 |
---|
534 | } |
---|
535 | variable count 1 |
---|
536 | variable ns |
---|
537 | foreach ns {foo foo::bar foo::bar::baz} { |
---|
538 | foreach string {ov1 ov2 ov3 ov4} { |
---|
539 | test msgcat-6.$count {mcset, overlap} -setup { |
---|
540 | namespace eval foo { |
---|
541 | ::msgcat::mcset foo ov1 ov1_foo |
---|
542 | ::msgcat::mcset foo ov2 ov2_foo |
---|
543 | ::msgcat::mcset foo ov3 ov3_foo |
---|
544 | namespace eval bar { |
---|
545 | ::msgcat::mcset foo ov2 ov2_foo_bar |
---|
546 | ::msgcat::mcset foo ov3 ov3_foo_bar |
---|
547 | namespace eval baz { |
---|
548 | ::msgcat::mcset foo ov3 "ov3_foo_bar_baz" |
---|
549 | } |
---|
550 | } |
---|
551 | |
---|
552 | } |
---|
553 | variable locale [mclocale] |
---|
554 | mclocale foo |
---|
555 | } -cleanup { |
---|
556 | mclocale $locale |
---|
557 | namespace delete foo |
---|
558 | } -body { |
---|
559 | namespace eval $ns [list ::msgcat::mc $string] |
---|
560 | } -result $result($ns,$string) |
---|
561 | incr count |
---|
562 | } |
---|
563 | } |
---|
564 | |
---|
565 | # Tests msgcat-7.*: [mc] extra args processed by [format] |
---|
566 | |
---|
567 | test msgcat-7.1 {mc extra args go through to format} -setup { |
---|
568 | mcset foo format1 "this is a test" |
---|
569 | mcset foo format2 "this is a %s" |
---|
570 | mcset foo format3 "this is a %s %s" |
---|
571 | variable locale [mclocale] |
---|
572 | mclocale foo |
---|
573 | } -cleanup { |
---|
574 | mclocale $locale |
---|
575 | } -body { |
---|
576 | mc format1 "good test" |
---|
577 | } -result "this is a test" |
---|
578 | |
---|
579 | test msgcat-7.2 {mc extra args go through to format} -setup { |
---|
580 | mcset foo format1 "this is a test" |
---|
581 | mcset foo format2 "this is a %s" |
---|
582 | mcset foo format3 "this is a %s %s" |
---|
583 | variable locale [mclocale] |
---|
584 | mclocale foo |
---|
585 | } -cleanup { |
---|
586 | mclocale $locale |
---|
587 | } -body { |
---|
588 | mc format2 "good test" |
---|
589 | } -result "this is a good test" |
---|
590 | |
---|
591 | test msgcat-7.3 {mc errors from format are propagated} -setup { |
---|
592 | mcset foo format1 "this is a test" |
---|
593 | mcset foo format2 "this is a %s" |
---|
594 | mcset foo format3 "this is a %s %s" |
---|
595 | variable locale [mclocale] |
---|
596 | mclocale foo |
---|
597 | } -cleanup { |
---|
598 | mclocale $locale |
---|
599 | } -body { |
---|
600 | catch {mc format3 "good test"} |
---|
601 | } -result 1 |
---|
602 | |
---|
603 | test msgcat-7.4 {mc, extra args are given to unknown} -setup { |
---|
604 | mcset foo format1 "this is a test" |
---|
605 | mcset foo format2 "this is a %s" |
---|
606 | mcset foo format3 "this is a %s %s" |
---|
607 | variable locale [mclocale] |
---|
608 | mclocale foo |
---|
609 | } -cleanup { |
---|
610 | mclocale $locale |
---|
611 | } -body { |
---|
612 | mc "this is a %s" "good test" |
---|
613 | } -result "this is a good test" |
---|
614 | |
---|
615 | cleanupTests |
---|
616 | } |
---|
617 | namespace delete ::msgcat::test |
---|
618 | return |
---|
619 | |
---|