Tcl Source Code

Hex Artifact Content
Login

Artifact 1177299b9afc6db52fef2cc7aa583f9c23c2b511d310afe965ad46cbdc5331a7:


0000: 23 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e 74  # This file cont
0010: 61 69 6e 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f  ains a collectio
0020: 6e 20 6f 66 20 74 65 73 74 73 20 66 6f 72 20 74  n of tests for t
0030: 68 65 20 6d 73 67 63 61 74 20 70 61 63 6b 61 67  he msgcat packag
0040: 65 2e 0a 23 20 53 6f 75 72 63 69 6e 67 20 74 68  e..# Sourcing th
0050: 69 73 20 66 69 6c 65 20 69 6e 74 6f 20 54 63 6c  is file into Tcl
0060: 20 72 75 6e 73 20 74 68 65 20 74 65 73 74 73 20   runs the tests 
0070: 61 6e 64 0a 23 20 67 65 6e 65 72 61 74 65 73 20  and.# generates 
0080: 6f 75 74 70 75 74 20 66 6f 72 20 65 72 72 6f 72  output for error
0090: 73 2e 20 20 4e 6f 20 6f 75 74 70 75 74 20 6d 65  s.  No output me
00a0: 61 6e 73 20 6e 6f 20 65 72 72 6f 72 73 20 77 65  ans no errors we
00b0: 72 65 20 66 6f 75 6e 64 2e 0a 23 0a 23 20 43 6f  re found..#.# Co
00c0: 70 79 72 69 67 68 74 20 c2 a9 20 31 39 39 38 20  pyright © 1998 
00d0: 4d 61 72 6b 20 48 61 72 72 69 73 6f 6e 2e 0a 23  Mark Harrison..#
00e0: 20 43 6f 70 79 72 69 67 68 74 20 c2 a9 20 31 39   Copyright © 19
00f0: 39 38 2d 31 39 39 39 20 53 63 72 69 70 74 69 63  98-1999 Scriptic
0100: 73 20 43 6f 72 70 6f 72 61 74 69 6f 6e 2e 0a 23  s Corporation..#
0110: 20 43 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 66   Contributions f
0120: 72 6f 6d 20 44 6f 6e 20 50 6f 72 74 65 72 2c 20  rom Don Porter, 
0130: 4e 49 53 54 2c 20 32 30 30 32 2e 20 20 28 6e 6f  NIST, 2002.  (no
0140: 74 20 73 75 62 6a 65 63 74 20 74 6f 20 55 53 20  t subject to US 
0150: 63 6f 70 79 72 69 67 68 74 29 0a 23 0a 23 20 53  copyright).#.# S
0160: 65 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63  ee the file "lic
0170: 65 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20  ense.terms" for 
0180: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75  information on u
0190: 73 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72  sage and redistr
01a0: 69 62 75 74 69 6f 6e 0a 23 20 6f 66 20 74 68 69  ibution.# of thi
01b0: 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20  s file, and for 
01c0: 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20  a DISCLAIMER OF 
01d0: 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a  ALL WARRANTIES..
01e0: 23 0a 23 20 4e 6f 74 65 20 74 68 61 74 20 61 66  #.# Note that af
01f0: 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 73  ter running thes
0200: 65 20 74 65 73 74 73 2c 20 65 6e 74 72 69 65 73  e tests, entries
0210: 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 62 65   will be left be
0220: 68 69 6e 64 20 69 6e 20 74 68 65 0a 23 20 6d 65  hind in the.# me
0230: 73 73 61 67 65 20 63 61 74 61 6c 6f 67 73 20 66  ssage catalogs f
0240: 6f 72 20 6c 6f 63 61 6c 65 73 20 66 6f 6f 2c 20  or locales foo, 
0250: 66 6f 6f 5f 42 41 52 2c 20 61 6e 64 20 66 6f 6f  foo_BAR, and foo
0260: 5f 42 41 52 5f 62 61 7a 2e 0a 0a 69 66 20 7b 22  _BAR_baz...if {"
0270: 3a 3a 74 63 6c 74 65 73 74 22 20 6e 69 20 5b 6e  ::tcltest" ni [n
0280: 61 6d 65 73 70 61 63 65 20 63 68 69 6c 64 72 65  amespace childre
0290: 6e 5d 7d 20 7b 0a 20 20 20 20 70 61 63 6b 61 67  n]} {.    packag
02a0: 65 20 72 65 71 75 69 72 65 20 74 63 6c 74 65 73  e require tcltes
02b0: 74 20 32 2e 35 0a 20 20 20 20 6e 61 6d 65 73 70  t 2.5.    namesp
02c0: 61 63 65 20 69 6d 70 6f 72 74 20 2d 66 6f 72 63  ace import -forc
02d0: 65 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 2a 0a 7d  e ::tcltest::*.}
02e0: 0a 69 66 20 7b 5b 63 61 74 63 68 20 7b 70 61 63  .if {[catch {pac
02f0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 6d 73 67  kage require msg
0300: 63 61 74 20 31 2e 36 7d 5d 7d 20 7b 0a 20 20 20  cat 1.6}]} {.   
0310: 20 70 75 74 73 20 73 74 64 65 72 72 20 22 53 6b   puts stderr "Sk
0320: 69 70 70 69 6e 67 20 74 65 73 74 73 20 69 6e 20  ipping tests in 
0330: 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 2e 20 20  [info script].  
0340: 4e 6f 20 6d 73 67 63 61 74 20 31 2e 36 20 66 6f  No msgcat 1.6 fo
0350: 75 6e 64 20 74 6f 20 74 65 73 74 2e 22 0a 20 20  und to test.".  
0360: 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 6e 61 6d 65    return.}..name
0370: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 6d 73 67  space eval ::msg
0380: 63 61 74 3a 3a 74 65 73 74 20 7b 0a 20 20 20 20  cat::test {.    
0390: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
03a0: 20 3a 3a 6d 73 67 63 61 74 3a 3a 2a 0a 20 20 20   ::msgcat::*.   
03b0: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72   namespace impor
03c0: 74 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 74 65 73  t ::tcltest::tes
03d0: 74 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  t.    namespace 
03e0: 69 6d 70 6f 72 74 20 3a 3a 74 63 6c 74 65 73 74  import ::tcltest
03f0: 3a 3a 63 6c 65 61 6e 75 70 54 65 73 74 73 0a 20  ::cleanupTests. 
0400: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70     namespace imp
0410: 6f 72 74 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 74  ort ::tcltest::t
0420: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72  emporaryDirector
0430: 79 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  y.    namespace 
0440: 69 6d 70 6f 72 74 20 3a 3a 74 63 6c 74 65 73 74  import ::tcltest
0450: 3a 3a 6d 61 6b 65 2a 0a 20 20 20 20 6e 61 6d 65  ::make*.    name
0460: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 74  space import ::t
0470: 63 6c 74 65 73 74 3a 3a 72 65 6d 6f 76 65 2a 0a  cltest::remove*.
0480: 0a 20 20 20 20 23 20 54 65 73 74 73 20 6d 73 67  .    # Tests msg
0490: 63 61 74 2d 30 2e 2a 3a 20 6c 6f 63 61 6c 65 20  cat-0.*: locale 
04a0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 0a  initialization..
04b0: 20 20 20 20 23 20 43 61 6c 63 75 6c 61 74 65 20      # Calculate 
04c0: 73 65 74 20 6f 66 20 61 6c 6c 20 70 65 72 6d 75  set of all permu
04d0: 74 61 74 69 6f 6e 73 20 6f 66 20 61 20 6c 69 73  tations of a lis
04e0: 74 0a 20 20 20 20 23 20 50 6f 77 65 72 53 65 74  t.    # PowerSet
04f0: 20 7b 31 20 32 20 33 7d 20 2d 3e 20 7b 31 20 32   {1 2 3} -> {1 2
0500: 20 33 7d 20 7b 32 20 33 7d 20 7b 31 20 33 7d 20   3} {2 3} {1 3} 
0510: 33 20 7b 31 20 32 7d 20 32 20 31 20 7b 7d 0a 20  3 {1 2} 2 1 {}. 
0520: 20 20 20 70 72 6f 63 20 50 6f 77 65 72 53 65 74     proc PowerSet
0530: 20 7b 6c 7d 20 7b 0a 09 69 66 20 7b 5b 6c 6c 65   {l} {..if {[lle
0540: 6e 67 74 68 20 24 6c 5d 20 3d 3d 20 30 7d 20 7b  ngth $l] == 0} {
0550: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b 6c 69  return [list [li
0560: 73 74 5d 5d 7d 0a 09 73 65 74 20 65 6c 65 6d 65  st]]}..set eleme
0570: 6e 74 20 5b 6c 69 6e 64 65 78 20 24 6c 20 30 5d  nt [lindex $l 0]
0580: 0a 09 73 65 74 20 72 65 73 74 20 5b 6c 72 61 6e  ..set rest [lran
0590: 67 65 20 24 6c 20 31 20 65 6e 64 5d 0a 09 73 65  ge $l 1 end]..se
05a0: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0a  t result [list].
05b0: 09 66 6f 72 65 61 63 68 20 78 20 5b 50 6f 77 65  .foreach x [Powe
05c0: 72 53 65 74 20 24 72 65 73 74 5d 20 7b 0a 09 20  rSet $rest] {.. 
05d0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
05e0: 74 20 5b 6c 69 6e 73 65 72 74 20 24 78 20 30 20  t [linsert $x 0 
05f0: 24 65 6c 65 6d 65 6e 74 5d 0a 09 20 20 20 20 6c  $element]..    l
0600: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 78  append result $x
0610: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 72 65 73  ..}..return $res
0620: 75 6c 74 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76  ult.    }..    v
0630: 61 72 69 61 62 6c 65 20 65 6e 76 56 61 72 73 20  ariable envVars 
0640: 7b 4c 43 5f 41 4c 4c 20 4c 43 5f 4d 45 53 53 41  {LC_ALL LC_MESSA
0650: 47 45 53 20 4c 41 4e 47 7d 0a 20 20 20 20 76 61  GES LANG}.    va
0660: 72 69 61 62 6c 65 20 63 6f 75 6e 74 20 30 0a 20  riable count 0. 
0670: 20 20 20 76 61 72 69 61 62 6c 65 20 62 6f 64 79     variable body
0680: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 72 65  .    variable re
0690: 73 75 6c 74 0a 20 20 20 20 76 61 72 69 61 62 6c  sult.    variabl
06a0: 65 20 73 65 74 56 61 72 73 0a 20 20 20 20 66 6f  e setVars.    fo
06b0: 72 65 61 63 68 20 73 65 74 56 61 72 73 20 5b 50  reach setVars [P
06c0: 6f 77 65 72 53 65 74 20 24 65 6e 76 56 61 72 73  owerSet $envVars
06d0: 5d 20 7b 0a 09 73 65 74 20 72 65 73 75 6c 74 20  ] {..set result 
06e0: 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20  [string tolower 
06f0: 5b 6c 69 6e 64 65 78 20 24 73 65 74 56 61 72 73  [lindex $setVars
0700: 20 30 5d 5d 0a 09 69 66 20 7b 5b 73 74 72 69 6e   0]]..if {[strin
0710: 67 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74  g length $result
0720: 5d 20 3d 3d 20 30 7d 20 7b 0a 09 20 20 20 20 69  ] == 0} {..    i
0730: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
0740: 3a 3a 74 63 6c 3a 3a 6d 61 63 3a 3a 6c 6f 63 61  ::tcl::mac::loca
0750: 6c 65 5d 7d 20 7b 0a 69 66 20 7b 5b 70 61 63 6b  le]} {.if {[pack
0760: 61 67 65 20 76 73 61 74 69 73 66 69 65 73 20 5b  age vsatisfies [
0770: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20  package provide 
0780: 6d 73 67 63 61 74 5d 20 31 2e 37 5d 7d 20 7b 0a  msgcat] 1.7]} {.
0790: 09 09 73 65 74 20 72 65 73 75 6c 74 20 5b 73 74  ..set result [st
07a0: 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 5c 0a 09  ring tolower \..
07b0: 09 09 5b 6d 73 67 63 61 74 3a 3a 6d 63 75 74 69  ..[msgcat::mcuti
07c0: 6c 3a 3a 43 6f 6e 76 65 72 74 4c 6f 63 61 6c 65  l::ConvertLocale
07d0: 20 24 3a 3a 74 63 6c 3a 3a 6d 61 63 3a 3a 6c 6f   $::tcl::mac::lo
07e0: 63 61 6c 65 5d 5d 0a 7d 20 65 6c 73 65 20 7b 0a  cale]].} else {.
07f0: 09 09 73 65 74 20 72 65 73 75 6c 74 20 5b 73 74  ..set result [st
0800: 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 5c 0a 09  ring tolower \..
0810: 09 09 5b 6d 73 67 63 61 74 3a 3a 43 6f 6e 76 65  ..[msgcat::Conve
0820: 72 74 4c 6f 63 61 6c 65 20 24 3a 3a 74 63 6c 3a  rtLocale $::tcl:
0830: 3a 6d 61 63 3a 3a 6c 6f 63 61 6c 65 5d 5d 0a 7d  :mac::locale]].}
0840: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09  ..    } else {..
0850: 09 69 66 20 7b 28 5b 69 6e 66 6f 20 73 68 61 72  .if {([info shar
0860: 65 64 6c 69 62 65 78 74 65 6e 73 69 6f 6e 5d 20  edlibextension] 
0870: 65 71 20 22 2e 64 6c 6c 22 29 0a 09 09 09 26 26  eq ".dll")....&&
0880: 20 21 5b 63 61 74 63 68 20 7b 70 61 63 6b 61 67   ![catch {packag
0890: 65 20 72 65 71 75 69 72 65 20 72 65 67 69 73 74  e require regist
08a0: 72 79 7d 5d 7d 20 7b 0a 09 09 20 20 20 20 23 20  ry}]} {...    # 
08b0: 57 69 6e 64 6f 77 73 20 61 6e 64 20 43 79 67 77  Windows and Cygw
08c0: 69 6e 20 68 61 76 65 20 6f 74 68 65 72 20 77 61  in have other wa
08d0: 79 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ys to determine 
08e0: 74 68 65 0a 09 09 20 20 20 20 23 20 6c 6f 63 61  the...    # loca
08f0: 6c 65 20 77 68 65 6e 20 74 68 65 20 65 6e 76 69  le when the envi
0900: 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65  ronment variable
0910: 73 20 61 72 65 20 6d 69 73 73 69 6e 67 0a 09 09  s are missing...
0920: 20 20 20 20 23 20 61 6e 64 20 74 68 65 20 72 65      # and the re
0930: 67 69 73 74 72 79 20 70 61 63 6b 61 67 65 20 69  gistry package i
0940: 73 20 70 72 65 73 65 6e 74 0a 09 09 20 20 20 20  s present...    
0950: 63 6f 6e 74 69 6e 75 65 0a 09 09 7d 0a 09 09 73  continue...}...s
0960: 65 74 20 72 65 73 75 6c 74 20 63 0a 09 20 20 20  et result c..   
0970: 20 7d 0a 09 7d 0a 0c 0a 09 74 65 73 74 20 6d 73   }..}....test ms
0980: 67 63 61 74 2d 30 2e 24 63 6f 75 6e 74 20 5b 6c  gcat-0.$count [l
0990: 69 73 74 20 5c 0a 09 20 20 20 20 6c 6f 63 61 6c  ist \..    local
09a0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
09b0: 20 66 72 6f 6d 20 65 6e 76 69 72 6f 6e 6d 65 6e   from environmen
09c0: 74 20 76 61 72 69 61 62 6c 65 73 20 24 73 65 74  t variables $set
09d0: 56 61 72 73 20 5c 0a 09 5d 20 2d 73 65 74 75 70  Vars \..] -setup
09e0: 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65   {..    variable
09f0: 20 76 61 72 0a 09 20 20 20 20 66 6f 72 65 61 63   var..    foreac
0a00: 68 20 76 61 72 20 24 65 6e 76 56 61 72 73 20 7b  h var $envVars {
0a10: 0a 09 09 63 61 74 63 68 20 7b 76 61 72 69 61 62  ...catch {variab
0a20: 6c 65 20 24 76 61 72 20 24 3a 3a 65 6e 76 28 24  le $var $::env($
0a30: 76 61 72 29 7d 0a 09 09 75 6e 73 65 74 20 2d 6e  var)}...unset -n
0a40: 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28  ocomplain ::env(
0a50: 24 76 61 72 29 0a 09 20 20 20 20 7d 0a 09 20 20  $var)..    }..  
0a60: 20 20 66 6f 72 65 61 63 68 20 76 61 72 20 24 73    foreach var $s
0a70: 65 74 56 61 72 73 20 7b 0a 09 09 73 65 74 20 3a  etVars {...set :
0a80: 3a 65 6e 76 28 24 76 61 72 29 20 24 76 61 72 0a  :env($var) $var.
0a90: 09 20 20 20 20 7d 0a 09 20 20 20 20 69 6e 74 65  .    }..    inte
0aa0: 72 70 20 63 72 65 61 74 65 20 5b 6e 61 6d 65 73  rp create [names
0ab0: 70 61 63 65 20 63 75 72 72 65 6e 74 5d 3a 3a 69  pace current]::i
0ac0: 0a 09 20 20 20 20 69 20 65 76 61 6c 20 5b 6c 69  ..    i eval [li
0ad0: 73 74 20 70 61 63 6b 61 67 65 20 69 66 6e 65 65  st package ifnee
0ae0: 64 65 64 20 6d 73 67 63 61 74 20 5b 70 61 63 6b  ded msgcat [pack
0af0: 61 67 65 20 70 72 6f 76 69 64 65 20 6d 73 67 63  age provide msgc
0b00: 61 74 5d 20 5c 0a 09 09 20 20 20 20 5b 70 61 63  at] \...    [pac
0b10: 6b 61 67 65 20 69 66 6e 65 65 64 65 64 20 6d 73  kage ifneeded ms
0b20: 67 63 61 74 20 5b 70 61 63 6b 61 67 65 20 70 72  gcat [package pr
0b30: 6f 76 69 64 65 20 6d 73 67 63 61 74 5d 5d 5d 0a  ovide msgcat]]].
0b40: 09 20 20 20 20 69 20 65 76 61 6c 20 70 61 63 6b  .    i eval pack
0b50: 61 67 65 20 72 65 71 75 69 72 65 20 6d 73 67 63  age require msgc
0b60: 61 74 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  at..} -cleanup {
0b70: 0a 09 20 20 20 20 69 6e 74 65 72 70 20 64 65 6c  ..    interp del
0b80: 65 74 65 20 5b 6e 61 6d 65 73 70 61 63 65 20 63  ete [namespace c
0b90: 75 72 72 65 6e 74 5d 3a 3a 69 0a 09 20 20 20 20  urrent]::i..    
0ba0: 66 6f 72 65 61 63 68 20 76 61 72 20 24 65 6e 76  foreach var $env
0bb0: 56 61 72 73 20 7b 0a 09 09 75 6e 73 65 74 20 2d  Vars {...unset -
0bc0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76  nocomplain ::env
0bd0: 28 24 76 61 72 29 0a 09 09 63 61 74 63 68 20 7b  ($var)...catch {
0be0: 73 65 74 20 3a 3a 65 6e 76 28 24 76 61 72 29 20  set ::env($var) 
0bf0: 5b 73 65 74 20 5b 6e 61 6d 65 73 70 61 63 65 20  [set [namespace 
0c00: 63 75 72 72 65 6e 74 5d 3a 3a 24 76 61 72 5d 7d  current]::$var]}
0c10: 0a 09 20 20 20 20 7d 0a 09 7d 20 2d 62 6f 64 79  ..    }..} -body
0c20: 20 7b 69 20 65 76 61 6c 20 6d 73 67 63 61 74 3a   {i eval msgcat:
0c30: 3a 6d 63 6c 6f 63 61 6c 65 7d 20 2d 72 65 73 75  :mclocale} -resu
0c40: 6c 74 20 24 72 65 73 75 6c 74 0a 09 69 6e 63 72  lt $result..incr
0c50: 20 63 6f 75 6e 74 0a 20 20 20 20 7d 0a 20 20 20   count.    }.   
0c60: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
0c70: 69 6e 20 72 65 73 75 6c 74 0a 0a 20 20 20 20 23  in result..    #
0c80: 20 43 6f 75 6c 64 20 61 64 64 20 74 65 73 74 73   Could add tests
0c90: 20 6f 66 20 69 6e 69 74 69 61 6c 69 7a 61 74 69   of initializati
0ca0: 6f 6e 20 66 72 6f 6d 20 57 69 6e 64 6f 77 73 20  on from Windows 
0cb0: 72 65 67 69 73 74 72 79 20 68 65 72 65 2e 0a 20  registry here.. 
0cc0: 20 20 20 23 20 55 73 65 20 61 20 66 61 6b 65 20     # Use a fake 
0cd0: 72 65 67 69 73 74 72 79 20 70 61 63 6b 61 67 65  registry package
0ce0: 2e 0a 0a 20 20 20 20 23 20 54 65 73 74 73 20 6d  ...    # Tests m
0cf0: 73 67 63 61 74 2d 31 2e 2a 3a 20 5b 6d 63 6c 6f  sgcat-1.*: [mclo
0d00: 63 61 6c 65 5d 2c 20 5b 6d 63 70 72 65 66 65 72  cale], [mcprefer
0d10: 65 6e 63 65 73 5d 0a 0a 20 20 20 20 74 65 73 74  ences]..    test
0d20: 20 6d 73 67 63 61 74 2d 31 2e 33 20 7b 6d 63 6c   msgcat-1.3 {mcl
0d30: 6f 63 61 6c 65 20 73 65 74 2c 20 73 69 6e 67 6c  ocale set, singl
0d40: 65 20 65 6c 65 6d 65 6e 74 7d 20 2d 73 65 74 75  e element} -setu
0d50: 70 20 7b 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f  p {..variable lo
0d60: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
0d70: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
0d80: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
0d90: 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  le.    } -body {
0da0: 0a 09 6d 63 6c 6f 63 61 6c 65 20 65 6e 0a 20 20  ..mclocale en.  
0db0: 20 20 7d 20 2d 72 65 73 75 6c 74 20 65 6e 0a 0a    } -result en..
0dc0: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
0dd0: 31 2e 34 20 7b 6d 63 6c 6f 63 61 6c 65 20 67 65  1.4 {mclocale ge
0de0: 74 2c 20 73 69 6e 67 6c 65 20 65 6c 65 6d 65 6e  t, single elemen
0df0: 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 76 61 72  t} -setup {..var
0e00: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
0e10: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c  locale]..mclocal
0e20: 65 20 65 6e 0a 20 20 20 20 7d 20 2d 63 6c 65 61  e en.    } -clea
0e30: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
0e40: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
0e50: 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 0a  ody {..mclocale.
0e60: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 65 6e      } -result en
0e70: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
0e80: 74 2d 31 2e 35 20 7b 6d 63 70 72 65 66 65 72 65  t-1.5 {mcprefere
0e90: 6e 63 65 73 2c 20 73 69 6e 67 6c 65 20 65 6c 65  nces, single ele
0ea0: 6d 65 6e 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09  ment} -setup {..
0eb0: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
0ec0: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f  [mclocale]..mclo
0ed0: 63 61 6c 65 20 65 6e 0a 20 20 20 20 7d 20 2d 63  cale en.    } -c
0ee0: 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61  leanup {..mcloca
0ef0: 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d  le $locale.    }
0f00: 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 70 72 65 66   -body {..mcpref
0f10: 65 72 65 6e 63 65 73 0a 20 20 20 20 7d 20 2d 72  erences.    } -r
0f20: 65 73 75 6c 74 20 7b 65 6e 20 7b 7d 7d 0a 0a 20  esult {en {}}.. 
0f30: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31     test msgcat-1
0f40: 2e 36 20 7b 6d 63 6c 6f 63 61 6c 65 20 73 65 74  .6 {mclocale set
0f50: 2c 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 7d 20  , two elements} 
0f60: 2d 73 65 74 75 70 20 7b 0a 09 76 61 72 69 61 62  -setup {..variab
0f70: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
0f80: 61 6c 65 5d 0a 20 20 20 20 7d 20 2d 63 6c 65 61  ale].    } -clea
0f90: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
0fa0: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
0fb0: 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  ody {..mclocale 
0fc0: 65 6e 5f 55 53 0a 20 20 20 20 7d 20 2d 72 65 73  en_US.    } -res
0fd0: 75 6c 74 20 65 6e 5f 75 73 0a 0a 20 20 20 20 74  ult en_us..    t
0fe0: 65 73 74 20 6d 73 67 63 61 74 2d 31 2e 37 20 7b  est msgcat-1.7 {
0ff0: 6d 63 6c 6f 63 61 6c 65 20 67 65 74 2c 20 74 77  mclocale get, tw
1000: 6f 20 65 6c 65 6d 65 6e 74 73 7d 20 2d 73 65 74  o elements} -set
1010: 75 70 20 7b 0a 09 76 61 72 69 61 62 6c 65 20 6c  up {..variable l
1020: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
1030: 0a 09 6d 63 6c 6f 63 61 6c 65 20 65 6e 5f 55 53  ..mclocale en_US
1040: 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20  .    } -cleanup 
1050: 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63  {..mclocale $loc
1060: 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20  ale.    } -body 
1070: 7b 0a 09 6d 63 6c 6f 63 61 6c 65 0a 20 20 20 20  {..mclocale.    
1080: 7d 20 2d 72 65 73 75 6c 74 20 65 6e 5f 75 73 0a  } -result en_us.
1090: 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74  .    test msgcat
10a0: 2d 31 2e 38 20 7b 6d 63 70 72 65 66 65 72 65 6e  -1.8 {mcpreferen
10b0: 63 65 73 2c 20 74 77 6f 20 65 6c 65 6d 65 6e 74  ces, two element
10c0: 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09 76 61 72  s} -setup {..var
10d0: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
10e0: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c  locale]..mclocal
10f0: 65 20 65 6e 5f 55 53 0a 20 20 20 20 7d 20 2d 63  e en_US.    } -c
1100: 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61  leanup {..mcloca
1110: 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d  le $locale.    }
1120: 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 70 72 65 66   -body {..mcpref
1130: 65 72 65 6e 63 65 73 0a 20 20 20 20 7d 20 2d 72  erences.    } -r
1140: 65 73 75 6c 74 20 7b 65 6e 5f 75 73 20 65 6e 20  esult {en_us en 
1150: 7b 7d 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73  {}}..    test ms
1160: 67 63 61 74 2d 31 2e 39 20 7b 6d 63 6c 6f 63 61  gcat-1.9 {mcloca
1170: 6c 65 20 73 65 74 2c 20 74 68 72 65 65 20 65 6c  le set, three el
1180: 65 6d 65 6e 74 73 7d 20 2d 73 65 74 75 70 20 7b  ements} -setup {
1190: 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c  ..variable local
11a0: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 20 20 20  e [mclocale].   
11b0: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
11c0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
11d0: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d      } -body {..m
11e0: 63 6c 6f 63 61 6c 65 20 65 6e 5f 55 53 5f 66 75  clocale en_US_fu
11f0: 6e 6b 79 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  nky.    } -resul
1200: 74 20 65 6e 5f 75 73 5f 66 75 6e 6b 79 0a 0a 20  t en_us_funky.. 
1210: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31     test msgcat-1
1220: 2e 31 30 20 7b 6d 63 6c 6f 63 61 6c 65 20 67 65  .10 {mclocale ge
1230: 74 2c 20 74 68 72 65 65 20 65 6c 65 6d 65 6e 74  t, three element
1240: 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09 76 61 72  s} -setup {..var
1250: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
1260: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c  locale]..mclocal
1270: 65 20 65 6e 5f 55 53 5f 66 75 6e 6b 79 0a 20 20  e en_US_funky.  
1280: 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09    } -cleanup {..
1290: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
12a0: 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09  .    } -body {..
12b0: 6d 63 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d  mclocale.    } -
12c0: 72 65 73 75 6c 74 20 65 6e 5f 75 73 5f 66 75 6e  result en_us_fun
12d0: 6b 79 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67  ky..    test msg
12e0: 63 61 74 2d 31 2e 31 31 20 7b 6d 63 70 72 65 66  cat-1.11 {mcpref
12f0: 65 72 65 6e 63 65 73 2c 20 74 68 72 65 65 20 65  erences, three e
1300: 6c 65 6d 65 6e 74 73 7d 20 2d 73 65 74 75 70 20  lements} -setup 
1310: 7b 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61  {..variable loca
1320: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d  le [mclocale]..m
1330: 63 6c 6f 63 61 6c 65 20 65 6e 5f 55 53 5f 66 75  clocale en_US_fu
1340: 6e 6b 79 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e  nky.    } -clean
1350: 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24  up {..mclocale $
1360: 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f  locale.    } -bo
1370: 64 79 20 7b 0a 09 6d 63 70 72 65 66 65 72 65 6e  dy {..mcpreferen
1380: 63 65 73 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  ces.    } -resul
1390: 74 20 7b 65 6e 5f 75 73 5f 66 75 6e 6b 79 20 65  t {en_us_funky e
13a0: 6e 5f 75 73 20 65 6e 20 7b 7d 7d 0a 0a 20 20 20  n_us en {}}..   
13b0: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 2e 31   test msgcat-1.1
13c0: 32 20 7b 6d 63 6c 6f 63 61 6c 65 20 73 65 74 2c  2 {mclocale set,
13d0: 20 72 65 6a 65 63 74 20 65 76 69 6c 20 69 6e 70   reject evil inp
13e0: 75 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 76 61  ut} -setup {..va
13f0: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
1400: 63 6c 6f 63 61 6c 65 5d 0a 20 20 20 20 7d 20 2d  clocale].    } -
1410: 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63  cleanup {..mcloc
1420: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20  ale $locale.    
1430: 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63  } -body {..mcloc
1440: 61 6c 65 20 2f 70 61 74 68 2f 74 6f 2f 65 76 69  ale /path/to/evi
1450: 6c 2f 63 6f 64 65 0a 20 20 20 20 7d 20 2d 72 65  l/code.    } -re
1460: 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20  turnCodes error 
1470: 2d 6d 61 74 63 68 20 67 6c 6f 62 20 2d 72 65 73  -match glob -res
1480: 75 6c 74 20 7b 69 6e 76 61 6c 69 64 20 6e 65 77  ult {invalid new
1490: 4c 6f 63 61 6c 65 20 76 61 6c 75 65 20 2a 7d 0a  Locale value *}.
14a0: 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74  .    test msgcat
14b0: 2d 31 2e 31 33 20 7b 6d 63 6c 6f 63 61 6c 65 20  -1.13 {mclocale 
14c0: 73 65 74 2c 20 72 65 6a 65 63 74 20 65 76 69 6c  set, reject evil
14d0: 20 69 6e 70 75 74 7d 20 2d 73 65 74 75 70 20 7b   input} -setup {
14e0: 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c  ..variable local
14f0: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 20 20 20  e [mclocale].   
1500: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
1510: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
1520: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d      } -body {..m
1530: 63 6c 6f 63 61 6c 65 20 6c 6f 6f 6b 73 2f 6f 6b  clocale looks/ok
1540: 2f 2e 2e 2f 2e 2e 2f 2e 2e 2f 2e 2e 2f 62 75 74  /../../../../but
1550: 2f 69 73 2f 70 61 74 68 2f 74 6f 2f 65 76 69 6c  /is/path/to/evil
1560: 2f 63 6f 64 65 0a 20 20 20 20 7d 20 2d 72 65 74  /code.    } -ret
1570: 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
1580: 6d 61 74 63 68 20 67 6c 6f 62 20 2d 72 65 73 75  match glob -resu
1590: 6c 74 20 7b 69 6e 76 61 6c 69 64 20 6e 65 77 4c  lt {invalid newL
15a0: 6f 63 61 6c 65 20 76 61 6c 75 65 20 2a 7d 0a 0a  ocale value *}..
15b0: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
15c0: 31 2e 31 34 20 7b 6d 63 70 72 65 66 65 72 65 6e  1.14 {mcpreferen
15d0: 63 65 73 2c 20 63 75 73 74 6f 6d 20 6c 6f 63 61  ces, custom loca
15e0: 6c 65 20 70 72 65 66 65 72 65 6e 63 65 73 7d 20  le preferences} 
15f0: 2d 73 65 74 75 70 20 7b 0a 09 76 61 72 69 61 62  -setup {..variab
1600: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
1610: 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 65  ale]..mclocale e
1620: 6e 0a 09 6d 63 70 72 65 66 65 72 65 6e 63 65 73  n..mcpreferences
1630: 20 66 72 20 65 6e 20 7b 7d 0a 20 20 20 20 7d 20   fr en {}.    } 
1640: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f  -cleanup {..mclo
1650: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20  cale $locale.   
1660: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 70 72   } -body {..mcpr
1670: 65 66 65 72 65 6e 63 65 73 0a 20 20 20 20 7d 20  eferences.    } 
1680: 2d 72 65 73 75 6c 74 20 7b 66 72 20 65 6e 20 7b  -result {fr en {
1690: 7d 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67  }}..    test msg
16a0: 63 61 74 2d 31 2e 31 35 20 7b 6d 63 70 72 65 66  cat-1.15 {mcpref
16b0: 65 72 65 6e 63 65 73 2c 20 6f 76 65 72 77 72 69  erences, overwri
16c0: 74 65 20 63 75 73 74 6f 6d 20 6c 6f 63 61 6c 65  te custom locale
16d0: 20 70 72 65 66 65 72 65 6e 63 65 73 7d 5c 0a 20   preferences}\. 
16e0: 20 20 20 2d 73 65 74 75 70 20 7b 0a 09 76 61 72     -setup {..var
16f0: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
1700: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 70 72 65 66 65  locale]..mcprefe
1710: 72 65 6e 63 65 73 20 66 72 20 65 6e 20 7b 7d 0a  rences fr en {}.
1720: 09 6d 63 6c 6f 63 61 6c 65 20 65 6e 0a 20 20 20  .mclocale en.   
1730: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
1740: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
1750: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d      } -body {..m
1760: 63 70 72 65 66 65 72 65 6e 63 65 73 0a 20 20 20  cpreferences.   
1770: 20 7d 20 2d 72 65 73 75 6c 74 20 7b 65 6e 20 7b   } -result {en {
1780: 7d 7d 0a 0a 0a 20 20 20 20 23 20 54 65 73 74 73  }}...    # Tests
1790: 20 6d 73 67 63 61 74 2d 32 2e 2a 3a 20 5b 6d 63   msgcat-2.*: [mc
17a0: 73 65 74 5d 2c 20 5b 6d 63 6d 73 65 74 5d 2c 20  set], [mcmset], 
17b0: 6e 61 6d 65 73 70 61 63 65 20 70 61 72 74 69 74  namespace partit
17c0: 69 6f 6e 69 6e 67 0a 0a 20 20 20 20 74 65 73 74  ioning..    test
17d0: 20 6d 73 67 63 61 74 2d 32 2e 31 20 7b 6d 63 73   msgcat-2.1 {mcs
17e0: 65 74 2c 20 67 6c 6f 62 61 6c 20 73 63 6f 70 65  et, global scope
17f0: 7d 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 65  } {..namespace e
1800: 76 61 6c 20 3a 3a 20 3a 3a 6d 73 67 63 61 74 3a  val :: ::msgcat:
1810: 3a 6d 63 73 65 74 20 20 66 6f 6f 5f 42 41 52 20  :mcset  foo_BAR 
1820: 74 65 78 74 31 20 74 65 78 74 32 0a 20 20 20 20  text1 text2.    
1830: 7d 20 7b 74 65 78 74 32 7d 0a 0a 20 20 20 20 74  } {text2}..    t
1840: 65 73 74 20 6d 73 67 63 61 74 2d 32 2e 32 20 7b  est msgcat-2.2 {
1850: 6d 63 73 65 74 2c 20 67 6c 6f 62 61 6c 20 73 63  mcset, global sc
1860: 6f 70 65 2c 20 64 65 66 61 75 6c 74 7d 20 7b 0a  ope, default} {.
1870: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
1880: 3a 3a 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73  :: ::msgcat::mcs
1890: 65 74 20 66 6f 6f 5f 42 41 52 20 74 65 78 74 33  et foo_BAR text3
18a0: 0a 20 20 20 20 7d 20 7b 74 65 78 74 33 7d 0a 0a  .    } {text3}..
18b0: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
18c0: 32 2e 32 2e 31 20 7b 6d 63 73 65 74 2c 20 6e 61  2.2.1 {mcset, na
18d0: 6d 65 73 70 61 63 65 20 6f 76 65 72 6c 61 70 7d  mespace overlap}
18e0: 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76   {..namespace ev
18f0: 61 6c 20 62 61 7a 20 7b 3a 3a 6d 73 67 63 61 74  al baz {::msgcat
1900: 3a 3a 6d 63 73 65 74 20 20 66 6f 6f 5f 42 41 52  ::mcset  foo_BAR
1910: 20 63 6f 6e 31 20 63 6f 6e 31 62 61 7a 7d 0a 20   con1 con1baz}. 
1920: 20 20 20 7d 20 7b 63 6f 6e 31 62 61 7a 7d 0a 0a     } {con1baz}..
1930: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
1940: 32 2e 33 20 7b 6d 63 73 65 74 2c 20 6e 61 6d 65  2.3 {mcset, name
1950: 73 70 61 63 65 20 6f 76 65 72 6c 61 70 7d 20 2d  space overlap} -
1960: 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70 61  setup {..namespa
1970: 63 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a 6d  ce eval bar {::m
1980: 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 20 66 6f  sgcat::mcset  fo
1990: 6f 5f 42 41 52 20 63 6f 6e 31 20 63 6f 6e 31 62  o_BAR con1 con1b
19a0: 61 72 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 65  ar}..namespace e
19b0: 76 61 6c 20 62 61 7a 20 7b 3a 3a 6d 73 67 63 61  val baz {::msgca
19c0: 74 3a 3a 6d 63 73 65 74 20 20 66 6f 6f 5f 42 41  t::mcset  foo_BA
19d0: 52 20 63 6f 6e 31 20 63 6f 6e 31 62 61 7a 7d 0a  R con1 con1baz}.
19e0: 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65  .variable locale
19f0: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c   [mclocale]..mcl
1a00: 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52 0a 20 20  ocale foo_BAR.  
1a10: 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09    } -cleanup {..
1a20: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
1a30: 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09  .    } -body {..
1a40: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62  namespace eval b
1a50: 61 72 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  ar {::msgcat::mc
1a60: 20 63 6f 6e 31 7d 0a 20 20 20 20 7d 20 2d 72 65   con1}.    } -re
1a70: 73 75 6c 74 20 63 6f 6e 31 62 61 72 0a 0a 20 20  sult con1bar..  
1a80: 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 32 2e    test msgcat-2.
1a90: 34 20 7b 6d 63 73 65 74 2c 20 6e 61 6d 65 73 70  4 {mcset, namesp
1aa0: 61 63 65 20 6f 76 65 72 6c 61 70 7d 20 2d 73 65  ace overlap} -se
1ab0: 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65  tup {..namespace
1ac0: 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a 6d 73 67   eval bar {::msg
1ad0: 63 61 74 3a 3a 6d 63 73 65 74 20 20 66 6f 6f 5f  cat::mcset  foo_
1ae0: 42 41 52 20 63 6f 6e 31 20 63 6f 6e 31 62 61 72  BAR con1 con1bar
1af0: 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61  }..namespace eva
1b00: 6c 20 62 61 7a 20 7b 3a 3a 6d 73 67 63 61 74 3a  l baz {::msgcat:
1b10: 3a 6d 63 73 65 74 20 20 66 6f 6f 5f 42 41 52 20  :mcset  foo_BAR 
1b20: 63 6f 6e 31 20 63 6f 6e 31 62 61 7a 7d 0a 09 76  con1 con1baz}..v
1b30: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
1b40: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63  mclocale]..mcloc
1b50: 61 6c 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20  ale foo_BAR.    
1b60: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63  } -cleanup {..mc
1b70: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20  locale $locale. 
1b80: 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6e 61     } -body {..na
1b90: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 7a  mespace eval baz
1ba0: 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 20 63   {::msgcat::mc c
1bb0: 6f 6e 31 7d 0a 20 20 20 20 7d 20 2d 72 65 73 75  on1}.    } -resu
1bc0: 6c 74 20 63 6f 6e 31 62 61 7a 0a 0a 20 20 20 20  lt con1baz..    
1bd0: 74 65 73 74 20 6d 73 67 63 61 74 2d 32 2e 35 20  test msgcat-2.5 
1be0: 7b 6d 63 6d 73 65 74 2c 20 67 6c 6f 62 61 6c 20  {mcmset, global 
1bf0: 73 63 6f 70 65 7d 20 2d 73 65 74 75 70 20 7b 0a  scope} -setup {.
1c00: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
1c10: 3a 3a 20 7b 0a 09 20 20 20 20 3a 3a 6d 73 67 63  :: {..    ::msgc
1c20: 61 74 3a 3a 6d 63 6d 73 65 74 20 20 66 6f 6f 5f  at::mcmset  foo_
1c30: 42 41 52 20 7b 0a 09 09 73 72 63 31 20 74 72 61  BAR {...src1 tra
1c40: 6e 73 31 0a 09 09 73 72 63 32 20 74 72 61 6e 73  ns1...src2 trans
1c50: 32 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 76 61 72  2..    }..}..var
1c60: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
1c70: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c  locale]..mclocal
1c80: 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20 7d 20  e foo_BAR.    } 
1c90: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f  -cleanup {..mclo
1ca0: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20  cale $locale.   
1cb0: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6e 61 6d 65   } -body {..name
1cc0: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 20 7b 0a  space eval :: {.
1cd0: 09 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d  .    ::msgcat::m
1ce0: 63 20 73 72 63 31 0a 09 7d 0a 20 20 20 20 7d 20  c src1..}.    } 
1cf0: 2d 72 65 73 75 6c 74 20 74 72 61 6e 73 31 0a 0a  -result trans1..
1d00: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
1d10: 32 2e 36 20 7b 6d 63 6d 73 65 74 2c 20 6e 61 6d  2.6 {mcmset, nam
1d20: 65 73 70 61 63 65 20 6f 76 65 72 6c 61 70 7d 20  espace overlap} 
1d30: 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70  -setup {..namesp
1d40: 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a  ace eval bar {::
1d50: 6d 73 67 63 61 74 3a 3a 6d 63 6d 73 65 74 20 20  msgcat::mcmset  
1d60: 66 6f 6f 5f 42 41 52 20 7b 63 6f 6e 32 20 63 6f  foo_BAR {con2 co
1d70: 6e 32 62 61 72 7d 7d 0a 09 6e 61 6d 65 73 70 61  n2bar}}..namespa
1d80: 63 65 20 65 76 61 6c 20 62 61 7a 20 7b 3a 3a 6d  ce eval baz {::m
1d90: 73 67 63 61 74 3a 3a 6d 63 6d 73 65 74 20 20 66  sgcat::mcmset  f
1da0: 6f 6f 5f 42 41 52 20 7b 63 6f 6e 32 20 63 6f 6e  oo_BAR {con2 con
1db0: 32 62 61 7a 7d 7d 0a 09 76 61 72 69 61 62 6c 65  2baz}}..variable
1dc0: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
1dd0: 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f  e]..mclocale foo
1de0: 5f 42 41 52 0a 20 20 20 20 7d 20 2d 63 6c 65 61  _BAR.    } -clea
1df0: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
1e00: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
1e10: 6f 64 79 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65  ody {..namespace
1e20: 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a 6d 73 67   eval bar {::msg
1e30: 63 61 74 3a 3a 6d 63 20 63 6f 6e 32 7d 0a 20 20  cat::mc con2}.  
1e40: 20 20 7d 20 2d 72 65 73 75 6c 74 20 63 6f 6e 32    } -result con2
1e50: 62 61 72 0a 0a 20 20 20 20 74 65 73 74 20 6d 73  bar..    test ms
1e60: 67 63 61 74 2d 32 2e 37 20 7b 6d 63 6d 73 65 74  gcat-2.7 {mcmset
1e70: 2c 20 6e 61 6d 65 73 70 61 63 65 20 6f 76 65 72  , namespace over
1e80: 6c 61 70 7d 20 2d 73 65 74 75 70 20 7b 0a 09 6e  lap} -setup {..n
1e90: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61  amespace eval ba
1ea0: 72 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 6d  r {::msgcat::mcm
1eb0: 73 65 74 20 20 66 6f 6f 5f 42 41 52 20 7b 63 6f  set  foo_BAR {co
1ec0: 6e 32 20 63 6f 6e 32 62 61 72 7d 7d 0a 09 6e 61  n2 con2bar}}..na
1ed0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 7a  mespace eval baz
1ee0: 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 6d 73   {::msgcat::mcms
1ef0: 65 74 20 20 66 6f 6f 5f 42 41 52 20 7b 63 6f 6e  et  foo_BAR {con
1f00: 32 20 63 6f 6e 32 62 61 7a 7d 7d 0a 09 76 61 72  2 con2baz}}..var
1f10: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
1f20: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c  locale]..mclocal
1f30: 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20 7d 20  e foo_BAR.    } 
1f40: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f  -cleanup {..mclo
1f50: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20  cale $locale.   
1f60: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6e 61 6d 65   } -body {..name
1f70: 73 70 61 63 65 20 65 76 61 6c 20 62 61 7a 20 7b  space eval baz {
1f80: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 20 63 6f 6e  ::msgcat::mc con
1f90: 32 7d 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74  2}.    } -result
1fa0: 20 63 6f 6e 32 62 61 7a 0a 0a 20 20 20 20 23 20   con2baz..    # 
1fb0: 54 65 73 74 73 20 6d 73 67 63 61 74 2d 33 2e 2a  Tests msgcat-3.*
1fc0: 3a 20 5b 6d 63 73 65 74 5d 2c 20 5b 6d 63 5d 2c  : [mcset], [mc],
1fd0: 20 63 61 74 61 6c 6f 67 20 22 69 6e 68 65 72 69   catalog "inheri
1fe0: 74 61 6e 63 65 22 0a 20 20 20 20 23 0a 20 20 20  tance".    #.   
1ff0: 20 23 20 54 65 73 74 20 6d 63 73 65 74 20 61 6e   # Test mcset an
2000: 64 20 6d 63 2c 20 65 6e 73 75 72 69 6e 67 20 74  d mc, ensuring t
2010: 68 61 74 20 6d 6f 72 65 20 73 70 65 63 69 66 69  hat more specifi
2020: 63 20 6c 6f 63 61 6c 65 73 0a 20 20 20 20 23 20  c locales.    # 
2030: 28 65 2e 67 2e 20 65 6e 5f 55 4b 29 20 77 69 6c  (e.g. en_UK) wil
2040: 6c 20 73 65 61 72 63 68 20 6c 65 73 73 20 73 70  l search less sp
2050: 65 63 69 66 69 63 20 6c 6f 63 61 6c 65 73 0a 20  ecific locales. 
2060: 20 20 20 23 20 28 65 2e 67 2e 20 65 6e 29 20 66     # (e.g. en) f
2070: 6f 72 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 73  or translation s
2080: 74 72 69 6e 67 73 2e 0a 20 20 20 20 23 0a 20 20  trings..    #.  
2090: 20 20 23 20 44 6f 20 74 68 69 73 20 66 6f 72 20    # Do this for 
20a0: 74 68 65 20 31 35 20 70 65 72 6d 75 74 61 74 69  the 15 permutati
20b0: 6f 6e 73 20 6f 66 0a 20 20 20 20 23 20 20 20 20  ons of.    #    
20c0: 20 6c 6f 63 61 6c 65 73 3a 20 7b 66 6f 6f 20 66   locales: {foo f
20d0: 6f 6f 5f 42 41 52 20 66 6f 6f 5f 42 41 52 5f 62  oo_BAR foo_BAR_b
20e0: 61 7a 7d 0a 20 20 20 20 23 20 20 20 20 20 73 74  az}.    #     st
20f0: 72 69 6e 67 73 3a 20 7b 6f 76 30 20 6f 76 31 20  rings: {ov0 ov1 
2100: 6f 76 32 20 6f 76 33 20 6f 76 34 7d 0a 20 20 20  ov2 ov3 ov4}.   
2110: 20 23 09 20 20 6c 6f 63 61 6c 65 20 52 4f 4f 54   #.  locale ROOT
2120: 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 73 20          defines 
2130: 6f 76 30 2c 20 6f 76 31 2c 20 6f 76 32 2c 20 6f  ov0, ov1, ov2, o
2140: 76 33 0a 20 20 20 20 23 20 20 20 20 20 6c 6f 63  v3.    #     loc
2150: 61 6c 65 20 66 6f 6f 20 20 20 20 20 20 20 20 20  ale foo         
2160: 64 65 66 69 6e 65 73 20 20 20 20 20 20 6f 76 31  defines      ov1
2170: 2c 20 6f 76 32 2c 20 6f 76 33 0a 20 20 20 20 23  , ov2, ov3.    #
2180: 20 20 20 20 20 6c 6f 63 61 6c 65 20 66 6f 6f 5f       locale foo_
2190: 42 41 52 20 20 20 20 20 64 65 66 69 6e 65 73 20  BAR     defines 
21a0: 20 20 20 20 20 20 20 20 20 20 6f 76 32 2c 20 6f            ov2, o
21b0: 76 33 0a 20 20 20 20 23 20 20 20 20 20 6c 6f 63  v3.    #     loc
21c0: 61 6c 65 20 66 6f 6f 5f 42 41 52 5f 42 41 5a 20  ale foo_BAR_BAZ 
21d0: 64 65 66 69 6e 65 73 20 20 20 20 20 20 20 20 20  defines         
21e0: 20 20 20 20 20 20 20 6f 76 33 0a 20 20 20 20 23         ov3.    #
21f0: 20 20 20 20 20 28 6f 76 34 20 69 73 20 64 65 66       (ov4 is def
2200: 69 6e 65 64 20 69 6e 20 6e 6f 6e 65 29 0a 20 20  ined in none).  
2210: 20 20 23 20 53 6f 2c 0a 20 20 20 20 23 20 20 20    # So,.    #   
2220: 20 20 6f 76 33 20 73 68 6f 75 6c 64 20 62 65 20    ov3 should be 
2230: 72 65 73 6f 6c 76 65 64 20 69 6e 20 66 6f 6f 2c  resolved in foo,
2240: 20 66 6f 6f 5f 42 41 52 2c 20 66 6f 6f 5f 42 41   foo_BAR, foo_BA
2250: 52 5f 62 61 7a 0a 20 20 20 20 23 20 20 20 20 20  R_baz.    #     
2260: 6f 76 32 20 73 68 6f 75 6c 64 20 62 65 20 72 65  ov2 should be re
2270: 73 6f 6c 76 65 64 20 69 6e 20 66 6f 6f 2c 20 66  solved in foo, f
2280: 6f 6f 5f 42 41 52 0a 20 20 20 20 23 20 20 20 20  oo_BAR.    #    
2290: 20 6f 76 32 20 73 68 6f 75 6c 64 20 72 65 73 6f   ov2 should reso
22a0: 6c 76 65 20 74 6f 20 66 6f 6f 5f 42 41 52 20 69  lve to foo_BAR i
22b0: 6e 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 0a 20 20  n foo_BAR_baz.  
22c0: 20 20 23 20 20 20 20 20 6f 76 31 20 73 68 6f 75    #     ov1 shou
22d0: 6c 64 20 62 65 20 72 65 73 6f 6c 76 65 64 20 69  ld be resolved i
22e0: 6e 20 66 6f 6f 0a 20 20 20 20 23 20 20 20 20 20  n foo.    #     
22f0: 6f 76 31 20 73 68 6f 75 6c 64 20 72 65 73 6f 6c  ov1 should resol
2300: 76 65 20 74 6f 20 66 6f 6f 20 69 6e 20 66 6f 6f  ve to foo in foo
2310: 5f 42 41 52 2c 20 66 6f 6f 5f 42 41 52 5f 62 61  _BAR, foo_BAR_ba
2320: 7a 0a 20 20 20 20 23 20 20 20 20 20 6f 76 34 20  z.    #     ov4 
2330: 73 68 6f 75 6c 64 20 62 65 20 72 65 73 6f 6c 76  should be resolv
2340: 65 64 20 69 6e 20 6e 6f 6e 65 2c 20 61 6e 64 20  ed in none, and 
2350: 63 61 6c 6c 20 6d 63 75 6e 6b 6e 6f 77 6e 0a 20  call mcunknown. 
2360: 20 20 20 23 0a 20 20 20 20 76 61 72 69 61 62 6c     #.    variabl
2370: 65 20 63 6f 75 6e 74 20 32 0a 20 20 20 20 76 61  e count 2.    va
2380: 72 69 61 62 6c 65 20 72 65 73 75 6c 74 0a 20 20  riable result.  
2390: 20 20 61 72 72 61 79 20 73 65 74 20 72 65 73 75    array set resu
23a0: 6c 74 20 7b 0a 09 66 6f 6f 2c 6f 76 30 20 6f 76  lt {..foo,ov0 ov
23b0: 30 5f 52 4f 4f 54 20 66 6f 6f 2c 6f 76 31 20 6f  0_ROOT foo,ov1 o
23c0: 76 31 5f 66 6f 6f 20 66 6f 6f 2c 6f 76 32 20 6f  v1_foo foo,ov2 o
23d0: 76 32 5f 66 6f 6f 0a 09 66 6f 6f 2c 6f 76 33 20  v2_foo..foo,ov3 
23e0: 6f 76 33 5f 66 6f 6f 20 66 6f 6f 2c 6f 76 34 20  ov3_foo foo,ov4 
23f0: 6f 76 34 0a 09 66 6f 6f 5f 42 41 52 2c 6f 76 30  ov4..foo_BAR,ov0
2400: 20 6f 76 30 5f 52 4f 4f 54 20 66 6f 6f 5f 42 41   ov0_ROOT foo_BA
2410: 52 2c 6f 76 31 20 6f 76 31 5f 66 6f 6f 20 66 6f  R,ov1 ov1_foo fo
2420: 6f 5f 42 41 52 2c 6f 76 32 20 6f 76 32 5f 66 6f  o_BAR,ov2 ov2_fo
2430: 6f 5f 42 41 52 0a 09 66 6f 6f 5f 42 41 52 2c 6f  o_BAR..foo_BAR,o
2440: 76 33 20 6f 76 33 5f 66 6f 6f 5f 42 41 52 09 66  v3 ov3_foo_BAR.f
2450: 6f 6f 5f 42 41 52 2c 6f 76 34 20 6f 76 34 0a 09  oo_BAR,ov4 ov4..
2460: 66 6f 6f 5f 42 41 52 5f 62 61 7a 2c 6f 76 30 20  foo_BAR_baz,ov0 
2470: 6f 76 30 5f 52 4f 4f 54 20 66 6f 6f 5f 42 41 52  ov0_ROOT foo_BAR
2480: 5f 62 61 7a 2c 6f 76 31 20 6f 76 31 5f 66 6f 6f  _baz,ov1 ov1_foo
2490: 0a 09 66 6f 6f 5f 42 41 52 5f 62 61 7a 2c 6f 76  ..foo_BAR_baz,ov
24a0: 32 20 6f 76 32 5f 66 6f 6f 5f 42 41 52 0a 09 66  2 ov2_foo_BAR..f
24b0: 6f 6f 5f 42 41 52 5f 62 61 7a 2c 6f 76 33 20 6f  oo_BAR_baz,ov3 o
24c0: 76 33 5f 66 6f 6f 5f 42 41 52 5f 62 61 7a 20 66  v3_foo_BAR_baz f
24d0: 6f 6f 5f 42 41 52 5f 62 61 7a 2c 6f 76 34 20 6f  oo_BAR_baz,ov4 o
24e0: 76 34 0a 20 20 20 20 7d 0a 20 20 20 20 76 61 72  v4.    }.    var
24f0: 69 61 62 6c 65 20 6c 6f 63 0a 20 20 20 20 76 61  iable loc.    va
2500: 72 69 61 62 6c 65 20 73 74 72 69 6e 67 0a 20 20  riable string.  
2510: 20 20 66 6f 72 65 61 63 68 20 6c 6f 63 20 7b 66    foreach loc {f
2520: 6f 6f 20 66 6f 6f 5f 42 41 52 20 66 6f 6f 5f 42  oo foo_BAR foo_B
2530: 41 52 5f 62 61 7a 7d 20 7b 0a 09 66 6f 72 65 61  AR_baz} {..forea
2540: 63 68 20 73 74 72 69 6e 67 20 7b 6f 76 30 20 6f  ch string {ov0 o
2550: 76 31 20 6f 76 32 20 6f 76 33 20 6f 76 34 7d 20  v1 ov2 ov3 ov4} 
2560: 7b 0a 09 20 20 20 20 74 65 73 74 20 6d 73 67 63  {..    test msgc
2570: 61 74 2d 33 2e 24 63 6f 75 6e 74 20 7b 6d 63 73  at-3.$count {mcs
2580: 65 74 2c 20 6f 76 65 72 6c 61 70 7d 20 2d 73 65  et, overlap} -se
2590: 74 75 70 20 7b 0a 09 09 6d 63 73 65 74 20 7b 7d  tup {...mcset {}
25a0: 20 6f 76 30 20 6f 76 30 5f 52 4f 4f 54 0a 09 09   ov0 ov0_ROOT...
25b0: 6d 63 73 65 74 20 7b 7d 20 6f 76 31 20 6f 76 31  mcset {} ov1 ov1
25c0: 5f 52 4f 4f 54 0a 09 09 6d 63 73 65 74 20 7b 7d  _ROOT...mcset {}
25d0: 20 6f 76 32 20 6f 76 32 5f 52 4f 4f 54 0a 09 09   ov2 ov2_ROOT...
25e0: 6d 63 73 65 74 20 7b 7d 20 6f 76 33 20 6f 76 33  mcset {} ov3 ov3
25f0: 5f 52 4f 4f 54 0a 09 09 6d 63 73 65 74 20 66 6f  _ROOT...mcset fo
2600: 6f 20 6f 76 31 20 6f 76 31 5f 66 6f 6f 0a 09 09  o ov1 ov1_foo...
2610: 6d 63 73 65 74 20 66 6f 6f 20 6f 76 32 20 6f 76  mcset foo ov2 ov
2620: 32 5f 66 6f 6f 0a 09 09 6d 63 73 65 74 20 66 6f  2_foo...mcset fo
2630: 6f 20 6f 76 33 20 6f 76 33 5f 66 6f 6f 0a 09 09  o ov3 ov3_foo...
2640: 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 20 6f 76  mcset foo_BAR ov
2650: 32 20 6f 76 32 5f 66 6f 6f 5f 42 41 52 0a 09 09  2 ov2_foo_BAR...
2660: 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 20 6f 76  mcset foo_BAR ov
2670: 33 20 6f 76 33 5f 66 6f 6f 5f 42 41 52 0a 09 09  3 ov3_foo_BAR...
2680: 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 5f 62 61  mcset foo_BAR_ba
2690: 7a 20 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f 42 41  z ov3 ov3_foo_BA
26a0: 52 5f 62 61 7a 0a 09 09 76 61 72 69 61 62 6c 65  R_baz...variable
26b0: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
26c0: 65 5d 0a 09 09 6d 63 6c 6f 63 61 6c 65 20 24 6c  e]...mclocale $l
26d0: 6f 63 0a 09 20 20 20 20 7d 20 2d 63 6c 65 61 6e  oc..    } -clean
26e0: 75 70 20 7b 0a 09 09 6d 63 6c 6f 63 61 6c 65 20  up {...mclocale 
26f0: 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 7d 20 2d  $locale..    } -
2700: 62 6f 64 79 20 7b 0a 09 09 6d 63 20 24 73 74 72  body {...mc $str
2710: 69 6e 67 0a 09 20 20 20 20 7d 20 2d 72 65 73 75  ing..    } -resu
2720: 6c 74 20 24 72 65 73 75 6c 74 28 24 6c 6f 63 2c  lt $result($loc,
2730: 24 73 74 72 69 6e 67 29 0a 09 20 20 20 20 69 6e  $string)..    in
2740: 63 72 20 63 6f 75 6e 74 0a 09 7d 0a 20 20 20 20  cr count..}.    
2750: 7d 0a 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63  }.    unset -noc
2760: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 0a 0a  omplain result..
2770: 20 20 20 20 23 20 54 65 73 74 73 20 6d 73 67 63      # Tests msgc
2780: 61 74 2d 34 2e 2a 3a 20 5b 6d 63 75 6e 6b 6e 6f  at-4.*: [mcunkno
2790: 77 6e 5d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73  wn]..    test ms
27a0: 67 63 61 74 2d 34 2e 32 20 7b 6d 63 75 6e 6b 6e  gcat-4.2 {mcunkn
27b0: 6f 77 6e 2c 20 64 65 66 61 75 6c 74 7d 20 2d 73  own, default} -s
27c0: 65 74 75 70 20 7b 0a 09 6d 63 73 65 74 20 66 6f  etup {..mcset fo
27d0: 6f 20 75 6e 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20  o unk1 "unknown 
27e0: 31 22 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63  1"..variable loc
27f0: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
2800: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 20 20 20  mclocale foo.   
2810: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
2820: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
2830: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d      } -body {..m
2840: 63 20 75 6e 6b 31 0a 20 20 20 20 7d 20 2d 72 65  c unk1.    } -re
2850: 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 31 7d  sult {unknown 1}
2860: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
2870: 74 2d 34 2e 33 20 7b 6d 63 75 6e 6b 6e 6f 77 6e  t-4.3 {mcunknown
2880: 2c 20 64 65 66 61 75 6c 74 7d 20 2d 73 65 74 75  , default} -setu
2890: 70 20 7b 0a 09 6d 63 73 65 74 20 66 6f 6f 20 75  p {..mcset foo u
28a0: 6e 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20 31 22 0a  nk1 "unknown 1".
28b0: 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65  .variable locale
28c0: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c   [mclocale]..mcl
28d0: 6f 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20  ocale foo.    } 
28e0: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f  -cleanup {..mclo
28f0: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20  cale $locale.   
2900: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 20 75   } -body {..mc u
2910: 6e 6b 32 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  nk2.    } -resul
2920: 74 20 75 6e 6b 32 0a 0a 20 20 20 20 74 65 73 74  t unk2..    test
2930: 20 6d 73 67 63 61 74 2d 34 2e 34 20 7b 6d 63 75   msgcat-4.4 {mcu
2940: 6e 6b 6e 6f 77 6e 2c 20 6f 76 65 72 72 69 64 64  nknown, overridd
2950: 65 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 09 72 65  en} -setup {..re
2960: 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d  name ::msgcat::m
2970: 63 75 6e 6b 6e 6f 77 6e 20 53 61 76 65 64 4d 63  cunknown SavedMc
2980: 75 6e 6b 6e 6f 77 6e 0a 09 70 72 6f 63 20 3a 3a  unknown..proc ::
2990: 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77  msgcat::mcunknow
29a0: 6e 20 7b 64 6f 6d 20 73 7d 20 7b 0a 09 20 20 20  n {dom s} {..   
29b0: 20 72 65 74 75 72 6e 20 75 6e 6b 6e 6f 77 6e 3a   return unknown:
29c0: 24 64 6f 6d 3a 24 73 0a 09 7d 0a 09 6d 63 73 65  $dom:$s..}..mcse
29d0: 74 20 66 6f 6f 20 75 6e 6b 31 20 22 75 6e 6b 6e  t foo unk1 "unkn
29e0: 6f 77 6e 20 31 22 0a 09 76 61 72 69 61 62 6c 65  own 1"..variable
29f0: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
2a00: 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f  e]..mclocale foo
2a10: 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20  .    } -cleanup 
2a20: 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63  {..mclocale $loc
2a30: 61 6c 65 0a 09 72 65 6e 61 6d 65 20 3a 3a 6d 73  ale..rename ::ms
2a40: 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20  gcat::mcunknown 
2a50: 7b 7d 0a 09 72 65 6e 61 6d 65 20 53 61 76 65 64  {}..rename Saved
2a60: 4d 63 75 6e 6b 6e 6f 77 6e 20 3a 3a 6d 73 67 63  Mcunknown ::msgc
2a70: 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 0a 20 20  at::mcunknown.  
2a80: 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 20    } -body {..mc 
2a90: 75 6e 6b 31 0a 20 20 20 20 7d 20 2d 72 65 73 75  unk1.    } -resu
2aa0: 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 31 7d 0a 0a  lt {unknown 1}..
2ab0: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
2ac0: 34 2e 35 20 7b 6d 63 75 6e 6b 6e 6f 77 6e 2c 20  4.5 {mcunknown, 
2ad0: 6f 76 65 72 72 69 64 64 65 6e 7d 20 2d 73 65 74  overridden} -set
2ae0: 75 70 20 7b 0a 09 72 65 6e 61 6d 65 20 3a 3a 6d  up {..rename ::m
2af0: 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e  sgcat::mcunknown
2b00: 20 53 61 76 65 64 4d 63 75 6e 6b 6e 6f 77 6e 0a   SavedMcunknown.
2b10: 09 70 72 6f 63 20 3a 3a 6d 73 67 63 61 74 3a 3a  .proc ::msgcat::
2b20: 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 64 6f 6d 20 73  mcunknown {dom s
2b30: 7d 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20  } {..    return 
2b40: 75 6e 6b 6e 6f 77 6e 3a 24 64 6f 6d 3a 24 73 0a  unknown:$dom:$s.
2b50: 09 7d 0a 09 6d 63 73 65 74 20 66 6f 6f 20 75 6e  .}..mcset foo un
2b60: 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20 31 22 0a 09  k1 "unknown 1"..
2b70: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
2b80: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f  [mclocale]..mclo
2b90: 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20 2d  cale foo.    } -
2ba0: 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63  cleanup {..mcloc
2bb0: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 72 65 6e  ale $locale..ren
2bc0: 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  ame ::msgcat::mc
2bd0: 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 09 72 65 6e 61  unknown {}..rena
2be0: 6d 65 20 53 61 76 65 64 4d 63 75 6e 6b 6e 6f 77  me SavedMcunknow
2bf0: 6e 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e  n ::msgcat::mcun
2c00: 6b 6e 6f 77 6e 0a 20 20 20 20 7d 20 2d 62 6f 64  known.    } -bod
2c10: 79 20 7b 0a 09 6d 63 20 75 6e 6b 32 0a 20 20 20  y {..mc unk2.   
2c20: 20 7d 20 2d 72 65 73 75 6c 74 20 7b 75 6e 6b 6e   } -result {unkn
2c30: 6f 77 6e 3a 66 6f 6f 3a 75 6e 6b 32 7d 0a 0a 20  own:foo:unk2}.. 
2c40: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 34     test msgcat-4
2c50: 2e 36 20 7b 6d 63 75 6e 6b 6e 6f 77 6e 2c 20 75  .6 {mcunknown, u
2c60: 70 6c 65 76 65 6c 20 63 6f 6e 74 65 78 74 7d 20  plevel context} 
2c70: 2d 73 65 74 75 70 20 7b 0a 09 72 65 6e 61 6d 65  -setup {..rename
2c80: 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b   ::msgcat::mcunk
2c90: 6e 6f 77 6e 20 53 61 76 65 64 4d 63 75 6e 6b 6e  nown SavedMcunkn
2ca0: 6f 77 6e 0a 09 70 72 6f 63 20 3a 3a 6d 73 67 63  own..proc ::msgc
2cb0: 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 64  at::mcunknown {d
2cc0: 6f 6d 20 73 7d 20 7b 0a 09 20 20 20 20 72 65 74  om s} {..    ret
2cd0: 75 72 6e 20 22 75 6e 6b 6e 6f 77 6e 3a 24 64 6f  urn "unknown:$do
2ce0: 6d 3a 24 73 3a 5b 65 78 70 72 20 7b 5b 69 6e 66  m:$s:[expr {[inf
2cf0: 6f 20 6c 65 76 65 6c 5d 20 2d 20 31 7d 5d 22 0a  o level] - 1}]".
2d00: 09 7d 0a 09 6d 63 73 65 74 20 66 6f 6f 20 75 6e  .}..mcset foo un
2d10: 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20 31 22 0a 09  k1 "unknown 1"..
2d20: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
2d30: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f  [mclocale]..mclo
2d40: 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20 2d  cale foo.    } -
2d50: 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63  cleanup {..mcloc
2d60: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 72 65 6e  ale $locale..ren
2d70: 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  ame ::msgcat::mc
2d80: 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 09 72 65 6e 61  unknown {}..rena
2d90: 6d 65 20 53 61 76 65 64 4d 63 75 6e 6b 6e 6f 77  me SavedMcunknow
2da0: 6e 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e  n ::msgcat::mcun
2db0: 6b 6e 6f 77 6e 0a 20 20 20 20 7d 20 2d 62 6f 64  known.    } -bod
2dc0: 79 20 7b 0a 09 6d 63 20 75 6e 6b 32 0a 20 20 20  y {..mc unk2.   
2dd0: 20 7d 20 2d 72 65 73 75 6c 74 20 75 6e 6b 6e 6f   } -result unkno
2de0: 77 6e 3a 66 6f 6f 3a 75 6e 6b 32 3a 5b 69 6e 66  wn:foo:unk2:[inf
2df0: 6f 20 6c 65 76 65 6c 5d 0a 0a 20 20 20 20 23 20  o level]..    # 
2e00: 54 65 73 74 73 20 6d 73 67 63 61 74 2d 35 2e 2a  Tests msgcat-5.*
2e10: 3a 20 5b 6d 63 6c 6f 61 64 5d 0a 0a 20 20 20 20  : [mcload]..    
2e20: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 73  variable locales
2e30: 20 7b 7b 7d 20 66 6f 6f 20 66 6f 6f 5f 42 41 52   {{} foo foo_BAR
2e40: 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 7d 0a 20 20   foo_BAR_baz}.  
2e50: 20 20 73 65 74 20 6d 73 67 64 69 72 20 5b 6d 61    set msgdir [ma
2e60: 6b 65 44 69 72 65 63 74 6f 72 79 20 6d 73 67 64  keDirectory msgd
2e70: 69 72 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20  ir].    foreach 
2e80: 6c 6f 63 20 24 6c 6f 63 61 6c 65 73 20 7b 0a 09  loc $locales {..
2e90: 69 66 20 7b 20 24 6c 6f 63 20 65 71 20 7b 7d 20  if { $loc eq {} 
2ea0: 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 73 67  } {..    set msg
2eb0: 20 52 4f 4f 54 0a 09 7d 20 65 6c 73 65 20 7b 0a   ROOT..} else {.
2ec0: 09 20 20 20 20 73 65 74 20 6d 73 67 20 5b 73 74  .    set msg [st
2ed0: 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 24 6c 6f  ring tolower $lo
2ee0: 63 5d 0a 09 7d 0a 09 6d 61 6b 65 46 69 6c 65 20  c]..}..makeFile 
2ef0: 5b 6c 69 73 74 20 3a 3a 6d 73 67 63 61 74 3a 3a  [list ::msgcat::
2f00: 6d 63 73 65 74 20 24 6c 6f 63 20 61 62 63 20 61  mcset $loc abc a
2f10: 62 63 2d 24 6c 6f 63 5d 20 24 6d 73 67 2e 6d 73  bc-$loc] $msg.ms
2f20: 67 20 24 6d 73 67 64 69 72 0a 20 20 20 20 7d 0a  g $msgdir.    }.
2f30: 20 20 20 20 76 61 72 69 61 62 6c 65 20 63 6f 75      variable cou
2f40: 6e 74 20 31 0a 20 20 20 20 66 6f 72 65 61 63 68  nt 1.    foreach
2f50: 20 6c 6f 63 20 7b 66 6f 6f 20 66 6f 6f 5f 42 41   loc {foo foo_BA
2f60: 52 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 7d 20 7b  R foo_BAR_baz} {
2f70: 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 35 2e  ..test msgcat-5.
2f80: 24 63 6f 75 6e 74 20 7b 6d 63 6c 6f 61 64 7d 20  $count {mcload} 
2f90: 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61  -setup {..    va
2fa0: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
2fb0: 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20 3a 3a  clocale]..    ::
2fc0: 6d 73 67 63 61 74 3a 3a 6d 63 6c 6f 63 61 6c 65  msgcat::mclocale
2fd0: 20 22 22 0a 09 20 20 20 20 3a 3a 6d 73 67 63 61   ""..    ::msgca
2fe0: 74 3a 3a 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c  t::mcloadedlocal
2ff0: 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20 3a 3a  es clear..    ::
3000: 6d 73 67 63 61 74 3a 3a 6d 63 70 61 63 6b 61 67  msgcat::mcpackag
3010: 65 63 6f 6e 66 69 67 20 75 6e 73 65 74 20 6d 63  econfig unset mc
3020: 66 6f 6c 64 65 72 0a 09 20 20 20 20 6d 63 6c 6f  folder..    mclo
3030: 63 61 6c 65 20 24 6c 6f 63 0a 09 7d 20 2d 63 6c  cale $loc..} -cl
3040: 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c  eanup {..    mcl
3050: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20  ocale $locale.. 
3060: 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 6c     ::msgcat::mcl
3070: 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65  oadedlocales cle
3080: 61 72 0a 09 20 20 20 20 3a 3a 6d 73 67 63 61 74  ar..    ::msgcat
3090: 3a 3a 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69  ::mcpackageconfi
30a0: 67 20 75 6e 73 65 74 20 6d 63 66 6f 6c 64 65 72  g unset mcfolder
30b0: 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20  ..} -body {..   
30c0: 20 6d 63 6c 6f 61 64 20 24 6d 73 67 64 69 72 0a   mcload $msgdir.
30d0: 09 7d 20 2d 72 65 73 75 6c 74 20 5b 65 78 70 72  .} -result [expr
30e0: 20 7b 20 24 63 6f 75 6e 74 2b 31 20 7d 5d 0a 09   { $count+1 }]..
30f0: 69 6e 63 72 20 63 6f 75 6e 74 0a 20 20 20 20 7d  incr count.    }
3100: 0a 0a 20 20 20 20 23 20 45 76 65 6e 20 74 68 6f  ..    # Even tho
3110: 75 67 68 20 66 6f 6f 5f 42 41 52 5f 6e 6f 74 65  ugh foo_BAR_note
3120: 78 69 73 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  xist does not ex
3130: 69 73 74 2c 0a 20 20 20 20 23 20 66 6f 6f 5f 42  ist,.    # foo_B
3140: 41 52 2c 20 66 6f 6f 20 61 6e 64 20 74 68 65 20  AR, foo and the 
3150: 72 6f 6f 74 20 73 68 6f 75 6c 64 20 62 65 20 6c  root should be l
3160: 6f 61 64 65 64 2e 0a 09 74 65 73 74 20 6d 73 67  oaded...test msg
3170: 63 61 74 2d 35 2e 34 20 7b 6d 63 6c 6f 61 64 7d  cat-5.4 {mcload}
3180: 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76   -setup {..    v
3190: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
31a0: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d  mclocale]..    m
31b0: 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52 5f  clocale foo_BAR_
31c0: 6e 6f 74 65 78 69 73 74 0a 09 7d 20 2d 63 6c 65  notexist..} -cle
31d0: 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  anup {..    mclo
31e0: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20  cale $locale..  
31f0: 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65    mcloadedlocale
3200: 73 20 63 6c 65 61 72 0a 09 20 20 20 20 6d 63 70  s clear..    mcp
3210: 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 75 6e 73  ackageconfig uns
3220: 65 74 20 6d 63 66 6f 6c 64 65 72 0a 09 7d 20 2d  et mcfolder..} -
3230: 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  body {..    mclo
3240: 61 64 20 24 6d 73 67 64 69 72 0a 09 7d 20 2d 72  ad $msgdir..} -r
3250: 65 73 75 6c 74 20 33 0a 0a 09 74 65 73 74 20 6d  esult 3...test m
3260: 73 67 63 61 74 2d 35 2e 35 20 7b 6d 63 6c 6f 61  sgcat-5.5 {mcloa
3270: 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  d} -setup {..   
3280: 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65   variable locale
3290: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20   [mclocale]..   
32a0: 20 6d 63 6c 6f 63 61 6c 65 20 6e 6f 5f 46 49 5f   mclocale no_FI_
32b0: 6e 6f 74 65 78 69 73 74 0a 09 7d 20 2d 63 6c 65  notexist..} -cle
32c0: 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  anup {..    mclo
32d0: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20  cale $locale..  
32e0: 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65    mcloadedlocale
32f0: 73 20 63 6c 65 61 72 0a 09 20 20 20 20 6d 63 70  s clear..    mcp
3300: 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 75 6e 73  ackageconfig uns
3310: 65 74 20 6d 63 66 6f 6c 64 65 72 0a 09 7d 20 2d  et mcfolder..} -
3320: 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  body {..    mclo
3330: 61 64 20 24 6d 73 67 64 69 72 0a 09 7d 20 2d 72  ad $msgdir..} -r
3340: 65 73 75 6c 74 20 31 0a 0a 09 74 65 73 74 20 6d  esult 1...test m
3350: 73 67 63 61 74 2d 35 2e 36 20 7b 6d 63 6c 6f 61  sgcat-5.6 {mcloa
3360: 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  d} -setup {..   
3370: 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65   variable locale
3380: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20   [mclocale]..   
3390: 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20   mclocale foo.. 
33a0: 20 20 20 6d 63 6c 6f 61 64 20 24 6d 73 67 64 69     mcload $msgdi
33b0: 72 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  r..} -cleanup {.
33c0: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c  .    mclocale $l
33d0: 6f 63 61 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b  ocale..} -body {
33e0: 0a 09 20 20 20 20 6d 63 20 61 62 63 0a 09 7d 20  ..    mc abc..} 
33f0: 2d 72 65 73 75 6c 74 20 61 62 63 2d 66 6f 6f 0a  -result abc-foo.
3400: 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 35 2e  ..test msgcat-5.
3410: 37 20 7b 6d 63 6c 6f 61 64 7d 20 2d 73 65 74 75  7 {mcload} -setu
3420: 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c  p {..    variabl
3430: 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  e locale [mcloca
3440: 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  le]..    mclocal
3450: 65 20 66 6f 6f 5f 42 41 52 0a 09 20 20 20 20 6d  e foo_BAR..    m
3460: 63 6c 6f 61 64 20 24 6d 73 67 64 69 72 0a 09 7d  cload $msgdir..}
3470: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20   -cleanup {..   
3480: 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c   mclocale $local
3490: 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  e..} -body {..  
34a0: 20 20 6d 63 20 61 62 63 0a 09 7d 20 2d 72 65 73    mc abc..} -res
34b0: 75 6c 74 20 61 62 63 2d 66 6f 6f 5f 42 41 52 0a  ult abc-foo_BAR.
34c0: 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 35 2e  ..test msgcat-5.
34d0: 38 20 7b 6d 63 6c 6f 61 64 7d 20 2d 73 65 74 75  8 {mcload} -setu
34e0: 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c  p {..    variabl
34f0: 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  e locale [mcloca
3500: 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  le]..    mclocal
3510: 65 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 0a 09 20  e foo_BAR_baz.. 
3520: 20 20 20 6d 63 6c 6f 61 64 20 24 6d 73 67 64 69     mcload $msgdi
3530: 72 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  r..} -cleanup {.
3540: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c  .    mclocale $l
3550: 6f 63 61 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b  ocale..} -body {
3560: 0a 09 20 20 20 20 6d 63 20 61 62 63 0a 09 7d 20  ..    mc abc..} 
3570: 2d 72 65 73 75 6c 74 20 61 62 63 2d 66 6f 6f 5f  -result abc-foo_
3580: 42 41 52 5f 62 61 7a 0a 0a 09 74 65 73 74 20 6d  BAR_baz...test m
3590: 73 67 63 61 74 2d 35 2e 39 20 7b 6d 63 6c 6f 61  sgcat-5.9 {mcloa
35a0: 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  d} -setup {..   
35b0: 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65   variable locale
35c0: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20   [mclocale]..   
35d0: 20 6d 63 6c 6f 63 61 6c 65 20 6e 6f 5f 46 49 5f   mclocale no_FI_
35e0: 6e 6f 74 65 78 69 73 74 0a 09 20 20 20 20 6d 63  notexist..    mc
35f0: 6c 6f 61 64 20 24 6d 73 67 64 69 72 0a 09 7d 20  load $msgdir..} 
3600: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20  -cleanup {..    
3610: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
3620: 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20  ..} -body {..   
3630: 20 6d 63 20 61 62 63 0a 09 7d 20 2d 72 65 73 75   mc abc..} -resu
3640: 6c 74 20 61 62 63 2d 0a 0a 09 74 65 73 74 20 6d  lt abc-...test m
3650: 73 67 63 61 74 2d 35 2e 31 30 20 7b 6d 63 6c 6f  sgcat-5.10 {mclo
3660: 61 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20  ad} -setup {..  
3670: 20 20 72 65 6e 61 6d 65 20 3a 3a 6d 73 67 63 61    rename ::msgca
3680: 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 53 61 76  t::mcunknown Sav
3690: 65 64 4d 63 75 6e 6b 6e 6f 77 6e 0a 09 20 20 20  edMcunknown..   
36a0: 20 70 72 6f 63 20 3a 3a 6d 73 67 63 61 74 3a 3a   proc ::msgcat::
36b0: 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 64 6f 6d 20 73  mcunknown {dom s
36c0: 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 75 6e 6b  } {...return unk
36d0: 6e 6f 77 6e 3a 24 64 6f 6d 3a 24 73 0a 09 20 20  nown:$dom:$s..  
36e0: 20 20 7d 0a 09 20 20 20 20 76 61 72 69 61 62 6c    }..    variabl
36f0: 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  e locale [mcloca
3700: 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  le]..    mclocal
3710: 65 20 6e 6f 5f 46 49 5f 6e 6f 74 65 78 69 73 74  e no_FI_notexist
3720: 0a 09 20 20 20 20 6d 63 6c 6f 61 64 20 24 6d 73  ..    mcload $ms
3730: 67 64 69 72 0a 09 7d 20 2d 63 6c 65 61 6e 75 70  gdir..} -cleanup
3740: 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65   {..    mclocale
3750: 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 72 65   $locale..    re
3760: 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d  name ::msgcat::m
3770: 63 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 09 20 20 20  cunknown {}..   
3780: 20 72 65 6e 61 6d 65 20 53 61 76 65 64 4d 63 75   rename SavedMcu
3790: 6e 6b 6e 6f 77 6e 20 3a 3a 6d 73 67 63 61 74 3a  nknown ::msgcat:
37a0: 3a 6d 63 75 6e 6b 6e 6f 77 6e 0a 09 7d 20 2d 62  :mcunknown..} -b
37b0: 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 20 64 65  ody {..    mc de
37c0: 66 0a 09 7d 20 2d 72 65 73 75 6c 74 20 75 6e 6b  f..} -result unk
37d0: 6e 6f 77 6e 3a 6e 6f 5f 66 69 5f 6e 6f 74 65 78  nown:no_fi_notex
37e0: 69 73 74 3a 64 65 66 0a 0a 09 74 65 73 74 20 6d  ist:def...test m
37f0: 73 67 63 61 74 2d 35 2e 31 31 20 7b 6d 63 70 61  sgcat-5.11 {mcpa
3800: 63 6b 61 67 65 63 6f 6e 66 69 67 20 6d 63 66 6f  ckageconfig mcfo
3810: 6c 64 65 72 7d 20 2d 73 65 74 75 70 20 7b 0a 09  lder} -setup {..
3820: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63      variable loc
3830: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
3840: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a      mclocale "".
3850: 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63  .    mcloadedloc
3860: 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20  ales clear..    
3870: 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20  mcpackageconfig 
3880: 75 6e 73 65 74 20 6d 63 66 6f 6c 64 65 72 0a 09  unset mcfolder..
3890: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20  } -cleanup {..  
38a0: 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61    mclocale $loca
38b0: 6c 65 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64  le..    mcloaded
38c0: 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20  locales clear.. 
38d0: 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66     mcpackageconf
38e0: 69 67 20 75 6e 73 65 74 20 6d 63 66 6f 6c 64 65  ig unset mcfolde
38f0: 72 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  r..} -body {..  
3900: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09    mclocale foo..
3910: 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e      mcpackagecon
3920: 66 69 67 20 73 65 74 20 6d 63 66 6f 6c 64 65 72  fig set mcfolder
3930: 20 24 6d 73 67 64 69 72 0a 09 7d 20 2d 72 65 73   $msgdir..} -res
3940: 75 6c 74 20 32 0a 0a 20 20 20 20 66 6f 72 65 61  ult 2..    forea
3950: 63 68 20 6c 6f 63 20 24 6c 6f 63 61 6c 65 73 20  ch loc $locales 
3960: 7b 0a 09 69 66 20 7b 20 24 6c 6f 63 20 65 71 20  {..if { $loc eq 
3970: 7b 7d 20 7d 20 7b 0a 09 20 20 20 20 73 65 74 20  {} } {..    set 
3980: 6d 73 67 20 52 4f 4f 54 0a 09 7d 20 65 6c 73 65  msg ROOT..} else
3990: 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 73 67 20   {..    set msg 
39a0: 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20  [string tolower 
39b0: 24 6c 6f 63 5d 0a 09 7d 0a 09 72 65 6d 6f 76 65  $loc]..}..remove
39c0: 46 69 6c 65 20 24 6d 73 67 2e 6d 73 67 20 24 6d  File $msg.msg $m
39d0: 73 67 64 69 72 0a 20 20 20 20 7d 0a 20 20 20 20  sgdir.    }.    
39e0: 72 65 6d 6f 76 65 44 69 72 65 63 74 6f 72 79 20  removeDirectory 
39f0: 6d 73 67 64 69 72 0a 0a 20 20 20 20 23 20 54 65  msgdir..    # Te
3a00: 73 74 73 20 6d 73 67 63 61 74 2d 36 2e 2a 3a 20  sts msgcat-6.*: 
3a10: 5b 6d 63 73 65 74 5d 2c 20 5b 6d 63 5d 20 6e 61  [mcset], [mc] na
3a20: 6d 65 73 70 61 63 65 20 69 6e 68 65 72 69 74 61  mespace inherita
3a30: 6e 63 65 0a 23 0a 23 20 54 65 73 74 20 6d 63 73  nce.#.# Test mcs
3a40: 65 74 20 61 6e 64 20 6d 63 2c 20 65 6e 73 75 72  et and mc, ensur
3a50: 69 6e 67 20 74 68 61 74 20 72 65 73 6f 6c 75 74  ing that resolut
3a60: 69 6f 6e 20 66 6f 72 20 6d 65 73 73 61 67 65 73  ion for messages
3a70: 0a 23 20 70 72 6f 63 65 65 64 73 20 66 72 6f 6d  .# proceeds from
3a80: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 73 20   the current ns 
3a90: 74 6f 20 69 74 73 20 70 61 72 65 6e 74 20 61 6e  to its parent an
3aa0: 64 20 73 6f 20 6f 6e 20 74 6f 20 74 68 65 0a 23  d so on to the.#
3ab0: 20 67 6c 6f 62 61 6c 20 6e 73 2e 0a 23 0a 23 20   global ns..#.# 
3ac0: 44 6f 20 74 68 69 73 20 66 6f 72 20 74 68 65 20  Do this for the 
3ad0: 31 32 20 70 65 72 6d 75 74 61 74 69 6f 6e 73 20  12 permutations 
3ae0: 6f 66 0a 23 20 20 20 20 20 6c 6f 63 61 6c 65 73  of.#     locales
3af0: 3a 20 66 6f 6f 0a 23 20 20 20 20 20 6e 61 6d 65  : foo.#     name
3b00: 73 70 61 63 65 73 3a 20 66 6f 6f 20 66 6f 6f 3a  spaces: foo foo:
3b10: 3a 62 61 72 20 66 6f 6f 3a 3a 62 61 72 3a 3a 62  :bar foo::bar::b
3b20: 61 7a 0a 23 20 20 20 20 20 73 74 72 69 6e 67 73  az.#     strings
3b30: 3a 20 7b 6f 76 31 20 6f 76 32 20 6f 76 33 20 6f  : {ov1 ov2 ov3 o
3b40: 76 34 7d 0a 23 20 20 20 20 20 6e 61 6d 65 73 70  v4}.#     namesp
3b50: 61 63 65 20 3a 3a 66 6f 6f 20 20 20 20 20 20 20  ace ::foo       
3b60: 20 20 20 20 20 64 65 66 69 6e 65 73 20 6f 76 31       defines ov1
3b70: 2c 20 6f 76 32 2c 20 6f 76 33 0a 23 20 20 20 20  , ov2, ov3.#    
3b80: 20 6e 61 6d 65 73 70 61 63 65 20 3a 3a 66 6f 6f   namespace ::foo
3b90: 3a 3a 62 61 72 20 20 20 20 20 20 20 64 65 66 69  ::bar       defi
3ba0: 6e 65 73 20 20 20 20 20 20 6f 76 32 2c 20 6f 76  nes      ov2, ov
3bb0: 33 0a 23 20 20 20 20 20 6e 61 6d 65 73 70 61 63  3.#     namespac
3bc0: 65 20 3a 3a 66 6f 6f 3a 3a 62 61 72 3a 3a 62 61  e ::foo::bar::ba
3bd0: 7a 20 20 64 65 66 69 6e 65 73 20 20 20 20 20 20  z  defines      
3be0: 20 20 20 20 20 6f 76 33 0a 23 0a 23 20 20 20 20       ov3.#.#    
3bf0: 20 6f 76 34 20 69 73 20 6e 6f 74 20 64 65 66 69   ov4 is not defi
3c00: 6e 65 64 20 69 6e 20 61 6e 79 20 6e 61 6d 65 73  ned in any names
3c10: 70 61 63 65 2e 0a 23 0a 23 20 53 6f 2c 0a 23 20  pace..#.# So,.# 
3c20: 20 20 20 20 6f 76 33 20 73 68 6f 75 6c 64 20 62      ov3 should b
3c30: 65 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 3a 3a  e resolved in ::
3c40: 66 6f 6f 3a 3a 62 61 72 3a 3a 62 61 7a 2c 20 3a  foo::bar::baz, :
3c50: 3a 66 6f 6f 3a 3a 62 61 72 2c 20 3a 3a 66 6f 6f  :foo::bar, ::foo
3c60: 3b 0a 23 20 20 20 20 20 6f 76 32 20 73 68 6f 75  ;.#     ov2 shou
3c70: 6c 64 20 62 65 20 72 65 73 6f 6c 76 65 64 20 69  ld be resolved i
3c80: 6e 20 3a 3a 66 6f 6f 2c 20 3a 3a 66 6f 6f 3a 3a  n ::foo, ::foo::
3c90: 62 61 72 0a 23 20 20 20 20 20 6f 76 31 20 73 68  bar.#     ov1 sh
3ca0: 6f 75 6c 64 20 62 65 20 72 65 73 6f 6c 76 65 64  ould be resolved
3cb0: 20 69 6e 20 3a 3a 66 6f 6f 0a 23 20 20 20 20 20   in ::foo.#     
3cc0: 6f 76 34 20 73 68 6f 75 6c 64 20 62 65 20 72 65  ov4 should be re
3cd0: 73 6f 6c 76 65 64 20 69 6e 20 6e 6f 6e 65 2c 20  solved in none, 
3ce0: 61 6e 64 20 63 61 6c 6c 20 6d 63 75 6e 6b 6e 6f  and call mcunkno
3cf0: 77 6e 0a 23 0a 0a 20 20 20 20 76 61 72 69 61 62  wn.#..    variab
3d00: 6c 65 20 72 65 73 75 6c 74 0a 20 20 20 20 61 72  le result.    ar
3d10: 72 61 79 20 73 65 74 20 72 65 73 75 6c 74 20 7b  ray set result {
3d20: 0a 09 66 6f 6f 2c 6f 76 31 20 6f 76 31 5f 66 6f  ..foo,ov1 ov1_fo
3d30: 6f 20 66 6f 6f 2c 6f 76 32 20 6f 76 32 5f 66 6f  o foo,ov2 ov2_fo
3d40: 6f 20 66 6f 6f 2c 6f 76 33 20 6f 76 33 5f 66 6f  o foo,ov3 ov3_fo
3d50: 6f 20 66 6f 6f 2c 6f 76 34 20 6f 76 34 0a 09 66  o foo,ov4 ov4..f
3d60: 6f 6f 3a 3a 62 61 72 2c 6f 76 31 20 6f 76 31 5f  oo::bar,ov1 ov1_
3d70: 66 6f 6f 20 66 6f 6f 3a 3a 62 61 72 2c 6f 76 32  foo foo::bar,ov2
3d80: 20 6f 76 32 5f 66 6f 6f 5f 62 61 72 0a 09 66 6f   ov2_foo_bar..fo
3d90: 6f 3a 3a 62 61 72 2c 6f 76 33 20 6f 76 33 5f 66  o::bar,ov3 ov3_f
3da0: 6f 6f 5f 62 61 72 20 66 6f 6f 3a 3a 62 61 72 2c  oo_bar foo::bar,
3db0: 6f 76 34 20 6f 76 34 20 66 6f 6f 3a 3a 62 61 72  ov4 ov4 foo::bar
3dc0: 3a 3a 62 61 7a 2c 6f 76 31 20 6f 76 31 5f 66 6f  ::baz,ov1 ov1_fo
3dd0: 6f 0a 09 66 6f 6f 3a 3a 62 61 72 3a 3a 62 61 7a  o..foo::bar::baz
3de0: 2c 6f 76 32 20 6f 76 32 5f 66 6f 6f 5f 62 61 72  ,ov2 ov2_foo_bar
3df0: 20 66 6f 6f 3a 3a 62 61 72 3a 3a 62 61 7a 2c 6f   foo::bar::baz,o
3e00: 76 33 20 6f 76 33 5f 66 6f 6f 5f 62 61 72 5f 62  v3 ov3_foo_bar_b
3e10: 61 7a 0a 09 66 6f 6f 3a 3a 62 61 72 3a 3a 62 61  az..foo::bar::ba
3e20: 7a 2c 6f 76 34 20 6f 76 34 0a 20 20 20 20 7d 0a  z,ov4 ov4.    }.
3e30: 20 20 20 20 76 61 72 69 61 62 6c 65 20 63 6f 75      variable cou
3e40: 6e 74 20 31 0a 20 20 20 20 76 61 72 69 61 62 6c  nt 1.    variabl
3e50: 65 20 6e 73 0a 20 20 20 20 66 6f 72 65 61 63 68  e ns.    foreach
3e60: 20 6e 73 20 7b 66 6f 6f 20 66 6f 6f 3a 3a 62 61   ns {foo foo::ba
3e70: 72 20 66 6f 6f 3a 3a 62 61 72 3a 3a 62 61 7a 7d  r foo::bar::baz}
3e80: 20 7b 0a 09 66 6f 72 65 61 63 68 20 73 74 72 69   {..foreach stri
3e90: 6e 67 20 7b 6f 76 31 20 6f 76 32 20 6f 76 33 20  ng {ov1 ov2 ov3 
3ea0: 6f 76 34 7d 20 7b 0a 09 20 20 20 20 74 65 73 74  ov4} {..    test
3eb0: 20 6d 73 67 63 61 74 2d 36 2e 24 63 6f 75 6e 74   msgcat-6.$count
3ec0: 20 7b 6d 63 73 65 74 2c 20 6f 76 65 72 6c 61 70   {mcset, overlap
3ed0: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 09 6e 61 6d  } -setup {...nam
3ee0: 65 73 70 61 63 65 20 65 76 61 6c 20 66 6f 6f 20  espace eval foo 
3ef0: 7b 0a 09 09 20 20 20 20 3a 3a 6d 73 67 63 61 74  {...    ::msgcat
3f00: 3a 3a 6d 63 73 65 74 20 66 6f 6f 20 6f 76 31 20  ::mcset foo ov1 
3f10: 6f 76 31 5f 66 6f 6f 0a 09 09 20 20 20 20 3a 3a  ov1_foo...    ::
3f20: 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f  msgcat::mcset fo
3f30: 6f 20 6f 76 32 20 6f 76 32 5f 66 6f 6f 0a 09 09  o ov2 ov2_foo...
3f40: 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63      ::msgcat::mc
3f50: 73 65 74 20 66 6f 6f 20 6f 76 33 20 6f 76 33 5f  set foo ov3 ov3_
3f60: 66 6f 6f 0a 09 09 20 20 20 20 6e 61 6d 65 73 70  foo...    namesp
3f70: 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b 0a 09  ace eval bar {..
3f80: 09 09 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65  ..::msgcat::mcse
3f90: 74 20 66 6f 6f 20 6f 76 32 20 6f 76 32 5f 66 6f  t foo ov2 ov2_fo
3fa0: 6f 5f 62 61 72 0a 09 09 09 3a 3a 6d 73 67 63 61  o_bar....::msgca
3fb0: 74 3a 3a 6d 63 73 65 74 20 66 6f 6f 20 6f 76 33  t::mcset foo ov3
3fc0: 20 6f 76 33 5f 66 6f 6f 5f 62 61 72 0a 09 09 09   ov3_foo_bar....
3fd0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62  namespace eval b
3fe0: 61 7a 20 7b 0a 09 09 09 20 20 20 20 3a 3a 6d 73  az {....    ::ms
3ff0: 67 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f 6f 20  gcat::mcset foo 
4000: 6f 76 33 20 22 6f 76 33 5f 66 6f 6f 5f 62 61 72  ov3 "ov3_foo_bar
4010: 5f 62 61 7a 22 0a 09 09 09 7d 0a 09 09 20 20 20  _baz"....}...   
4020: 20 7d 0a 0a 09 09 7d 0a 09 09 76 61 72 69 61 62   }....}...variab
4030: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
4040: 61 6c 65 5d 0a 09 09 6d 63 6c 6f 63 61 6c 65 20  ale]...mclocale 
4050: 66 6f 6f 0a 09 20 20 20 20 7d 20 2d 63 6c 65 61  foo..    } -clea
4060: 6e 75 70 20 7b 0a 09 09 6d 63 6c 6f 63 61 6c 65  nup {...mclocale
4070: 20 24 6c 6f 63 61 6c 65 0a 09 09 6e 61 6d 65 73   $locale...names
4080: 70 61 63 65 20 64 65 6c 65 74 65 20 66 6f 6f 0a  pace delete foo.
4090: 09 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09  .    } -body {..
40a0: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
40b0: 24 6e 73 20 5b 6c 69 73 74 20 3a 3a 6d 73 67 63  $ns [list ::msgc
40c0: 61 74 3a 3a 6d 63 20 24 73 74 72 69 6e 67 5d 0a  at::mc $string].
40d0: 09 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 24  .    } -result $
40e0: 72 65 73 75 6c 74 28 24 6e 73 2c 24 73 74 72 69  result($ns,$stri
40f0: 6e 67 29 0a 09 20 20 20 20 69 6e 63 72 20 63 6f  ng)..    incr co
4100: 75 6e 74 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20  unt..}.    }..  
4110: 20 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74    # Tests msgcat
4120: 2d 37 2e 2a 3a 20 5b 6d 63 5d 20 65 78 74 72 61  -7.*: [mc] extra
4130: 20 61 72 67 73 20 70 72 6f 63 65 73 73 65 64 20   args processed 
4140: 62 79 20 5b 66 6f 72 6d 61 74 5d 0a 0a 20 20 20  by [format]..   
4150: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 37 2e 31   test msgcat-7.1
4160: 20 7b 6d 63 20 65 78 74 72 61 20 61 72 67 73 20   {mc extra args 
4170: 67 6f 20 74 68 72 6f 75 67 68 20 74 6f 20 66 6f  go through to fo
4180: 72 6d 61 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09  rmat} -setup {..
4190: 6d 63 73 65 74 20 66 6f 6f 20 66 6f 72 6d 61 74  mcset foo format
41a0: 31 20 22 74 68 69 73 20 69 73 20 61 20 74 65 73  1 "this is a tes
41b0: 74 22 0a 09 6d 63 73 65 74 20 66 6f 6f 20 66 6f  t"..mcset foo fo
41c0: 72 6d 61 74 32 20 22 74 68 69 73 20 69 73 20 61  rmat2 "this is a
41d0: 20 25 73 22 0a 09 6d 63 73 65 74 20 66 6f 6f 20   %s"..mcset foo 
41e0: 66 6f 72 6d 61 74 33 20 22 74 68 69 73 20 69 73  format3 "this is
41f0: 20 61 20 25 73 20 25 73 22 0a 09 76 61 72 69 61   a %s %s"..varia
4200: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
4210: 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20  cale]..mclocale 
4220: 66 6f 6f 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e  foo.    } -clean
4230: 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24  up {..mclocale $
4240: 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f  locale.    } -bo
4250: 64 79 20 7b 0a 09 6d 63 20 66 6f 72 6d 61 74 31  dy {..mc format1
4260: 20 22 67 6f 6f 64 20 74 65 73 74 22 0a 20 20 20   "good test".   
4270: 20 7d 20 2d 72 65 73 75 6c 74 20 22 74 68 69 73   } -result "this
4280: 20 69 73 20 61 20 74 65 73 74 22 0a 0a 20 20 20   is a test"..   
4290: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 37 2e 32   test msgcat-7.2
42a0: 20 7b 6d 63 20 65 78 74 72 61 20 61 72 67 73 20   {mc extra args 
42b0: 67 6f 20 74 68 72 6f 75 67 68 20 74 6f 20 66 6f  go through to fo
42c0: 72 6d 61 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09  rmat} -setup {..
42d0: 6d 63 73 65 74 20 66 6f 6f 20 66 6f 72 6d 61 74  mcset foo format
42e0: 31 20 22 74 68 69 73 20 69 73 20 61 20 74 65 73  1 "this is a tes
42f0: 74 22 0a 09 6d 63 73 65 74 20 66 6f 6f 20 66 6f  t"..mcset foo fo
4300: 72 6d 61 74 32 20 22 74 68 69 73 20 69 73 20 61  rmat2 "this is a
4310: 20 25 73 22 0a 09 6d 63 73 65 74 20 66 6f 6f 20   %s"..mcset foo 
4320: 66 6f 72 6d 61 74 33 20 22 74 68 69 73 20 69 73  format3 "this is
4330: 20 61 20 25 73 20 25 73 22 0a 09 76 61 72 69 61   a %s %s"..varia
4340: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
4350: 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20  cale]..mclocale 
4360: 66 6f 6f 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e  foo.    } -clean
4370: 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24  up {..mclocale $
4380: 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f  locale.    } -bo
4390: 64 79 20 7b 0a 09 6d 63 20 66 6f 72 6d 61 74 32  dy {..mc format2
43a0: 20 22 67 6f 6f 64 20 74 65 73 74 22 0a 20 20 20   "good test".   
43b0: 20 7d 20 2d 72 65 73 75 6c 74 20 22 74 68 69 73   } -result "this
43c0: 20 69 73 20 61 20 67 6f 6f 64 20 74 65 73 74 22   is a good test"
43d0: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
43e0: 74 2d 37 2e 33 20 7b 6d 63 20 65 72 72 6f 72 73  t-7.3 {mc errors
43f0: 20 66 72 6f 6d 20 66 6f 72 6d 61 74 20 61 72 65   from format are
4400: 20 70 72 6f 70 61 67 61 74 65 64 7d 20 2d 73 65   propagated} -se
4410: 74 75 70 20 7b 0a 09 6d 63 73 65 74 20 66 6f 6f  tup {..mcset foo
4420: 20 66 6f 72 6d 61 74 31 20 22 74 68 69 73 20 69   format1 "this i
4430: 73 20 61 20 74 65 73 74 22 0a 09 6d 63 73 65 74  s a test"..mcset
4440: 20 66 6f 6f 20 66 6f 72 6d 61 74 32 20 22 74 68   foo format2 "th
4450: 69 73 20 69 73 20 61 20 25 73 22 0a 09 6d 63 73  is is a %s"..mcs
4460: 65 74 20 66 6f 6f 20 66 6f 72 6d 61 74 33 20 22  et foo format3 "
4470: 74 68 69 73 20 69 73 20 61 20 25 73 20 25 73 22  this is a %s %s"
4480: 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c  ..variable local
4490: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63  e [mclocale]..mc
44a0: 6c 6f 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d  locale foo.    }
44b0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c   -cleanup {..mcl
44c0: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20  ocale $locale.  
44d0: 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 63 61 74    } -body {..cat
44e0: 63 68 20 7b 6d 63 20 66 6f 72 6d 61 74 33 20 22  ch {mc format3 "
44f0: 67 6f 6f 64 20 74 65 73 74 22 7d 0a 20 20 20 20  good test"}.    
4500: 7d 20 2d 72 65 73 75 6c 74 20 31 0a 0a 20 20 20  } -result 1..   
4510: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 37 2e 34   test msgcat-7.4
4520: 20 7b 6d 63 2c 20 65 78 74 72 61 20 61 72 67 73   {mc, extra args
4530: 20 61 72 65 20 67 69 76 65 6e 20 74 6f 20 75 6e   are given to un
4540: 6b 6e 6f 77 6e 7d 20 2d 73 65 74 75 70 20 7b 0a  known} -setup {.
4550: 09 6d 63 73 65 74 20 66 6f 6f 20 66 6f 72 6d 61  .mcset foo forma
4560: 74 31 20 22 74 68 69 73 20 69 73 20 61 20 74 65  t1 "this is a te
4570: 73 74 22 0a 09 6d 63 73 65 74 20 66 6f 6f 20 66  st"..mcset foo f
4580: 6f 72 6d 61 74 32 20 22 74 68 69 73 20 69 73 20  ormat2 "this is 
4590: 61 20 25 73 22 0a 09 6d 63 73 65 74 20 66 6f 6f  a %s"..mcset foo
45a0: 20 66 6f 72 6d 61 74 33 20 22 74 68 69 73 20 69   format3 "this i
45b0: 73 20 61 20 25 73 20 25 73 22 0a 09 76 61 72 69  s a %s %s"..vari
45c0: 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c  able locale [mcl
45d0: 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65  ocale]..mclocale
45e0: 20 66 6f 6f 0a 20 20 20 20 7d 20 2d 63 6c 65 61   foo.    } -clea
45f0: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
4600: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
4610: 6f 64 79 20 7b 0a 09 6d 63 20 22 74 68 69 73 20  ody {..mc "this 
4620: 69 73 20 61 20 25 73 22 20 22 67 6f 6f 64 20 74  is a %s" "good t
4630: 65 73 74 22 0a 20 20 20 20 7d 20 2d 72 65 73 75  est".    } -resu
4640: 6c 74 20 22 74 68 69 73 20 69 73 20 61 20 67 6f  lt "this is a go
4650: 6f 64 20 74 65 73 74 22 0a 0a 20 20 20 20 23 20  od test"..    # 
4660: 54 65 73 74 73 20 6d 73 67 63 61 74 2d 38 2e 2a  Tests msgcat-8.*
4670: 3a 20 5b 6d 63 66 6c 73 65 74 5d 0a 0a 20 20 20  : [mcflset]..   
4680: 20 73 65 74 20 6d 73 67 64 69 72 31 20 5b 6d 61   set msgdir1 [ma
4690: 6b 65 44 69 72 65 63 74 6f 72 79 20 6d 73 67 64  keDirectory msgd
46a0: 69 72 31 5d 0a 20 20 20 20 6d 61 6b 65 46 69 6c  ir1].    makeFil
46b0: 65 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 66  e {::msgcat::mcf
46c0: 6c 73 65 74 20 6b 31 20 76 31 7d 20 6c 31 2e 6d  lset k1 v1} l1.m
46d0: 73 67 20 24 6d 73 67 64 69 72 31 0a 0a 09 74 65  sg $msgdir1...te
46e0: 73 74 20 6d 73 67 63 61 74 2d 38 2e 31 20 7b 6d  st msgcat-8.1 {m
46f0: 63 66 6c 73 65 74 7d 20 2d 73 65 74 75 70 20 7b  cflset} -setup {
4700: 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  ..    variable l
4710: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
4720: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 6c  ..    mclocale l
4730: 31 0a 09 20 20 20 20 6d 63 6c 6f 61 64 20 24 6d  1..    mcload $m
4740: 73 67 64 69 72 31 0a 09 7d 20 2d 63 6c 65 61 6e  sgdir1..} -clean
4750: 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61  up {..    mcloca
4760: 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 7d 20 2d 62  le $locale..} -b
4770: 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 20 6b 31  ody {..    mc k1
4780: 0a 09 7d 20 2d 72 65 73 75 6c 74 20 76 31 0a 0a  ..} -result v1..
4790: 20 20 20 20 72 65 6d 6f 76 65 46 69 6c 65 20 6c      removeFile l
47a0: 31 2e 6d 73 67 20 24 6d 73 67 64 69 72 31 0a 20  1.msg $msgdir1. 
47b0: 20 20 20 72 65 6d 6f 76 65 44 69 72 65 63 74 6f     removeDirecto
47c0: 72 79 20 6d 73 67 64 69 72 31 0a 0a 20 20 20 20  ry msgdir1..    
47d0: 73 65 74 20 6d 73 67 64 69 72 32 20 5b 6d 61 6b  set msgdir2 [mak
47e0: 65 44 69 72 65 63 74 6f 72 79 20 6d 73 67 64 69  eDirectory msgdi
47f0: 72 32 5d 0a 20 20 20 20 73 65 74 20 6d 73 67 64  r2].    set msgd
4800: 69 72 33 20 5b 6d 61 6b 65 44 69 72 65 63 74 6f  ir3 [makeDirecto
4810: 72 79 20 6d 73 67 64 69 72 33 5d 0a 20 20 20 20  ry msgdir3].    
4820: 6d 61 6b 65 46 69 6c 65 20 22 3a 3a 6d 73 67 63  makeFile "::msgc
4830: 61 74 3a 3a 6d 63 66 6c 73 65 74 20 6b 32 20 76  at::mcflset k2 v
4840: 32 20 3b 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  2 ; ::msgcat::mc
4850: 6c 6f 61 64 20 5b 6c 69 73 74 20 24 6d 73 67 64  load [list $msgd
4860: 69 72 33 5d 22 5c 0a 09 20 20 20 20 6c 32 2e 6d  ir3]"\..    l2.m
4870: 73 67 20 24 6d 73 67 64 69 72 32 0a 20 20 20 20  sg $msgdir2.    
4880: 6d 61 6b 65 46 69 6c 65 20 7b 3a 3a 6d 73 67 63  makeFile {::msgc
4890: 61 74 3a 3a 6d 63 66 6c 73 65 74 20 6b 33 20 76  at::mcflset k3 v
48a0: 33 20 3b 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  3 ; ::msgcat::mc
48b0: 66 6c 6d 73 65 74 20 7b 6b 34 20 76 34 20 6b 35  flmset {k4 v4 k5
48c0: 20 76 35 7d 7d 20 6c 32 2e 6d 73 67 20 24 6d 73   v5}} l2.msg $ms
48d0: 67 64 69 72 33 0a 0a 09 23 20 63 68 61 69 6e 65  gdir3...# chaine
48e0: 64 20 6d 63 6c 6f 61 64 0a 09 74 65 73 74 20 6d  d mcload..test m
48f0: 73 67 63 61 74 2d 38 2e 32 20 7b 6d 63 66 6c 73  sgcat-8.2 {mcfls
4900: 65 74 2f 6d 63 66 6c 6d 73 65 74 7d 20 2d 73 65  et/mcflmset} -se
4910: 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61  tup {..    varia
4920: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
4930: 63 61 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63  cale]..    mcloc
4940: 61 6c 65 20 6c 32 0a 09 20 20 20 20 6d 63 6c 6f  ale l2..    mclo
4950: 61 64 20 24 6d 73 67 64 69 72 32 0a 09 7d 20 2d  ad $msgdir2..} -
4960: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
4970: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
4980: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
4990: 72 65 74 75 72 6e 20 5b 6d 63 20 6b 32 5d 5b 6d  return [mc k2][m
49a0: 63 20 6b 33 5d 2d 2d 5b 6d 63 20 6b 34 5d 5b 6d  c k3]--[mc k4][m
49b0: 63 20 6b 35 5d 0a 09 7d 20 2d 72 65 73 75 6c 74  c k5]..} -result
49c0: 20 76 32 76 33 2d 2d 76 34 76 35 0a 0a 20 20 20   v2v3--v4v5..   
49d0: 20 72 65 6d 6f 76 65 46 69 6c 65 20 6c 32 2e 6d   removeFile l2.m
49e0: 73 67 20 24 6d 73 67 64 69 72 32 0a 20 20 20 20  sg $msgdir2.    
49f0: 72 65 6d 6f 76 65 44 69 72 65 63 74 6f 72 79 20  removeDirectory 
4a00: 6d 73 67 64 69 72 32 0a 20 20 20 20 72 65 6d 6f  msgdir2.    remo
4a10: 76 65 44 69 72 65 63 74 6f 72 79 20 6d 73 67 64  veDirectory msgd
4a20: 69 72 33 0a 0a 20 20 20 20 23 20 54 65 73 74 73  ir3..    # Tests
4a30: 20 6d 73 67 63 61 74 2d 39 2e 2a 3a 20 5b 6d 63   msgcat-9.*: [mc
4a40: 65 78 69 73 74 73 5d 0a 0a 09 74 65 73 74 20 6d  exists]...test m
4a50: 73 67 63 61 74 2d 39 2e 31 20 7b 6d 63 65 78 69  sgcat-9.1 {mcexi
4a60: 73 74 73 20 6e 6f 20 70 61 72 61 6d 65 74 65 72  sts no parameter
4a70: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
4a80: 63 65 78 69 73 74 73 0a 09 7d 20 2d 72 65 74 75  cexists..} -retu
4a90: 72 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72 65 73  rnCodes 1\..-res
4aa0: 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61 72 67  ult {wrong # arg
4ab0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 6d 63  s: should be "mc
4ac0: 65 78 69 73 74 73 20 3f 2d 65 78 61 63 74 6e 61  exists ?-exactna
4ad0: 6d 65 73 70 61 63 65 3f 20 3f 2d 65 78 61 63 74  mespace? ?-exact
4ae0: 6c 6f 63 61 6c 65 3f 20 3f 2d 6e 61 6d 65 73 70  locale? ?-namesp
4af0: 61 63 65 20 6e 73 3f 20 73 72 63 22 7d 0a 0a 09  ace ns? src"}...
4b00: 74 65 73 74 20 6d 73 67 63 61 74 2d 39 2e 32 20  test msgcat-9.2 
4b10: 7b 6d 63 65 78 69 73 74 73 20 75 6e 6b 6e 6f 77  {mcexists unknow
4b20: 6e 20 6f 70 74 69 6f 6e 7d 20 2d 62 6f 64 79 20  n option} -body 
4b30: 7b 0a 09 20 20 20 20 6d 63 65 78 69 73 74 73 20  {..    mcexists 
4b40: 2d 75 6e 6b 6e 6f 77 6e 20 73 72 63 0a 09 7d 20  -unknown src..} 
4b50: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a  -returnCodes 1\.
4b60: 09 2d 72 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77  .-result {unknow
4b70: 6e 20 6f 70 74 69 6f 6e 20 22 2d 75 6e 6b 6e 6f  n option "-unkno
4b80: 77 6e 22 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63  wn"}...test msgc
4b90: 61 74 2d 39 2e 33 20 7b 6d 63 65 78 69 73 74 73  at-9.3 {mcexists
4ba0: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20  } -setup {..    
4bb0: 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a  mcforgetpackage.
4bc0: 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f  .    variable lo
4bd0: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
4be0: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f  .    mclocale fo
4bf0: 6f 0a 09 20 20 20 20 6d 63 73 65 74 20 66 6f 6f  o..    mcset foo
4c00: 20 6b 31 20 76 31 0a 09 7d 20 2d 63 6c 65 61 6e   k1 v1..} -clean
4c10: 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61  up {..    mcloca
4c20: 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 7d 20 2d 62  le $locale..} -b
4c30: 6f 64 79 20 7b 0a 09 20 20 20 20 6c 69 73 74 20  ody {..    list 
4c40: 5b 6d 63 65 78 69 73 74 73 20 6b 31 5d 20 5b 6d  [mcexists k1] [m
4c50: 63 65 78 69 73 74 73 20 6b 32 5d 0a 09 7d 20 2d  cexists k2]..} -
4c60: 72 65 73 75 6c 74 20 7b 31 20 30 7d 0a 0a 09 74  result {1 0}...t
4c70: 65 73 74 20 6d 73 67 63 61 74 2d 39 2e 34 20 7b  est msgcat-9.4 {
4c80: 6d 63 65 78 69 73 74 73 20 64 65 73 63 65 6e 64  mcexists descend
4c90: 65 6e 74 20 70 72 65 66 65 72 65 6e 63 65 7d 20  ent preference} 
4ca0: 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 6d 63  -setup {..    mc
4cb0: 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 20  forgetpackage.. 
4cc0: 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61     variable loca
4cd0: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20  le [mclocale].. 
4ce0: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f     mclocale foo_
4cf0: 62 61 72 0a 09 20 20 20 20 6d 63 73 65 74 20 66  bar..    mcset f
4d00: 6f 6f 20 6b 31 20 76 31 0a 09 7d 20 2d 63 6c 65  oo k1 v1..} -cle
4d10: 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  anup {..    mclo
4d20: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 7d 20  cale $locale..} 
4d30: 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6c 69 73  -body {..    lis
4d40: 74 20 5b 6d 63 65 78 69 73 74 73 20 6b 31 5d 20  t [mcexists k1] 
4d50: 5b 6d 63 65 78 69 73 74 73 20 2d 65 78 61 63 74  [mcexists -exact
4d60: 6c 6f 63 61 6c 65 20 6b 31 5d 0a 09 7d 20 2d 72  locale k1]..} -r
4d70: 65 73 75 6c 74 20 7b 31 20 30 7d 0a 0a 09 74 65  esult {1 0}...te
4d80: 73 74 20 6d 73 67 63 61 74 2d 39 2e 35 20 7b 6d  st msgcat-9.5 {m
4d90: 63 65 78 69 73 74 73 20 70 61 72 65 6e 74 20 6e  cexists parent n
4da0: 61 6d 65 73 70 61 63 65 7d 20 2d 73 65 74 75 70  amespace} -setup
4db0: 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74   {..    mcforget
4dc0: 70 61 63 6b 61 67 65 0a 09 20 20 20 20 76 61 72  package..    var
4dd0: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
4de0: 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d 63 6c  locale]..    mcl
4df0: 6f 63 61 6c 65 20 66 6f 6f 5f 62 61 72 0a 09 20  ocale foo_bar.. 
4e00: 20 20 20 6d 63 73 65 74 20 66 6f 6f 20 6b 31 20     mcset foo k1 
4e10: 76 31 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  v1..} -cleanup {
4e20: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24  ..    mclocale $
4e30: 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6e 61 6d 65  locale..    name
4e40: 73 70 61 63 65 20 64 65 6c 65 74 65 20 3a 3a 66  space delete ::f
4e50: 6f 6f 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20  oo..} -body {.. 
4e60: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
4e70: 6c 20 3a 3a 66 6f 6f 20 7b 0a 09 09 6c 69 73 74  l ::foo {...list
4e80: 20 5b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 65 78   [::msgcat::mcex
4e90: 69 73 74 73 20 6b 31 5d 5c 0a 09 09 09 5b 3a 3a  ists k1]\....[::
4ea0: 6d 73 67 63 61 74 3a 3a 6d 63 65 78 69 73 74 73  msgcat::mcexists
4eb0: 20 2d 6e 61 6d 65 73 70 61 63 65 20 3a 3a 6d 73   -namespace ::ms
4ec0: 67 63 61 74 3a 3a 74 65 73 74 20 6b 31 5d 0a 09  gcat::test k1]..
4ed0: 20 20 20 20 7d 0a 09 7d 20 2d 72 65 73 75 6c 74      }..} -result
4ee0: 20 7b 30 20 31 7d 0a 0a 09 74 65 73 74 20 6d 73   {0 1}...test ms
4ef0: 67 63 61 74 2d 39 2e 36 20 7b 6d 63 65 78 69 73  gcat-9.6 {mcexis
4f00: 74 73 20 2d 6e 61 6d 65 73 70 61 63 65 20 6e 73  ts -namespace ns
4f10: 20 70 61 72 61 6d 65 74 65 72 7d 20 2d 73 65 74   parameter} -set
4f20: 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67  up {..    mcforg
4f30: 65 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20 76  etpackage..    v
4f40: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
4f50: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d  mclocale]..    m
4f60: 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62 61 72 0a  clocale foo_bar.
4f70: 09 20 20 20 20 6d 63 73 65 74 20 66 6f 6f 20 6b  .    mcset foo k
4f80: 31 20 76 31 0a 09 7d 20 2d 63 6c 65 61 6e 75 70  1 v1..} -cleanup
4f90: 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65   {..    mclocale
4fa0: 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6e 61   $locale..    na
4fb0: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 3a  mespace delete :
4fc0: 3a 66 6f 6f 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  :foo..} -body {.
4fd0: 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  .    namespace e
4fe0: 76 61 6c 20 3a 3a 66 6f 6f 20 7b 0a 09 09 6c 69  val ::foo {...li
4ff0: 73 74 20 5b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  st [::msgcat::mc
5000: 65 78 69 73 74 73 20 6b 31 5d 5c 0a 09 09 09 5b  exists k1]\....[
5010: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 65 78 69 73  ::msgcat::mcexis
5020: 74 73 20 2d 6e 61 6d 65 73 70 61 63 65 20 3a 3a  ts -namespace ::
5030: 6d 73 67 63 61 74 3a 3a 74 65 73 74 20 6b 31 5d  msgcat::test k1]
5040: 0a 09 20 20 20 20 7d 0a 09 7d 20 2d 72 65 73 75  ..    }..} -resu
5050: 6c 74 20 7b 30 20 31 7d 0a 0a 09 74 65 73 74 20  lt {0 1}...test 
5060: 6d 73 67 63 61 74 2d 39 2e 37 20 7b 6d 63 65 78  msgcat-9.7 {mcex
5070: 69 73 74 73 20 2d 6e 61 6d 65 73 70 61 63 65 20  ists -namespace 
5080: 2d 20 6e 73 20 61 72 67 75 6d 65 6e 74 20 6d 69  - ns argument mi
5090: 73 73 69 6e 67 7d 20 2d 62 6f 64 79 20 7b 0a 09  ssing} -body {..
50a0: 20 20 20 20 6d 63 65 78 69 73 74 73 20 2d 6e 61      mcexists -na
50b0: 6d 65 73 70 61 63 65 20 73 72 63 0a 09 7d 20 2d  mespace src..} -
50c0: 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09  returnCodes 1\..
50d0: 2d 72 65 73 75 6c 74 20 7b 41 72 67 75 6d 65 6e  -result {Argumen
50e0: 74 20 6d 69 73 73 69 6e 67 20 66 6f 72 20 73 77  t missing for sw
50f0: 69 74 63 68 20 22 2d 6e 61 6d 65 73 70 61 63 65  itch "-namespace
5100: 22 7d 0a 0a 0a 20 20 20 20 23 20 54 65 73 74 73  "}...    # Tests
5110: 20 6d 73 67 63 61 74 2d 31 30 2e 2a 3a 20 5b 6d   msgcat-10.*: [m
5120: 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 5d 0a  cloadedlocales].
5130: 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 30  ..test msgcat-10
5140: 2e 31 20 7b 6d 63 6c 6f 61 64 65 64 6c 6f 63 61  .1 {mcloadedloca
5150: 6c 65 73 20 6e 6f 20 61 72 67 7d 20 2d 62 6f 64  les no arg} -bod
5160: 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65  y {..    mcloade
5170: 64 6c 6f 63 61 6c 65 73 0a 09 7d 20 2d 72 65 74  dlocales..} -ret
5180: 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72 65  urnCodes 1\..-re
5190: 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61 72  sult {wrong # ar
51a0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 6d  gs: should be "m
51b0: 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 73  cloadedlocales s
51c0: 75 62 63 6f 6d 6d 61 6e 64 22 7d 0a 0a 09 74 65  ubcommand"}...te
51d0: 73 74 20 6d 73 67 63 61 74 2d 31 30 2e 32 20 7b  st msgcat-10.2 {
51e0: 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20  mcloadedlocales 
51f0: 77 72 6f 6e 67 20 73 75 62 63 6f 6d 6d 61 6e 64  wrong subcommand
5200: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
5210: 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 6a  cloadedlocales j
5220: 75 6e 6b 0a 09 7d 20 2d 72 65 74 75 72 6e 43 6f  unk..} -returnCo
5230: 64 65 73 20 31 5c 0a 09 2d 72 65 73 75 6c 74 20  des 1\..-result 
5240: 7b 75 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d  {unknown subcomm
5250: 61 6e 64 20 22 6a 75 6e 6b 22 3a 20 6d 75 73 74  and "junk": must
5260: 20 62 65 20 63 6c 65 61 72 2c 20 6f 72 20 6c 6f   be clear, or lo
5270: 61 64 65 64 7d 0a 0a 09 74 65 73 74 20 6d 73 67  aded}...test msg
5280: 63 61 74 2d 31 30 2e 33 20 7b 6d 63 6c 6f 61 64  cat-10.3 {mcload
5290: 65 64 6c 6f 63 61 6c 65 73 20 6c 6f 61 64 65 64  edlocales loaded
52a0: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20  } -setup {..    
52b0: 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a  mcforgetpackage.
52c0: 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f  .    variable lo
52d0: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
52e0: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 7b 7d  .    mclocale {}
52f0: 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f  ..    mcloadedlo
5300: 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 7d 20 2d  cales clear..} -
5310: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
5320: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
5330: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
5340: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62 61 72  mclocale foo_bar
5350: 0a 09 20 20 20 20 23 20 54 68 65 20 72 65 73 75  ..    # The resu
5360: 6c 74 20 69 73 20 70 6f 73 69 74 69 6f 6e 20 69  lt is position i
5370: 6e 64 65 70 65 6e 64 65 6e 74 20 73 6f 20 73 6f  ndependent so so
5380: 72 74 0a 09 20 20 20 20 73 65 74 20 72 65 73 75  rt..    set resu
5390: 6c 74 6c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 6d  ltlist [lsort [m
53a0: 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 6c  cloadedlocales l
53b0: 6f 61 64 65 64 5d 5d 0a 09 7d 20 2d 72 65 73 75  oaded]]..} -resu
53c0: 6c 74 20 7b 7b 7d 20 66 6f 6f 20 66 6f 6f 5f 62  lt {{} foo foo_b
53d0: 61 72 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61  ar}...test msgca
53e0: 74 2d 31 30 2e 34 20 7b 6d 63 6c 6f 61 64 65 64  t-10.4 {mcloaded
53f0: 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72 7d 20 2d  locales clear} -
5400: 73 65 74 75 70 20 7b 0a 09 20 20 20 20 6d 63 66  setup {..    mcf
5410: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20  orgetpackage..  
5420: 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c    variable local
5430: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20  e [mclocale]..  
5440: 20 20 6d 63 6c 6f 63 61 6c 65 20 7b 7d 0a 09 20    mclocale {}.. 
5450: 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c     mcloadedlocal
5460: 65 73 20 63 6c 65 61 72 0a 09 7d 20 2d 63 6c 65  es clear..} -cle
5470: 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  anup {..    mclo
5480: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 7d 20  cale $locale..} 
5490: 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c  -body {..    mcl
54a0: 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20 6d  ocale foo..    m
54b0: 63 73 65 74 20 66 6f 6f 20 6b 31 20 76 31 0a 09  cset foo k1 v1..
54c0: 20 20 20 20 73 65 74 20 72 65 73 20 5b 6d 63 65      set res [mce
54d0: 78 69 73 74 73 20 6b 31 5d 0a 09 20 20 20 20 6d  xists k1]..    m
54e0: 63 6c 6f 63 61 6c 65 20 22 22 0a 09 20 20 20 20  clocale ""..    
54f0: 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20  mcloadedlocales 
5500: 63 6c 65 61 72 0a 09 20 20 20 20 6d 63 6c 6f 63  clear..    mcloc
5510: 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20 6c 61 70  ale foo..    lap
5520: 70 65 6e 64 20 72 65 73 20 5b 6d 63 65 78 69 73  pend res [mcexis
5530: 74 73 20 6b 31 5d 0a 09 7d 20 2d 72 65 73 75 6c  ts k1]..} -resul
5540: 74 20 7b 31 20 30 7d 0a 0a 20 20 20 20 23 20 54  t {1 0}..    # T
5550: 65 73 74 73 20 6d 73 67 63 61 74 2d 31 31 2e 2a  ests msgcat-11.*
5560: 3a 20 5b 6d 63 66 6f 72 67 65 74 70 61 63 6b 61  : [mcforgetpacka
5570: 67 65 5d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61  ge]...test msgca
5580: 74 2d 31 31 2e 31 20 7b 6d 63 66 6f 72 67 65 74  t-11.1 {mcforget
5590: 70 61 63 6b 61 67 65 20 74 72 61 6e 73 6c 61 74  package translat
55a0: 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  ion} -setup {.. 
55b0: 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61     variable loca
55c0: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d  le [mclocale]..}
55d0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20   -cleanup {..   
55e0: 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c   mclocale $local
55f0: 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  e..} -body {..  
5600: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09    mclocale foo..
5610: 20 20 20 20 6d 63 73 65 74 20 66 6f 6f 20 6b 31      mcset foo k1
5620: 20 76 31 0a 09 20 20 20 20 73 65 74 20 72 65 73   v1..    set res
5630: 20 5b 6d 63 65 78 69 73 74 73 20 6b 31 5d 0a 09   [mcexists k1]..
5640: 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b      mcforgetpack
5650: 61 67 65 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  age..    lappend
5660: 20 72 65 73 20 5b 6d 63 65 78 69 73 74 73 20 6b   res [mcexists k
5670: 31 5d 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 31  1]..} -result {1
5680: 20 30 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61   0}...test msgca
5690: 74 2d 31 31 2e 32 20 7b 6d 63 66 6f 72 67 65 74  t-11.2 {mcforget
56a0: 70 61 63 6b 61 67 65 20 6c 6f 63 61 6c 65 7d 20  package locale} 
56b0: 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61  -setup {..    va
56c0: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
56d0: 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65  clocale]..} -cle
56e0: 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  anup {..    mclo
56f0: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 7d 20  cale $locale..} 
5700: 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c  -body {..    mcl
5710: 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20 6d  ocale foo..    m
5720: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73  cpackagelocale s
5730: 65 74 20 62 61 72 0a 09 20 20 20 20 73 65 74 20  et bar..    set 
5740: 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f  res [mcpackagelo
5750: 63 61 6c 65 20 67 65 74 5d 0a 09 20 20 20 20 6d  cale get]..    m
5760: 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09  cforgetpackage..
5770: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20      lappend res 
5780: 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  [mcpackagelocale
5790: 20 67 65 74 5d 0a 09 7d 20 2d 72 65 73 75 6c 74   get]..} -result
57a0: 20 7b 62 61 72 20 66 6f 6f 7d 0a 0a 09 74 65 73   {bar foo}...tes
57b0: 74 20 6d 73 67 63 61 74 2d 31 31 2e 33 20 7b 6d  t msgcat-11.3 {m
57c0: 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 20 6f  cforgetpackage o
57d0: 70 74 69 6f 6e 73 7d 20 2d 62 6f 64 79 20 7b 0a  ptions} -body {.
57e0: 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f  .    mcpackageco
57f0: 6e 66 69 67 20 73 65 74 20 6c 6f 61 64 63 6d 64  nfig set loadcmd
5800: 20 22 22 0a 09 20 20 20 20 73 65 74 20 72 65 73   ""..    set res
5810: 20 5b 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69   [mcpackageconfi
5820: 67 20 69 73 73 65 74 20 6c 6f 61 64 63 6d 64 5d  g isset loadcmd]
5830: 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61  ..    mcforgetpa
5840: 63 6b 61 67 65 0a 09 20 20 20 20 6c 61 70 70 65  ckage..    lappe
5850: 6e 64 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67  nd res [mcpackag
5860: 65 63 6f 6e 66 69 67 20 69 73 73 65 74 20 6c 6f  econfig isset lo
5870: 61 64 63 6d 64 5d 0a 09 7d 20 2d 72 65 73 75 6c  adcmd]..} -resul
5880: 74 20 7b 31 20 30 7d 0a 0a 20 20 20 20 23 20 54  t {1 0}..    # T
5890: 65 73 74 73 20 6d 73 67 63 61 74 2d 31 32 2e 2a  ests msgcat-12.*
58a0: 3a 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61  : [mcpackageloca
58b0: 6c 65 5d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61  le]...test msgca
58c0: 74 2d 31 32 2e 31 20 7b 6d 63 70 61 63 6b 61 67  t-12.1 {mcpackag
58d0: 65 6c 6f 63 61 6c 65 20 6e 6f 20 73 75 62 63 6f  elocale no subco
58e0: 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 09  mmand} -body {..
58f0: 20 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63      mcpackageloc
5900: 61 6c 65 0a 09 7d 20 2d 72 65 74 75 72 6e 43 6f  ale..} -returnCo
5910: 64 65 73 20 31 5c 0a 09 2d 72 65 73 75 6c 74 20  des 1\..-result 
5920: 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  {wrong # args: s
5930: 68 6f 75 6c 64 20 62 65 20 22 6d 63 70 61 63 6b  hould be "mcpack
5940: 61 67 65 6c 6f 63 61 6c 65 20 73 75 62 63 6f 6d  agelocale subcom
5950: 6d 61 6e 64 20 3f 61 72 67 20 2e 2e 2e 3f 22 7d  mand ?arg ...?"}
5960: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31  ...test msgcat-1
5970: 32 2e 32 20 7b 6d 63 6c 70 61 63 6b 61 67 65 6c  2.2 {mclpackagel
5980: 6f 63 61 6c 65 20 77 72 6f 6e 67 20 73 75 62 63  ocale wrong subc
5990: 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a  ommand} -body {.
59a0: 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f  .    mcpackagelo
59b0: 63 61 6c 65 20 6a 75 6e 6b 0a 09 7d 20 2d 72 65  cale junk..} -re
59c0: 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72  turnCodes 1\..-r
59d0: 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 73  esult {unknown s
59e0: 75 62 63 6f 6d 6d 61 6e 64 20 22 6a 75 6e 6b 22  ubcommand "junk"
59f0: 3a 20 6d 75 73 74 20 62 65 20 63 6c 65 61 72 2c  : must be clear,
5a00: 20 67 65 74 2c 20 69 73 73 65 74 2c 20 6c 6f 61   get, isset, loa
5a10: 64 65 64 2c 20 70 72 65 73 65 6e 74 2c 20 73 65  ded, present, se
5a20: 74 2c 20 6f 72 20 75 6e 73 65 74 7d 0a 0a 09 74  t, or unset}...t
5a30: 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e 32 2e  est msgcat-12.2.
5a40: 31 20 7b 6d 63 6c 70 61 63 6b 61 67 65 6c 6f 63  1 {mclpackageloc
5a50: 61 6c 65 20 73 65 74 20 6d 75 6c 74 69 70 6c 65  ale set multiple
5a60: 20 61 72 67 73 7d 20 2d 62 6f 64 79 20 7b 0a 09   args} -body {..
5a70: 20 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63      mcpackageloc
5a80: 61 6c 65 20 73 65 74 20 61 20 62 0a 09 7d 20 2d  ale set a b..} -
5a90: 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09  returnCodes 1\..
5aa0: 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23  -result {wrong #
5ab0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
5ac0: 20 22 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c   "mcpackagelocal
5ad0: 65 20 73 65 74 20 3f 6c 6f 63 61 6c 65 3f 22 7d  e set ?locale?"}
5ae0: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31  ...test msgcat-1
5af0: 32 2e 33 20 7b 6d 63 70 61 63 6b 61 67 65 6c 6f  2.3 {mcpackagelo
5b00: 63 61 6c 65 20 73 65 74 7d 20 2d 73 65 74 75 70  cale set} -setup
5b10: 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65   {..    variable
5b20: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
5b30: 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  e]..} -cleanup {
5b40: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24  ..    mclocale $
5b50: 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63 66 6f  locale..    mcfo
5b60: 72 67 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d  rgetpackage..} -
5b70: 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  body {..    mclo
5b80: 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20 6d 63  cale foo..    mc
5b90: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73 65  packagelocale se
5ba0: 74 20 62 61 72 0a 09 20 20 20 20 6c 69 73 74 20  t bar..    list 
5bb0: 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  [mcpackagelocale
5bc0: 20 67 65 74 5d 20 5b 6d 63 6c 6f 63 61 6c 65 5d   get] [mclocale]
5bd0: 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 62 61 72  ..} -result {bar
5be0: 20 66 6f 6f 7d 0a 0a 09 74 65 73 74 20 6d 73 67   foo}...test msg
5bf0: 63 61 74 2d 31 32 2e 34 20 7b 6d 63 70 61 63 6b  cat-12.4 {mcpack
5c00: 61 67 65 6c 6f 63 61 6c 65 20 67 65 74 7d 20 2d  agelocale get} -
5c10: 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72  setup {..    var
5c20: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
5c30: 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61  locale]..} -clea
5c40: 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63  nup {..    mcloc
5c50: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20  ale $locale..   
5c60: 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65   mcforgetpackage
5c70: 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20  ..} -body {..   
5c80: 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20   mclocale foo.. 
5c90: 20 20 20 73 65 74 20 72 65 73 20 5b 6d 63 70 61     set res [mcpa
5ca0: 63 6b 61 67 65 6c 6f 63 61 6c 65 20 67 65 74 5d  ckagelocale get]
5cb0: 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 6c  ..    mcpackagel
5cc0: 6f 63 61 6c 65 20 73 65 74 20 62 61 72 0a 09 20  ocale set bar.. 
5cd0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b     lappend res [
5ce0: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
5cf0: 67 65 74 5d 0a 09 7d 20 2d 72 65 73 75 6c 74 20  get]..} -result 
5d00: 7b 66 6f 6f 20 62 61 72 7d 0a 0a 09 74 65 73 74  {foo bar}...test
5d10: 20 6d 73 67 63 61 74 2d 31 32 2e 35 20 7b 6d 63   msgcat-12.5 {mc
5d20: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72  packagelocale pr
5d30: 65 66 65 72 65 6e 63 65 73 7d 20 2d 73 65 74 75  eferences} -setu
5d40: 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c  p {..    variabl
5d50: 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  e locale [mcloca
5d60: 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20  le]..} -cleanup 
5d70: 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  {..    mclocale 
5d80: 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63 66  $locale..    mcf
5d90: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 7d 20  orgetpackage..} 
5da0: 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c  -body {..    mcl
5db0: 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20 73  ocale foo..    s
5dc0: 65 74 20 72 65 73 20 5b 6c 69 73 74 20 5b 6d 63  et res [list [mc
5dd0: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72  packagelocale pr
5de0: 65 66 65 72 65 6e 63 65 73 5d 5d 0a 09 20 20 20  eferences]]..   
5df0: 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65   mcpackagelocale
5e00: 20 73 65 74 20 62 61 72 0a 09 20 20 20 20 6c 61   set bar..    la
5e10: 70 70 65 6e 64 20 72 65 73 20 5b 6d 63 70 61 63  ppend res [mcpac
5e20: 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72 65 66 65  kagelocale prefe
5e30: 72 65 6e 63 65 73 5d 0a 09 7d 20 2d 72 65 73 75  rences]..} -resu
5e40: 6c 74 20 7b 7b 66 6f 6f 20 7b 7d 7d 20 7b 62 61  lt {{foo {}} {ba
5e50: 72 20 7b 7d 7d 7d 0a 0a 09 74 65 73 74 20 6d 73  r {}}}...test ms
5e60: 67 63 61 74 2d 31 32 2e 36 20 7b 6d 63 70 61 63  gcat-12.6 {mcpac
5e70: 6b 61 67 65 6c 6f 63 61 6c 65 20 6c 6f 61 64 65  kagelocale loade
5e80: 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  d} -setup {..   
5e90: 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65   variable locale
5ea0: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d   [mclocale]..} -
5eb0: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
5ec0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
5ed0: 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63  .    mcforgetpac
5ee0: 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  kage..} -body {.
5ef0: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22  .    mclocale ""
5f00: 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f  ..    mcloadedlo
5f10: 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20  cales clear..   
5f20: 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20   mclocale foo.. 
5f30: 20 20 20 23 20 54 68 65 20 72 65 73 75 6c 74 20     # The result 
5f40: 69 73 20 70 6f 73 69 74 69 6f 6e 20 69 6e 64 65  is position inde
5f50: 70 65 6e 64 65 6e 74 20 73 6f 20 73 6f 72 74 0a  pendent so sort.
5f60: 09 20 20 20 20 73 65 74 20 72 65 73 20 5b 6c 69  .    set res [li
5f70: 73 74 20 5b 6c 73 6f 72 74 20 5b 6d 63 70 61 63  st [lsort [mcpac
5f80: 6b 61 67 65 6c 6f 63 61 6c 65 20 6c 6f 61 64 65  kagelocale loade
5f90: 64 5d 5d 5d 0a 09 20 20 20 20 6d 63 70 61 63 6b  d]]]..    mcpack
5fa0: 61 67 65 6c 6f 63 61 6c 65 20 73 65 74 20 62 61  agelocale set ba
5fb0: 72 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  r..    lappend r
5fc0: 65 73 20 5b 6c 73 6f 72 74 20 5b 6d 63 70 61 63  es [lsort [mcpac
5fd0: 6b 61 67 65 6c 6f 63 61 6c 65 20 6c 6f 61 64 65  kagelocale loade
5fe0: 64 5d 5d 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b  d]]..} -result {
5ff0: 7b 7b 7d 20 66 6f 6f 7d 20 7b 7b 7d 20 62 61 72  {{} foo} {{} bar
6000: 20 66 6f 6f 7d 7d 0a 0a 09 74 65 73 74 20 6d 73   foo}}...test ms
6010: 67 63 61 74 2d 31 32 2e 37 20 7b 6d 63 70 61 63  gcat-12.7 {mcpac
6020: 6b 61 67 65 6c 6f 63 61 6c 65 20 69 73 73 65 74  kagelocale isset
6030: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20  } -setup {..    
6040: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
6050: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d 63  [mclocale]..} -c
6060: 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63  leanup {..    mc
6070: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09  locale $locale..
6080: 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b      mcforgetpack
6090: 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09  age..} -body {..
60a0: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f      mclocale foo
60b0: 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 5b 6d  ..    set res [m
60c0: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 69  cpackagelocale i
60d0: 73 73 65 74 5d 0a 09 20 20 20 20 6d 63 70 61 63  sset]..    mcpac
60e0: 6b 61 67 65 6c 6f 63 61 6c 65 20 73 65 74 20 62  kagelocale set b
60f0: 61 72 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  ar..    lappend 
6100: 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f  res [mcpackagelo
6110: 63 61 6c 65 20 69 73 73 65 74 5d 0a 09 7d 20 2d  cale isset]..} -
6120: 72 65 73 75 6c 74 20 7b 30 20 31 7d 0a 0a 09 74  result {0 1}...t
6130: 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e 38 20  est msgcat-12.8 
6140: 7b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  {mcpackagelocale
6150: 20 75 6e 73 65 74 7d 20 2d 73 65 74 75 70 20 7b   unset} -setup {
6160: 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  ..    variable l
6170: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
6180: 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09  ..} -cleanup {..
6190: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f      mclocale $lo
61a0: 63 61 6c 65 0a 09 20 20 20 20 6d 63 66 6f 72 67  cale..    mcforg
61b0: 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f  etpackage..} -bo
61c0: 64 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b  dy {..    mcpack
61d0: 61 67 65 6c 6f 63 61 6c 65 20 73 65 74 20 62 61  agelocale set ba
61e0: 72 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 5b  r..    set res [
61f0: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
6200: 69 73 73 65 74 5d 0a 09 20 20 20 20 6d 63 70 61  isset]..    mcpa
6210: 63 6b 61 67 65 6c 6f 63 61 6c 65 20 75 6e 73 65  ckagelocale unse
6220: 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  t..    lappend r
6230: 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63  es [mcpackageloc
6240: 61 6c 65 20 69 73 73 65 74 5d 0a 09 7d 20 2d 72  ale isset]..} -r
6250: 65 73 75 6c 74 20 7b 31 20 30 7d 0a 0a 09 74 65  esult {1 0}...te
6260: 73 74 20 6d 73 67 63 61 74 2d 31 32 2e 39 20 7b  st msgcat-12.9 {
6270: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
6280: 70 72 65 73 65 6e 74 7d 20 2d 73 65 74 75 70 20  present} -setup 
6290: 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20  {..    variable 
62a0: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
62b0: 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  ]..} -cleanup {.
62c0: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c  .    mclocale $l
62d0: 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63 66 6f 72  ocale..    mcfor
62e0: 67 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62  getpackage..} -b
62f0: 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63  ody {..    mcloc
6300: 61 6c 65 20 22 22 0a 09 20 20 20 20 6d 63 6c 6f  ale ""..    mclo
6310: 61 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61  adedlocales clea
6320: 72 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  r..    mclocale 
6330: 66 6f 6f 0a 09 20 20 20 20 73 65 74 20 72 65 73  foo..    set res
6340: 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c   [mcpackagelocal
6350: 65 20 70 72 65 73 65 6e 74 20 66 6f 6f 5d 0a 09  e present foo]..
6360: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20      lappend res 
6370: 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  [mcpackagelocale
6380: 20 70 72 65 73 65 6e 74 20 62 61 72 5d 0a 09 20   present bar].. 
6390: 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61     mcpackageloca
63a0: 6c 65 20 73 65 74 20 62 61 72 0a 09 20 20 20 20  le set bar..    
63b0: 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6d 63 70  lappend res [mcp
63c0: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72 65  ackagelocale pre
63d0: 73 65 6e 74 20 66 6f 6f 5d 5c 0a 09 09 20 20 20  sent foo]\...   
63e0: 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c   [mcpackagelocal
63f0: 65 20 70 72 65 73 65 6e 74 20 62 61 72 5d 0a 09  e present bar]..
6400: 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20 30 20 31  } -result {1 0 1
6410: 20 31 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61   1}...test msgca
6420: 74 2d 31 32 2e 31 30 20 7b 6d 63 70 61 63 6b 61  t-12.10 {mcpacka
6430: 67 65 6c 6f 63 61 6c 65 20 63 6c 65 61 72 7d 20  gelocale clear} 
6440: 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61  -setup {..    va
6450: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
6460: 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65  clocale]..} -cle
6470: 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  anup {..    mclo
6480: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20  cale $locale..  
6490: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
64a0: 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  e..} -body {..  
64b0: 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a 09 20    mclocale "".. 
64c0: 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c     mcloadedlocal
64d0: 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20 6d 63  es clear..    mc
64e0: 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20  locale foo..    
64f0: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
6500: 73 65 74 20 62 61 72 0a 09 20 20 20 20 6d 63 70  set bar..    mcp
6510: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 63 6c 65  ackagelocale cle
6520: 61 72 0a 09 20 20 20 20 6c 69 73 74 20 5b 6d 63  ar..    list [mc
6530: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72  packagelocale pr
6540: 65 73 65 6e 74 20 66 6f 6f 5d 20 5b 6d 63 70 61  esent foo] [mcpa
6550: 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72 65 73  ckagelocale pres
6560: 65 6e 74 20 62 61 72 5d 0a 09 7d 20 2d 72 65 73  ent bar]..} -res
6570: 75 6c 74 20 7b 30 20 31 7d 0a 0a 09 74 65 73 74  ult {0 1}...test
6580: 20 6d 73 67 63 61 74 2d 31 32 2e 31 31 20 7b 6d   msgcat-12.11 {m
6590: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 63  cpackagelocale c
65a0: 75 73 74 6f 6d 20 70 72 65 66 65 72 65 6e 63 65  ustom preference
65b0: 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  s} -setup {..   
65c0: 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65   variable locale
65d0: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d   [mclocale]..} -
65e0: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
65f0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
6600: 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63  .    mcforgetpac
6610: 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  kage..} -body {.
6620: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f  .    mclocale fo
6630: 6f 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 5b  o..    set res [
6640: 6c 69 73 74 20 5b 6d 63 70 61 63 6b 61 67 65 6c  list [mcpackagel
6650: 6f 63 61 6c 65 20 70 72 65 66 65 72 65 6e 63 65  ocale preference
6660: 73 5d 5d 0a 09 20 20 20 20 6d 63 70 61 63 6b 61  s]]..    mcpacka
6670: 67 65 6c 6f 63 61 6c 65 20 70 72 65 66 65 72 65  gelocale prefere
6680: 6e 63 65 73 20 62 61 72 20 7b 7d 0a 09 20 20 20  nces bar {}..   
6690: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6d 63   lappend res [mc
66a0: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72  packagelocale pr
66b0: 65 66 65 72 65 6e 63 65 73 5d 0a 09 7d 20 2d 72  eferences]..} -r
66c0: 65 73 75 6c 74 20 7b 7b 66 6f 6f 20 7b 7d 7d 20  esult {{foo {}} 
66d0: 7b 62 61 72 20 7b 7d 7d 7d 0a 0a 09 74 65 73 74  {bar {}}}...test
66e0: 20 6d 73 67 63 61 74 2d 31 32 2e 31 32 20 7b 6d   msgcat-12.12 {m
66f0: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70  cpackagelocale p
6700: 72 65 66 65 72 65 6e 63 65 73 20 2d 3e 20 6e 6f  references -> no
6710: 20 69 73 73 65 74 7d 20 2d 73 65 74 75 70 20 7b   isset} -setup {
6720: 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  ..    variable l
6730: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
6740: 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09  ..} -cleanup {..
6750: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f      mclocale $lo
6760: 63 61 6c 65 0a 09 20 20 20 20 6d 63 66 6f 72 67  cale..    mcforg
6770: 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f  etpackage..} -bo
6780: 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61  dy {..    mcloca
6790: 6c 65 20 66 6f 6f 0a 09 20 20 20 20 6d 63 70 61  le foo..    mcpa
67a0: 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72 65 66  ckagelocale pref
67b0: 65 72 65 6e 63 65 73 0a 09 20 20 20 20 6d 63 70  erences..    mcp
67c0: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 69 73 73  ackagelocale iss
67d0: 65 74 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 30  et..} -result {0
67e0: 7d 0a 0a 0a 20 20 20 20 23 20 54 65 73 74 73 20  }...    # Tests 
67f0: 6d 73 67 63 61 74 2d 31 33 2e 2a 3a 20 5b 6d 63  msgcat-13.*: [mc
6800: 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 73 75  packageconfig su
6810: 62 63 6d 64 73 5d 0a 0a 09 74 65 73 74 20 6d 73  bcmds]...test ms
6820: 67 63 61 74 2d 31 33 2e 31 20 7b 6d 63 70 61 63  gcat-13.1 {mcpac
6830: 6b 61 67 65 63 6f 6e 66 69 67 20 6e 6f 20 73 75  kageconfig no su
6840: 62 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20  bcommand} -body 
6850: 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65  {..    mcpackage
6860: 63 6f 6e 66 69 67 0a 09 7d 20 2d 72 65 74 75 72  config..} -retur
6870: 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72 65 73 75  nCodes 1\..-resu
6880: 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73  lt {wrong # args
6890: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 6d 63 70  : should be "mcp
68a0: 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 73 75 62  ackageconfig sub
68b0: 63 6f 6d 6d 61 6e 64 20 6f 70 74 69 6f 6e 20 3f  command option ?
68c0: 76 61 6c 75 65 3f 22 7d 0a 0a 09 74 65 73 74 20  value?"}...test 
68d0: 6d 73 67 63 61 74 2d 31 33 2e 32 20 7b 6d 63 6c  msgcat-13.2 {mcl
68e0: 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 77 72  packageconfig wr
68f0: 6f 6e 67 20 73 75 62 63 6f 6d 6d 61 6e 64 7d 20  ong subcommand} 
6900: 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 70  -body {..    mcp
6910: 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 6a 75 6e  ackageconfig jun
6920: 6b 20 6d 63 66 6f 6c 64 65 72 0a 09 7d 20 2d 72  k mcfolder..} -r
6930: 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09 2d  eturnCodes 1\..-
6940: 72 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20  result {unknown 
6950: 73 75 62 63 6f 6d 6d 61 6e 64 20 22 6a 75 6e 6b  subcommand "junk
6960: 22 3a 20 6d 75 73 74 20 62 65 20 67 65 74 2c 20  ": must be get, 
6970: 69 73 73 65 74 2c 20 73 65 74 2c 20 6f 72 20 75  isset, set, or u
6980: 6e 73 65 74 7d 0a 0a 09 74 65 73 74 20 6d 73 67  nset}...test msg
6990: 63 61 74 2d 31 33 2e 33 20 7b 6d 63 6c 70 61 63  cat-13.3 {mclpac
69a0: 6b 61 67 65 63 6f 6e 66 69 67 20 77 72 6f 6e 67  kageconfig wrong
69b0: 20 6f 70 74 69 6f 6e 7d 20 2d 62 6f 64 79 20 7b   option} -body {
69c0: 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63  ..    mcpackagec
69d0: 6f 6e 66 69 67 20 67 65 74 20 6a 75 6e 6b 0a 09  onfig get junk..
69e0: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31  } -returnCodes 1
69f0: 5c 0a 09 2d 72 65 73 75 6c 74 20 7b 62 61 64 20  \..-result {bad 
6a00: 6f 70 74 69 6f 6e 20 22 6a 75 6e 6b 22 3a 20 6d  option "junk": m
6a10: 75 73 74 20 62 65 20 6d 63 66 6f 6c 64 65 72 2c  ust be mcfolder,
6a20: 20 6c 6f 61 64 63 6d 64 2c 20 63 68 61 6e 67 65   loadcmd, change
6a30: 63 6d 64 2c 20 6f 72 20 75 6e 6b 6e 6f 77 6e 63  cmd, or unknownc
6a40: 6d 64 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61  md}...test msgca
6a50: 74 2d 31 33 2e 34 20 7b 6d 63 70 61 63 6b 61 67  t-13.4 {mcpackag
6a60: 65 63 6f 6e 66 69 67 20 67 65 74 7d 20 2d 73 65  econfig get} -se
6a70: 74 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72  tup {..    mcfor
6a80: 67 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 63  getpackage..} -c
6a90: 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63  leanup {..    mc
6aa0: 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 7d  forgetpackage..}
6ab0: 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63   -body {..    mc
6ac0: 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 73 65  packageconfig se
6ad0: 74 20 6c 6f 61 64 63 6d 64 20 22 22 0a 09 20 20  t loadcmd ""..  
6ae0: 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69    mcpackageconfi
6af0: 67 20 67 65 74 20 6c 6f 61 64 63 6d 64 0a 09 7d  g get loadcmd..}
6b00: 20 2d 72 65 73 75 6c 74 20 7b 7d 0a 0a 09 74 65   -result {}...te
6b10: 73 74 20 6d 73 67 63 61 74 2d 31 33 2e 35 20 7b  st msgcat-13.5 {
6b20: 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20  mcpackageconfig 
6b30: 28 69 73 2f 75 6e 29 73 65 74 7d 20 2d 73 65 74  (is/un)set} -set
6b40: 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67  up {..    mcforg
6b50: 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 63 6c  etpackage..} -cl
6b60: 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 66  eanup {..    mcf
6b70: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 7d 20  orgetpackage..} 
6b80: 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 73 65 74  -body {..    set
6b90: 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 63   res [mcpackagec
6ba0: 6f 6e 66 69 67 20 69 73 73 65 74 20 6c 6f 61 64  onfig isset load
6bb0: 63 6d 64 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e  cmd]..    lappen
6bc0: 64 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65  d res [mcpackage
6bd0: 63 6f 6e 66 69 67 20 73 65 74 20 6c 6f 61 64 63  config set loadc
6be0: 6d 64 20 22 22 5d 0a 09 20 20 20 20 6c 61 70 70  md ""]..    lapp
6bf0: 65 6e 64 20 72 65 73 20 5b 6d 63 70 61 63 6b 61  end res [mcpacka
6c00: 67 65 63 6f 6e 66 69 67 20 69 73 73 65 74 20 6c  geconfig isset l
6c10: 6f 61 64 63 6d 64 5d 0a 09 20 20 20 20 6d 63 70  oadcmd]..    mcp
6c20: 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 75 6e 73  ackageconfig uns
6c30: 65 74 20 6c 6f 61 64 63 6d 64 0a 09 20 20 20 20  et loadcmd..    
6c40: 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6d 63 70  lappend res [mcp
6c50: 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 69 73 73  ackageconfig iss
6c60: 65 74 20 6c 6f 61 64 63 6d 64 5d 0a 09 7d 20 2d  et loadcmd]..} -
6c70: 72 65 73 75 6c 74 20 7b 30 20 30 20 31 20 30 7d  result {0 0 1 0}
6c80: 0a 0a 20 20 20 20 23 20 6f 70 74 69 6f 6e 20 6d  ..    # option m
6c90: 63 66 6f 6c 64 65 72 20 69 73 20 61 6c 72 65 61  cfolder is alrea
6ca0: 64 79 20 74 65 73 74 65 64 20 77 69 74 68 20 35  dy tested with 5
6cb0: 2e 31 31 0a 0a 20 20 20 20 23 20 54 65 73 74 73  .11..    # Tests
6cc0: 20 6d 73 67 63 61 74 2d 31 34 2e 2a 3a 20 63 61   msgcat-14.*: ca
6cd0: 6c 6c 62 61 63 6b 73 3a 20 6c 6f 61 64 63 6d 64  llbacks: loadcmd
6ce0: 2c 20 63 68 61 6e 67 65 63 6d 64 2c 20 75 6e 6b  , changecmd, unk
6cf0: 6e 6f 77 6e 63 6d 64 0a 0a 20 20 20 20 23 20 54  nowncmd..    # T
6d00: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 75  his routine is u
6d10: 73 65 64 20 61 73 20 62 67 65 72 72 6f 72 20 61  sed as bgerror a
6d20: 6e 64 20 62 79 20 64 69 72 65 63 74 20 63 61 6c  nd by direct cal
6d30: 6c 62 61 63 6b 20 69 6e 76 6f 63 61 74 69 6f 6e  lback invocation
6d40: 0a 20 20 20 20 70 72 6f 63 20 63 61 6c 6c 62 61  .    proc callba
6d50: 63 6b 70 72 6f 63 20 61 72 67 73 20 7b 0a 09 76  ckproc args {..v
6d60: 61 72 69 61 62 6c 65 20 72 65 73 75 6c 74 76 61  ariable resultva
6d70: 72 69 61 62 6c 65 0a 09 73 65 74 20 72 65 73 75  riable..set resu
6d80: 6c 74 76 61 72 69 61 62 6c 65 20 24 61 72 67 73  ltvariable $args
6d90: 0a 20 20 20 20 7d 0a 20 20 20 20 70 72 6f 63 20  .    }.    proc 
6da0: 63 61 6c 6c 62 61 63 6b 66 61 69 6c 70 72 6f 63  callbackfailproc
6db0: 20 61 72 67 73 20 7b 0a 09 72 65 74 75 72 6e 20   args {..return 
6dc0: 2d 63 6f 64 65 20 65 72 72 6f 72 20 66 61 69 6c  -code error fail
6dd0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 62  .    }.    set b
6de0: 67 65 72 72 6f 72 73 61 76 65 64 20 5b 69 6e 74  gerrorsaved [int
6df0: 65 72 70 20 62 67 65 72 72 6f 72 20 7b 7d 5d 0a  erp bgerror {}].
6e00: 20 20 20 20 69 6e 74 65 72 70 20 62 67 65 72 72      interp bgerr
6e10: 6f 72 20 7b 7d 20 5b 6e 61 6d 65 73 70 61 63 65  or {} [namespace
6e20: 20 63 6f 64 65 20 63 61 6c 6c 62 61 63 6b 70 72   code callbackpr
6e30: 6f 63 5d 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  oc]..    variabl
6e40: 65 20 6c 6f 63 61 6c 65 0a 20 20 20 20 69 66 20  e locale.    if 
6e50: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 20 6c 6f  {![info exist lo
6e60: 63 61 6c 65 5d 7d 20 7b 20 73 65 74 20 6c 6f 63  cale]} { set loc
6e70: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 20 7d  ale [mclocale] }
6e80: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31  ...test msgcat-1
6e90: 34 2e 31 20 7b 69 6e 76 6f 63 61 74 69 6f 6e 20  4.1 {invocation 
6ea0: 6c 6f 61 64 63 6d 64 7d 20 2d 73 65 74 75 70 20  loadcmd} -setup 
6eb0: 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70  {..    mcforgetp
6ec0: 61 63 6b 61 67 65 0a 09 20 20 20 20 6d 63 6c 6f  ackage..    mclo
6ed0: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20  cale $locale..  
6ee0: 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a 09 20    mclocale "".. 
6ef0: 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c     mcloadedlocal
6f00: 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20 73 65  es clear..    se
6f10: 74 20 72 65 73 75 6c 74 76 61 72 69 61 62 6c 65  t resultvariable
6f20: 20 22 22 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20   ""..} -cleanup 
6f30: 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70  {..    mcforgetp
6f40: 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20  ackage..} -body 
6f50: 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65  {..    mcpackage
6f60: 63 6f 6e 66 69 67 20 73 65 74 20 6c 6f 61 64 63  config set loadc
6f70: 6d 64 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 6f  md [namespace co
6f80: 64 65 20 63 61 6c 6c 62 61 63 6b 70 72 6f 63 5d  de callbackproc]
6f90: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66  ..    mclocale f
6fa0: 6f 6f 5f 62 61 72 0a 09 20 20 20 20 6c 73 6f 72  oo_bar..    lsor
6fb0: 74 20 24 72 65 73 75 6c 74 76 61 72 69 61 62 6c  t $resultvariabl
6fc0: 65 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 66 6f  e..} -result {fo
6fd0: 6f 20 66 6f 6f 5f 62 61 72 7d 0a 0a 09 74 65 73  o foo_bar}...tes
6fe0: 74 20 6d 73 67 63 61 74 2d 31 34 2e 32 20 7b 69  t msgcat-14.2 {i
6ff0: 6e 76 6f 63 61 74 69 6f 6e 20 66 61 69 6c 65 64  nvocation failed
7000: 20 69 6e 20 6c 6f 61 64 63 6d 64 7d 20 2d 73 65   in loadcmd} -se
7010: 74 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72  tup {..    mcfor
7020: 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20  getpackage..    
7030: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
7040: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22  ..    mclocale "
7050: 22 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c  "..    mcloadedl
7060: 6f 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 7d 20  ocales clear..} 
7070: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20  -cleanup {..    
7080: 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a  mcforgetpackage.
7090: 09 20 20 20 20 61 66 74 65 72 20 63 61 6e 63 65  .    after cance
70a0: 6c 20 73 65 74 20 5b 6e 61 6d 65 73 70 61 63 65  l set [namespace
70b0: 20 63 75 72 72 65 6e 74 5d 3a 3a 72 65 73 75 6c   current]::resul
70c0: 74 76 61 72 69 61 62 6c 65 20 74 69 6d 65 6f 75  tvariable timeou
70d0: 74 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  t..} -body {..  
70e0: 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69    mcpackageconfi
70f0: 67 20 73 65 74 20 6c 6f 61 64 63 6d 64 20 5b 6e  g set loadcmd [n
7100: 61 6d 65 73 70 61 63 65 20 63 6f 64 65 20 63 61  amespace code ca
7110: 6c 6c 62 61 63 6b 66 61 69 6c 70 72 6f 63 5d 0a  llbackfailproc].
7120: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f  .    mclocale fo
7130: 6f 5f 62 61 72 0a 09 20 20 20 20 23 20 6c 65 74  o_bar..    # let
7140: 20 74 68 65 20 62 67 65 72 72 6f 72 20 72 75 6e   the bgerror run
7150: 0a 09 20 20 20 20 61 66 74 65 72 20 31 30 30 20  ..    after 100 
7160: 73 65 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 63  set [namespace c
7170: 75 72 72 65 6e 74 5d 3a 3a 72 65 73 75 6c 74 76  urrent]::resultv
7180: 61 72 69 61 62 6c 65 20 74 69 6d 65 6f 75 74 0a  ariable timeout.
7190: 09 20 20 20 20 76 77 61 69 74 20 5b 6e 61 6d 65  .    vwait [name
71a0: 73 70 61 63 65 20 63 75 72 72 65 6e 74 5d 3a 3a  space current]::
71b0: 72 65 73 75 6c 74 76 61 72 69 61 62 6c 65 0a 09  resultvariable..
71c0: 20 20 20 20 6c 61 73 73 69 67 6e 20 24 72 65 73      lassign $res
71d0: 75 6c 74 76 61 72 69 61 62 6c 65 20 65 72 72 20  ultvariable err 
71e0: 65 72 72 64 69 63 74 0a 09 20 20 20 20 6c 69 73  errdict..    lis
71f0: 74 20 24 65 72 72 20 5b 64 69 63 74 20 67 65 74  t $err [dict get
7200: 20 24 65 72 72 64 69 63 74 20 2d 63 6f 64 65 5d   $errdict -code]
7210: 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 66 61 69  ..} -result {fai
7220: 6c 20 31 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63  l 1}...test msgc
7230: 61 74 2d 31 34 2e 33 20 7b 69 6e 76 6f 63 61 74  at-14.3 {invocat
7240: 69 6f 6e 20 63 68 61 6e 67 65 63 6d 64 7d 20 2d  ion changecmd} -
7250: 73 65 74 75 70 20 7b 0a 09 20 20 20 20 6d 63 66  setup {..    mcf
7260: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20  orgetpackage..  
7270: 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61    mclocale $loca
7280: 6c 65 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65  le..    mclocale
7290: 20 22 22 0a 09 20 20 20 20 73 65 74 20 72 65 73   ""..    set res
72a0: 75 6c 74 76 61 72 69 61 62 6c 65 20 22 22 0a 09  ultvariable ""..
72b0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20  } -cleanup {..  
72c0: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
72d0: 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  e..} -body {..  
72e0: 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69    mcpackageconfi
72f0: 67 20 73 65 74 20 63 68 61 6e 67 65 63 6d 64 20  g set changecmd 
7300: 5b 6e 61 6d 65 73 70 61 63 65 20 63 6f 64 65 20  [namespace code 
7310: 63 61 6c 6c 62 61 63 6b 70 72 6f 63 5d 0a 09 20  callbackproc].. 
7320: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f     mclocale foo_
7330: 62 61 72 0a 09 20 20 20 20 73 65 74 20 72 65 73  bar..    set res
7340: 75 6c 74 76 61 72 69 61 62 6c 65 0a 09 7d 20 2d  ultvariable..} -
7350: 72 65 73 75 6c 74 20 7b 66 6f 6f 5f 62 61 72 20  result {foo_bar 
7360: 66 6f 6f 20 7b 7d 7d 0a 0a 09 74 65 73 74 20 6d  foo {}}...test m
7370: 73 67 63 61 74 2d 31 34 2e 34 20 7b 69 6e 76 6f  sgcat-14.4 {invo
7380: 63 61 74 69 6f 6e 20 75 6e 6b 6e 6f 77 6e 63 6d  cation unknowncm
7390: 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  d} -setup {..   
73a0: 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65   mcforgetpackage
73b0: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24  ..    mclocale $
73c0: 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63 6c 6f  locale..    mclo
73d0: 63 61 6c 65 20 22 22 0a 09 20 20 20 20 6d 63 6c  cale ""..    mcl
73e0: 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65  oadedlocales cle
73f0: 61 72 0a 09 20 20 20 20 73 65 74 20 72 65 73 75  ar..    set resu
7400: 6c 74 76 61 72 69 61 62 6c 65 20 22 22 0a 09 7d  ltvariable ""..}
7410: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20   -cleanup {..   
7420: 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65   mcforgetpackage
7430: 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20  ..} -body {..   
7440: 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67   mcpackageconfig
7450: 20 73 65 74 20 75 6e 6b 6e 6f 77 6e 63 6d 64 20   set unknowncmd 
7460: 5b 6e 61 6d 65 73 70 61 63 65 20 63 6f 64 65 20  [namespace code 
7470: 63 61 6c 6c 62 61 63 6b 70 72 6f 63 5d 0a 09 20  callbackproc].. 
7480: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f     mclocale foo_
7490: 62 61 72 0a 09 20 20 20 20 6d 63 20 6b 31 20 70  bar..    mc k1 p
74a0: 31 0a 09 20 20 20 20 73 65 74 20 72 65 73 75 6c  1..    set resul
74b0: 74 76 61 72 69 61 62 6c 65 0a 09 7d 20 2d 72 65  tvariable..} -re
74c0: 73 75 6c 74 20 7b 66 6f 6f 5f 62 61 72 20 6b 31  sult {foo_bar k1
74d0: 20 70 31 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63   p1}...test msgc
74e0: 61 74 2d 31 34 2e 35 20 7b 64 69 73 61 62 6c 65  at-14.5 {disable
74f0: 20 67 6c 6f 62 61 6c 20 75 6e 6b 6e 6f 77 6e 63   global unknownc
7500: 6d 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20  md} -setup {..  
7510: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
7520: 65 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  e..    mclocale 
7530: 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63 6c  $locale..    mcl
7540: 6f 63 61 6c 65 20 22 22 0a 09 20 20 20 20 6d 63  ocale ""..    mc
7550: 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c  loadedlocales cl
7560: 65 61 72 0a 09 20 20 20 20 73 65 74 20 72 65 73  ear..    set res
7570: 75 6c 74 76 61 72 69 61 62 6c 65 20 22 22 0a 09  ultvariable ""..
7580: 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 6d 73 67      rename ::msg
7590: 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 53  cat::mcunknown S
75a0: 61 76 65 64 4d 63 75 6e 6b 6e 6f 77 6e 0a 09 20  avedMcunknown.. 
75b0: 20 20 20 70 72 6f 63 20 3a 3a 6d 73 67 63 61 74     proc ::msgcat
75c0: 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 64 6f 6d  ::mcunknown {dom
75d0: 20 73 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 75   s} {...return u
75e0: 6e 6b 6e 6f 77 6e 3a 24 64 6f 6d 3a 24 73 0a 09  nknown:$dom:$s..
75f0: 20 20 20 20 7d 0a 09 7d 20 2d 63 6c 65 61 6e 75      }..} -cleanu
7600: 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67 65  p {..    mcforge
7610: 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20 72 65  tpackage..    re
7620: 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d  name ::msgcat::m
7630: 63 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 09 20 20 20  cunknown {}..   
7640: 20 72 65 6e 61 6d 65 20 53 61 76 65 64 4d 63 75   rename SavedMcu
7650: 6e 6b 6e 6f 77 6e 20 3a 3a 6d 73 67 63 61 74 3a  nknown ::msgcat:
7660: 3a 6d 63 75 6e 6b 6e 6f 77 6e 0a 09 7d 20 2d 62  :mcunknown..} -b
7670: 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63  ody {..    mcpac
7680: 6b 61 67 65 63 6f 6e 66 69 67 20 73 65 74 20 75  kageconfig set u
7690: 6e 6b 6e 6f 77 6e 63 6d 64 20 22 22 0a 09 20 20  nknowncmd ""..  
76a0: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62    mclocale foo_b
76b0: 61 72 0a 09 20 20 20 20 6d 63 20 6b 31 25 73 20  ar..    mc k1%s 
76c0: 70 31 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 6b  p1..} -result {k
76d0: 31 70 31 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63  1p1}...test msgc
76e0: 61 74 2d 31 34 2e 36 20 7b 75 6e 6b 6e 6f 77 6e  at-14.6 {unknown
76f0: 63 6d 64 20 66 61 69 6c 69 6e 67 7d 20 2d 73 65  cmd failing} -se
7700: 74 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72  tup {..    mcfor
7710: 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20  getpackage..    
7720: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
7730: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22  ..    mclocale "
7740: 22 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c  "..    mcloadedl
7750: 6f 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20  ocales clear..  
7760: 20 20 73 65 74 20 72 65 73 75 6c 74 76 61 72 69    set resultvari
7770: 61 62 6c 65 20 22 22 0a 09 7d 20 2d 63 6c 65 61  able ""..} -clea
7780: 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72  nup {..    mcfor
7790: 67 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62  getpackage..} -b
77a0: 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63  ody {..    mcpac
77b0: 6b 61 67 65 63 6f 6e 66 69 67 20 73 65 74 20 75  kageconfig set u
77c0: 6e 6b 6e 6f 77 6e 63 6d 64 20 5b 6e 61 6d 65 73  nknowncmd [names
77d0: 70 61 63 65 20 63 6f 64 65 20 63 61 6c 6c 62 61  pace code callba
77e0: 63 6b 66 61 69 6c 70 72 6f 63 5d 0a 09 20 20 20  ckfailproc]..   
77f0: 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62 61   mclocale foo_ba
7800: 72 0a 09 20 20 20 20 6d 63 20 6b 31 0a 09 7d 20  r..    mc k1..} 
7810: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a  -returnCodes 1\.
7820: 09 2d 72 65 73 75 6c 74 20 7b 66 61 69 6c 7d 0a  .-result {fail}.
7830: 0c 0a 0a 20 20 20 20 23 20 54 65 73 74 73 20 6d  ...    # Tests m
7840: 73 67 63 61 74 2d 31 35 2e 2a 3a 20 74 63 6c 6f  sgcat-15.*: tclo
7850: 6f 20 63 6f 76 65 72 61 67 65 0a 0a 20 20 20 20  o coverage..    
7860: 23 20 54 68 65 72 65 20 61 72 65 20 34 20 75 73  # There are 4 us
7870: 65 2d 63 61 73 65 73 2c 20 77 68 65 72 65 20 33  e-cases, where 3
7880: 20 6d 75 73 74 20 62 65 20 74 65 73 74 65 64 20   must be tested 
7890: 6e 6f 77 3a 0a 20 20 20 20 23 20 2d 20 6e 61 6d  now:.    # - nam
78a0: 65 73 70 61 63 65 20 64 65 66 69 6e 65 64 2c 20  espace defined, 
78b0: 69 6e 20 63 6c 61 73 73 20 64 65 66 69 6e 69 74  in class definit
78c0: 69 6f 6e 2c 20 63 6c 61 73 73 20 64 65 66 69 6e  ion, class defin
78d0: 65 64 20 6f 6f 2c 20 63 6c 61 73 73 6c 65 73 73  ed oo, classless
78e0: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
78f0: 74 2d 31 35 2e 31 20 7b 6d 63 20 69 6e 20 63 6c  t-15.1 {mc in cl
7900: 61 73 73 20 73 65 74 75 70 7d 20 2d 73 65 74 75  ass setup} -setu
7910: 70 20 7b 0a 09 23 20 66 75 6c 6c 20 6e 61 6d 65  p {..# full name
7920: 73 70 61 63 65 20 69 73 20 3a 3a 6d 73 67 63 61  space is ::msgca
7930: 74 3a 3a 74 65 73 74 3a 62 61 72 0a 09 6e 61 6d  t::test:bar..nam
7940: 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20  espace eval bar 
7950: 7b 0a 09 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a  {..    ::msgcat:
7960: 3a 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 20 63  :mcset foo_BAR c
7970: 6f 6e 32 20 63 6f 6e 32 62 61 72 0a 09 20 20 20  on2 con2bar..   
7980: 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74   oo::class creat
7990: 65 20 43 6c 61 73 73 43 75 72 0a 09 7d 0a 09 76  e ClassCur..}..v
79a0: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
79b0: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63  mclocale]..mcloc
79c0: 61 6c 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20  ale foo_BAR.    
79d0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63  } -cleanup {..mc
79e0: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09  locale $locale..
79f0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62  namespace eval b
7a00: 61 72 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  ar {::msgcat::mc
7a10: 66 6f 72 67 65 74 70 61 63 6b 61 67 65 7d 0a 09  forgetpackage}..
7a20: 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65  namespace delete
7a30: 20 62 61 72 0a 20 20 20 20 7d 20 2d 62 6f 64 79   bar.    } -body
7a40: 20 7b 0a 09 6f 6f 3a 3a 64 65 66 69 6e 65 20 62   {..oo::define b
7a50: 61 72 3a 3a 43 6c 61 73 73 43 75 72 20 6d 73 67  ar::ClassCur msg
7a60: 63 61 74 3a 3a 6d 63 20 63 6f 6e 32 0a 20 20 20  cat::mc con2.   
7a70: 20 7d 20 2d 72 65 73 75 6c 74 20 63 6f 6e 32 62   } -result con2b
7a80: 61 72 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67  ar..    test msg
7a90: 63 61 74 2d 31 35 2e 32 20 7b 6d 63 20 69 6e 20  cat-15.2 {mc in 
7aa0: 63 6c 61 73 73 7d 20 2d 73 65 74 75 70 20 7b 0a  class} -setup {.
7ab0: 09 23 20 66 75 6c 6c 20 6e 61 6d 65 73 70 61 63  .# full namespac
7ac0: 65 20 69 73 20 3a 3a 6d 73 67 63 61 74 3a 3a 74  e is ::msgcat::t
7ad0: 65 73 74 3a 62 61 72 0a 09 6e 61 6d 65 73 70 61  est:bar..namespa
7ae0: 63 65 20 65 76 61 6c 20 62 61 72 20 7b 0a 09 20  ce eval bar {.. 
7af0: 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73     ::msgcat::mcs
7b00: 65 74 20 66 6f 6f 5f 42 41 52 20 63 6f 6e 32 20  et foo_BAR con2 
7b10: 63 6f 6e 32 62 61 72 0a 09 20 20 20 20 6f 6f 3a  con2bar..    oo:
7b20: 3a 63 6c 61 73 73 20 63 72 65 61 74 65 20 43 6c  :class create Cl
7b30: 61 73 73 43 75 72 0a 09 20 20 20 20 6f 6f 3a 3a  assCur..    oo::
7b40: 64 65 66 69 6e 65 20 43 6c 61 73 73 43 75 72 20  define ClassCur 
7b50: 6d 65 74 68 6f 64 20 6d 65 74 68 6f 64 31 20 7b  method method1 {
7b60: 7d 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 20  } {::msgcat::mc 
7b70: 63 6f 6e 32 7d 0a 09 7d 0a 09 23 20 66 75 6c 6c  con2}..}..# full
7b80: 20 6e 61 6d 65 73 70 61 63 65 20 69 73 20 3a 3a   namespace is ::
7b90: 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a 62 61 7a  msgcat::test:baz
7ba0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
7bb0: 20 62 61 7a 20 7b 0a 09 20 20 20 20 73 65 74 20   baz {..    set 
7bc0: 4f 62 6a 43 75 72 20 5b 3a 3a 6d 73 67 63 61 74  ObjCur [::msgcat
7bd0: 3a 3a 74 65 73 74 3a 3a 62 61 72 3a 3a 43 6c 61  ::test::bar::Cla
7be0: 73 73 43 75 72 20 6e 65 77 5d 0a 09 7d 0a 09 76  ssCur new]..}..v
7bf0: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
7c00: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63  mclocale]..mcloc
7c10: 61 6c 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20  ale foo_BAR.    
7c20: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63  } -cleanup {..mc
7c30: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09  locale $locale..
7c40: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62  namespace eval b
7c50: 61 72 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  ar {::msgcat::mc
7c60: 66 6f 72 67 65 74 70 61 63 6b 61 67 65 7d 0a 09  forgetpackage}..
7c70: 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65  namespace delete
7c80: 20 62 61 72 20 62 61 7a 0a 20 20 20 20 7d 20 2d   bar baz.    } -
7c90: 62 6f 64 79 20 7b 0a 09 24 62 61 7a 3a 3a 4f 62  body {..$baz::Ob
7ca0: 6a 43 75 72 20 6d 65 74 68 6f 64 31 0a 20 20 20  jCur method1.   
7cb0: 20 7d 20 2d 72 65 73 75 6c 74 20 63 6f 6e 32 62   } -result con2b
7cc0: 61 72 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67  ar..    test msg
7cd0: 63 61 74 2d 31 35 2e 33 20 7b 6d 63 20 69 6e 20  cat-15.3 {mc in 
7ce0: 63 6c 61 73 73 6c 65 73 73 20 6f 62 6a 65 63 74  classless object
7cf0: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 23 20 66 75  } -setup {..# fu
7d00: 6c 6c 20 6e 61 6d 65 73 70 61 63 65 20 69 73 20  ll namespace is 
7d10: 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a 62  ::msgcat::test:b
7d20: 61 72 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76  ar..namespace ev
7d30: 61 6c 20 62 61 72 20 7b 0a 09 20 20 20 20 3a 3a  al bar {..    ::
7d40: 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f  msgcat::mcset fo
7d50: 6f 5f 42 41 52 20 63 6f 6e 32 20 63 6f 6e 32 62  o_BAR con2 con2b
7d60: 61 72 0a 09 20 20 20 20 6f 6f 3a 3a 6f 62 6a 65  ar..    oo::obje
7d70: 63 74 20 63 72 65 61 74 65 20 4f 62 6a 43 75 72  ct create ObjCur
7d80: 0a 09 20 20 20 20 6f 6f 3a 3a 6f 62 6a 64 65 66  ..    oo::objdef
7d90: 69 6e 65 20 4f 62 6a 43 75 72 20 6d 65 74 68 6f  ine ObjCur metho
7da0: 64 20 6d 65 74 68 6f 64 31 20 7b 7d 20 7b 3a 3a  d method1 {} {::
7db0: 6d 73 67 63 61 74 3a 3a 6d 63 20 63 6f 6e 32 7d  msgcat::mc con2}
7dc0: 0a 09 7d 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f  ..}..variable lo
7dd0: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
7de0: 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41  .mclocale foo_BA
7df0: 52 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70  R.    } -cleanup
7e00: 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f   {..mclocale $lo
7e10: 63 61 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20  cale..namespace 
7e20: 65 76 61 6c 20 62 61 72 20 7b 3a 3a 6d 73 67 63  eval bar {::msgc
7e30: 61 74 3a 3a 6d 63 66 6f 72 67 65 74 70 61 63 6b  at::mcforgetpack
7e40: 61 67 65 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20  age}..namespace 
7e50: 64 65 6c 65 74 65 20 62 61 72 0a 20 20 20 20 7d  delete bar.    }
7e60: 20 2d 62 6f 64 79 20 7b 0a 09 62 61 72 3a 3a 4f   -body {..bar::O
7e70: 62 6a 43 75 72 20 6d 65 74 68 6f 64 31 0a 20 20  bjCur method1.  
7e80: 20 20 7d 20 2d 72 65 73 75 6c 74 20 63 6f 6e 32    } -result con2
7e90: 62 61 72 0a 0a 20 20 20 20 74 65 73 74 20 6d 73  bar..    test ms
7ea0: 67 63 61 74 2d 31 35 2e 34 20 7b 6d 63 20 69 6e  gcat-15.4 {mc in
7eb0: 20 63 6c 61 73 73 6c 65 73 73 20 6f 62 6a 65 63   classless objec
7ec0: 74 20 77 69 74 68 20 65 78 70 6c 69 63 69 74 65  t with explicite
7ed0: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 7d   namespace eval}
7ee0: 5c 0a 20 20 20 20 2d 73 65 74 75 70 20 7b 0a 09  \.    -setup {..
7ef0: 23 20 66 75 6c 6c 20 6e 61 6d 65 73 70 61 63 65  # full namespace
7f00: 20 69 73 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65   is ::msgcat::te
7f10: 73 74 3a 62 61 72 0a 09 6e 61 6d 65 73 70 61 63  st:bar..namespac
7f20: 65 20 65 76 61 6c 20 62 61 72 20 7b 0a 09 20 20  e eval bar {..  
7f30: 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65    ::msgcat::mcse
7f40: 74 20 66 6f 6f 5f 42 41 52 20 63 6f 6e 32 20 63  t foo_BAR con2 c
7f50: 6f 6e 32 62 61 72 0a 09 20 20 20 20 6f 6f 3a 3a  on2bar..    oo::
7f60: 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 4f 62  object create Ob
7f70: 6a 43 75 72 0a 09 20 20 20 20 6f 6f 3a 3a 6f 62  jCur..    oo::ob
7f80: 6a 64 65 66 69 6e 65 20 4f 62 6a 43 75 72 20 6d  jdefine ObjCur m
7f90: 65 74 68 6f 64 20 6d 65 74 68 6f 64 31 20 7b 7d  ethod method1 {}
7fa0: 20 7b 0a 09 09 6e 61 6d 65 73 70 61 63 65 20 65   {...namespace e
7fb0: 76 61 6c 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65  val ::msgcat::te
7fc0: 73 74 3a 3a 62 61 7a 20 7b 0a 09 09 20 20 20 20  st::baz {...    
7fd0: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 20 63 6f 6e  ::msgcat::mc con
7fe0: 32 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a  2...}..    }..}.
7ff0: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
8000: 62 61 7a 20 7b 0a 09 20 20 20 20 3a 3a 6d 73 67  baz {..    ::msg
8010: 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f 6f 5f 42  cat::mcset foo_B
8020: 41 52 20 63 6f 6e 32 20 63 6f 6e 32 62 61 7a 0a  AR con2 con2baz.
8030: 09 7d 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63  .}..variable loc
8040: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
8050: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52  mclocale foo_BAR
8060: 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20  .    } -cleanup 
8070: 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63  {..mclocale $loc
8080: 61 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 65  ale..namespace e
8090: 76 61 6c 20 62 61 72 20 7b 3a 3a 6d 73 67 63 61  val bar {::msgca
80a0: 74 3a 3a 6d 63 66 6f 72 67 65 74 70 61 63 6b 61  t::mcforgetpacka
80b0: 67 65 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 65  ge}..namespace e
80c0: 76 61 6c 20 62 61 7a 20 7b 3a 3a 6d 73 67 63 61  val baz {::msgca
80d0: 74 3a 3a 6d 63 66 6f 72 67 65 74 70 61 63 6b 61  t::mcforgetpacka
80e0: 67 65 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 64  ge}..namespace d
80f0: 65 6c 65 74 65 20 62 61 72 20 62 61 7a 0a 20 20  elete bar baz.  
8100: 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 62 61 72    } -body {..bar
8110: 3a 3a 4f 62 6a 43 75 72 20 6d 65 74 68 6f 64 31  ::ObjCur method1
8120: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 63  .    } -result c
8130: 6f 6e 32 62 61 7a 0a 0a 20 20 20 20 23 20 48 61  on2baz..    # Ha
8140: 4f 20 32 30 32 34 2d 30 37 2d 31 35 20 66 69 78  O 2024-07-15 fix
8150: 20 6d 65 0a 20 20 20 20 23 20 54 69 63 6b 65 74   me.    # Ticket
8160: 20 39 31 62 33 61 35 62 62 3a 20 49 20 68 61 76   91b3a5bb: I hav
8170: 65 20 6e 6f 20 69 64 65 61 20 77 68 61 74 20 74  e no idea what t
8180: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 73  he following cas
8190: 65 20 73 68 6f 75 6c 64 20 64 6f 2e 0a 20 20 20  e should do..   
81a0: 20 23 20 42 75 74 20 63 75 72 72 65 6e 74 6c 79   # But currently
81b0: 2c 20 69 74 20 72 61 69 73 65 73 20 61 6e 20 65  , it raises an e
81c0: 72 72 6f 72 20 61 6e 64 20 74 68 61 74 20 73 68  rror and that sh
81d0: 6f 75 6c 64 20 6e 6f 74 20 68 61 70 70 65 6e 2e  ould not happen.
81e0: 0a 20 20 20 20 23 20 54 68 65 20 62 61 63 6b 67  .    # The backg
81f0: 72 6f 75 6e 64 20 69 73 20 74 68 65 20 74 6b 6c  round is the tkl
8200: 69 62 20 74 6f 6f 6c 74 69 70 20 70 61 63 6b 61  ib tooltip packa
8210: 67 65 2e 0a 20 20 20 20 23 20 54 68 69 73 20 70  ge..    # This p
8220: 61 63 6b 61 67 65 20 63 61 70 74 75 72 65 73 20  ackage captures 
8230: 74 68 65 20 63 61 6c 6c 65 72 20 6e 61 6d 65 73  the caller names
8240: 70 61 63 65 20 74 6f 20 6c 61 74 65 72 20 69 6e  pace to later in
8250: 76 6f 6b 65 20 6d 73 67 63 61 74 20 77 69 74 68  voke msgcat with
8260: 20 63 75 72 72 65 6e 74 20 64 61 74 61 2e 0a 20   current data.. 
8270: 20 20 20 23 20 49 66 20 74 68 65 20 63 61 6c 6c     # If the call
8280: 65 72 20 6e 61 6d 65 73 70 61 63 65 20 69 73 20  er namespace is 
8290: 61 20 6d 65 74 68 6f 64 2c 20 69 74 20 63 75 72  a method, it cur
82a0: 72 65 6e 74 6c 79 20 66 61 69 6c 73 2e 0a 20 20  rently fails..  
82b0: 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 35    test msgcat-15
82c0: 2e 35 20 7b 74 69 63 6b 65 74 20 39 31 62 33 61  .5 {ticket 91b3a
82d0: 35 62 62 3a 20 6d 65 74 68 6f 64 20 6e 61 6d 65  5bb: method name
82e0: 73 70 61 63 65 20 72 65 63 6f 72 64 65 64 20 61  space recorded a
82f0: 6e 64 20 65 76 61 6c 75 61 74 65 64 20 67 69 76  nd evaluated giv
8300: 65 73 20 65 72 72 6f 72 7d 5c 0a 20 20 20 20 2d  es error}\.    -
8310: 73 65 74 75 70 20 7b 0a 09 6f 6f 3a 3a 63 6c 61  setup {..oo::cla
8320: 73 73 20 63 72 65 61 74 65 20 41 70 70 20 7b 7d  ss create App {}
8330: 0a 09 6f 6f 3a 3a 64 65 66 69 6e 65 20 41 70 70  ..oo::define App
8340: 20 7b 0a 09 20 20 20 20 63 6f 6e 73 74 72 75 63   {..    construc
8350: 74 6f 72 20 7b 7d 20 7b 20 6d 79 20 61 64 64 5f  tor {} { my add_
8360: 6f 6e 65 20 7d 0a 09 20 20 20 20 6d 65 74 68 6f  one }..    metho
8370: 64 20 61 64 64 5f 6f 6e 65 20 7b 7d 20 7b 20 72  d add_one {} { r
8380: 65 63 6f 72 64 4d 73 67 63 61 74 20 7d 0a 09 7d  ecordMsgcat }..}
8390: 0a 09 70 72 6f 63 20 3a 3a 72 65 63 6f 72 64 4d  ..proc ::recordM
83a0: 73 67 63 61 74 20 7b 7d 20 7b 20 73 65 74 20 3a  sgcat {} { set :
83b0: 3a 6e 73 63 61 6c 6c 65 72 20 5b 75 70 6c 65 76  :nscaller [uplev
83c0: 65 6c 20 31 20 7b 6e 61 6d 65 73 70 61 63 65 20  el 1 {namespace 
83d0: 63 75 72 72 65 6e 74 7d 5d 20 7d 0a 09 73 65 74  current}] }..set
83e0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 5b 41 70   application [Ap
83f0: 70 20 6e 65 77 5d 0a 7d 20 2d 63 6c 65 61 6e 75  p new].} -cleanu
8400: 70 20 7b 0a 09 24 61 70 70 6c 69 63 61 74 69 6f  p {..$applicatio
8410: 6e 20 64 65 73 74 72 6f 79 0a 09 41 70 70 20 64  n destroy..App d
8420: 65 73 74 72 6f 79 0a 09 75 6e 73 65 74 20 2d 6e  estroy..unset -n
8430: 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 6e 73 63 61  ocomplain ::nsca
8440: 6c 6c 65 72 0a 09 72 65 6e 61 6d 65 20 3a 3a 72  ller..rename ::r
8450: 65 63 6f 72 64 4d 73 67 63 61 74 20 22 22 0a 20  ecordMsgcat "". 
8460: 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6e 61     } -body {..na
8470: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 24 3a 3a  mespace eval $::
8480: 6e 73 63 61 6c 6c 65 72 20 5b 6c 69 73 74 20 3a  nscaller [list :
8490: 3a 6d 73 67 63 61 74 3a 3a 6d 63 20 22 54 65 73  :msgcat::mc "Tes
84a0: 74 22 5d 0a 20 20 20 20 7d 20 2d 72 65 74 75 72  t"].    } -retur
84b0: 6e 43 6f 64 65 73 20 6f 6b 20 2d 72 65 73 75 6c  nCodes ok -resul
84c0: 74 20 54 65 73 74 0a 0a 20 20 20 20 23 20 54 65  t Test..    # Te
84d0: 73 74 20 6d 73 67 63 61 74 2d 31 36 2e 2a 3a 20  st msgcat-16.*: 
84e0: 63 6f 6d 6d 61 6e 64 20 6d 63 70 61 63 6b 61 67  command mcpackag
84f0: 65 6e 61 6d 65 73 70 61 63 65 67 65 74 0a 0a 20  enamespaceget.. 
8500: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31     test msgcat-1
8510: 36 2e 31 20 7b 6d 63 70 61 63 6b 61 67 65 6e 61  6.1 {mcpackagena
8520: 6d 65 73 70 61 63 65 67 65 74 20 69 6e 20 6e 61  mespaceget in na
8530: 6d 65 73 70 61 63 65 20 70 72 6f 63 65 64 75 72  mespace procedur
8540: 65 7d 20 2d 62 6f 64 79 20 7b 0a 09 6e 61 6d 65  e} -body {..name
8550: 73 70 61 63 65 20 65 76 61 6c 20 62 61 7a 20 7b  space eval baz {
8560: 6d 73 67 63 61 74 3a 3a 6d 63 70 61 63 6b 61 67  msgcat::mcpackag
8570: 65 6e 61 6d 65 73 70 61 63 65 67 65 74 7d 0a 20  enamespaceget}. 
8580: 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 3a 3a 6d     } -result ::m
8590: 73 67 63 61 74 3a 3a 74 65 73 74 3a 3a 62 61 7a  sgcat::test::baz
85a0: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
85b0: 74 2d 31 36 2e 32 20 7b 6d 63 70 61 63 6b 61 67  t-16.2 {mcpackag
85c0: 65 6e 61 6d 65 73 70 61 63 65 67 65 74 20 69 6e  enamespaceget in
85d0: 20 63 6c 61 73 73 20 73 65 74 75 70 7d 20 2d 73   class setup} -s
85e0: 65 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70 61 63  etup {..namespac
85f0: 65 20 65 76 61 6c 20 62 61 72 20 7b 0a 09 20 20  e eval bar {..  
8600: 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61    oo::class crea
8610: 74 65 20 43 6c 61 73 73 43 75 72 0a 09 20 20 20  te ClassCur..   
8620: 20 6f 6f 3a 3a 64 65 66 69 6e 65 20 43 6c 61 73   oo::define Clas
8630: 73 43 75 72 20 76 61 72 69 61 62 6c 65 20 61 0a  sCur variable a.
8640: 09 7d 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75  .}.    } -cleanu
8650: 70 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 64  p {..namespace d
8660: 65 6c 65 74 65 20 62 61 72 0a 20 20 20 20 7d 20  elete bar.    } 
8670: 2d 62 6f 64 79 20 7b 0a 09 6f 6f 3a 3a 64 65 66  -body {..oo::def
8680: 69 6e 65 20 62 61 72 3a 3a 43 6c 61 73 73 43 75  ine bar::ClassCu
8690: 72 20 6d 73 67 63 61 74 3a 3a 6d 63 70 61 63 6b  r msgcat::mcpack
86a0: 61 67 65 6e 61 6d 65 73 70 61 63 65 67 65 74 0a  agenamespaceget.
86b0: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 3a 3a      } -result ::
86c0: 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a 3a 62 61  msgcat::test::ba
86d0: 72 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  r..    test msgc
86e0: 61 74 2d 31 36 2e 33 20 7b 6d 63 70 61 63 6b 61  at-16.3 {mcpacka
86f0: 67 65 6e 61 6d 65 73 70 61 63 65 67 65 74 20 69  genamespaceget i
8700: 6e 20 63 6c 61 73 73 7d 20 2d 73 65 74 75 70 20  n class} -setup 
8710: 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61  {..namespace eva
8720: 6c 20 62 61 72 20 7b 0a 09 20 20 20 20 6f 6f 3a  l bar {..    oo:
8730: 3a 63 6c 61 73 73 20 63 72 65 61 74 65 20 43 6c  :class create Cl
8740: 61 73 73 43 75 72 0a 09 20 20 20 20 6f 6f 3a 3a  assCur..    oo::
8750: 64 65 66 69 6e 65 20 43 6c 61 73 73 43 75 72 20  define ClassCur 
8760: 6d 65 74 68 6f 64 20 6d 65 74 68 6f 64 31 20 7b  method method1 {
8770: 7d 20 7b 6d 73 67 63 61 74 3a 3a 6d 63 70 61 63  } {msgcat::mcpac
8780: 6b 61 67 65 6e 61 6d 65 73 70 61 63 65 67 65 74  kagenamespaceget
8790: 7d 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20  }..}..namespace 
87a0: 65 76 61 6c 20 62 61 7a 20 7b 0a 09 20 20 20 20  eval baz {..    
87b0: 73 65 74 20 4f 62 6a 43 75 72 20 5b 3a 3a 6d 73  set ObjCur [::ms
87c0: 67 63 61 74 3a 3a 74 65 73 74 3a 3a 62 61 72 3a  gcat::test::bar:
87d0: 3a 43 6c 61 73 73 43 75 72 20 6e 65 77 5d 0a 09  :ClassCur new]..
87e0: 7d 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70  }.    } -cleanup
87f0: 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 64 65   {..namespace de
8800: 6c 65 74 65 20 62 61 72 20 62 61 7a 0a 20 20 20  lete bar baz.   
8810: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 24 62 61 7a   } -body {..$baz
8820: 3a 3a 4f 62 6a 43 75 72 20 6d 65 74 68 6f 64 31  ::ObjCur method1
8830: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 3a  .    } -result :
8840: 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a 3a 62  :msgcat::test::b
8850: 61 72 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67  ar..    test msg
8860: 63 61 74 2d 31 36 2e 34 20 7b 6d 63 70 61 63 6b  cat-16.4 {mcpack
8870: 61 67 65 6e 61 6d 65 73 70 61 63 65 67 65 74 20  agenamespaceget 
8880: 69 6e 20 63 6c 61 73 73 6c 65 73 73 20 6f 62 6a  in classless obj
8890: 65 63 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 6e  ect} -setup {..n
88a0: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61  amespace eval ba
88b0: 72 20 7b 0a 09 20 20 20 20 6f 6f 3a 3a 6f 62 6a  r {..    oo::obj
88c0: 65 63 74 20 63 72 65 61 74 65 20 4f 62 6a 43 75  ect create ObjCu
88d0: 72 0a 09 20 20 20 20 6f 6f 3a 3a 6f 62 6a 64 65  r..    oo::objde
88e0: 66 69 6e 65 20 4f 62 6a 43 75 72 20 6d 65 74 68  fine ObjCur meth
88f0: 6f 64 20 6d 65 74 68 6f 64 31 20 7b 7d 20 7b 6d  od method1 {} {m
8900: 73 67 63 61 74 3a 3a 6d 63 70 61 63 6b 61 67 65  sgcat::mcpackage
8910: 6e 61 6d 65 73 70 61 63 65 67 65 74 7d 0a 09 7d  namespaceget}..}
8920: 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20  .    } -cleanup 
8930: 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 64 65 6c  {..namespace del
8940: 65 74 65 20 62 61 72 0a 20 20 20 20 7d 20 2d 62  ete bar.    } -b
8950: 6f 64 79 20 7b 0a 09 62 61 72 3a 3a 4f 62 6a 43  ody {..bar::ObjC
8960: 75 72 20 6d 65 74 68 6f 64 31 0a 20 20 20 20 7d  ur method1.    }
8970: 20 2d 72 65 73 75 6c 74 20 3a 3a 6d 73 67 63 61   -result ::msgca
8980: 74 3a 3a 74 65 73 74 3a 3a 62 61 72 0a 0a 20 20  t::test::bar..  
8990: 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 36    test msgcat-16
89a0: 2e 35 5c 0a 20 20 20 20 7b 6d 63 70 61 63 6b 61  .5\.    {mcpacka
89b0: 67 65 6e 61 6d 65 73 70 61 63 65 67 65 74 20 69  genamespaceget i
89c0: 6e 20 63 6c 61 73 73 6c 65 73 73 20 6f 62 6a 65  n classless obje
89d0: 63 74 20 77 69 74 68 20 65 78 70 6c 69 63 69 74  ct with explicit
89e0: 65 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  e namespace eval
89f0: 7d 5c 0a 20 20 20 20 2d 73 65 74 75 70 20 7b 0a  }\.    -setup {.
8a00: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
8a10: 62 61 72 20 7b 0a 09 20 20 20 20 6f 6f 3a 3a 6f  bar {..    oo::o
8a20: 62 6a 65 63 74 20 63 72 65 61 74 65 20 4f 62 6a  bject create Obj
8a30: 43 75 72 0a 09 20 20 20 20 6f 6f 3a 3a 6f 62 6a  Cur..    oo::obj
8a40: 64 65 66 69 6e 65 20 4f 62 6a 43 75 72 20 6d 65  define ObjCur me
8a50: 74 68 6f 64 20 6d 65 74 68 6f 64 31 20 7b 7d 20  thod method1 {} 
8a60: 7b 0a 09 09 6e 61 6d 65 73 70 61 63 65 20 65 76  {...namespace ev
8a70: 61 6c 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73  al ::msgcat::tes
8a80: 74 3a 3a 62 61 7a 20 7b 0a 09 09 20 20 20 20 6d  t::baz {...    m
8a90: 73 67 63 61 74 3a 3a 6d 63 70 61 63 6b 61 67 65  sgcat::mcpackage
8aa0: 6e 61 6d 65 73 70 61 63 65 67 65 74 0a 09 09 7d  namespaceget...}
8ab0: 0a 09 20 20 20 20 7d 0a 09 7d 0a 20 20 20 20 7d  ..    }..}.    }
8ac0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6e 61 6d   -cleanup {..nam
8ad0: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 62 61  espace delete ba
8ae0: 72 20 62 61 7a 0a 20 20 20 20 7d 20 2d 62 6f 64  r baz.    } -bod
8af0: 79 20 7b 0a 09 62 61 72 3a 3a 4f 62 6a 43 75 72  y {..bar::ObjCur
8b00: 20 6d 65 74 68 6f 64 31 0a 20 20 20 20 7d 20 2d   method1.    } -
8b10: 72 65 73 75 6c 74 20 3a 3a 6d 73 67 63 61 74 3a  result ::msgcat:
8b20: 3a 74 65 73 74 3a 3a 62 61 7a 0a 0a 0c 0a 20 20  :test::baz....  
8b30: 20 20 23 20 54 65 73 74 20 6d 73 67 63 61 74 2d    # Test msgcat-
8b40: 31 37 2e 2a 3a 20 6d 63 6e 20 63 6f 6d 6d 61 6e  17.*: mcn comman
8b50: 64 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  d..    test msgc
8b60: 61 74 2d 31 37 2e 31 20 7b 6d 63 6e 20 6e 6f 20  at-17.1 {mcn no 
8b70: 70 61 72 61 6d 65 74 65 72 73 7d 20 2d 62 6f 64  parameters} -bod
8b80: 79 20 7b 0a 09 6d 63 6e 0a 20 20 20 20 7d 20 2d  y {..mcn.    } -
8b90: 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 20  returnCodes 1\. 
8ba0: 20 20 20 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e     -result {wron
8bb0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
8bc0: 20 62 65 20 22 6d 63 6e 20 6e 73 20 73 72 63 20   be "mcn ns src 
8bd0: 3f 61 72 67 20 2e 2e 2e 3f 22 7d 0a 0a 20 20 20  ?arg ...?"}..   
8be0: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 37 2e   test msgcat-17.
8bf0: 32 20 7b 6d 63 6e 7d 20 2d 73 65 74 75 70 20 7b  2 {mcn} -setup {
8c00: 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
8c10: 20 62 61 72 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a   bar {::msgcat::
8c20: 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 20 63 6f  mcset foo_BAR co
8c30: 6e 31 20 63 6f 6e 31 62 61 72 7d 0a 09 76 61 72  n1 con1bar}..var
8c40: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
8c50: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c  locale]..mclocal
8c60: 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20 7d 20  e foo_BAR.    } 
8c70: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f  -cleanup {..mclo
8c80: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20  cale $locale.   
8c90: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 3a 3a 6d 73   } -body {..::ms
8ca0: 67 63 61 74 3a 3a 6d 63 6e 20 5b 6e 61 6d 65 73  gcat::mcn [names
8cb0: 70 61 63 65 20 63 75 72 72 65 6e 74 5d 3a 3a 62  pace current]::b
8cc0: 61 72 20 63 6f 6e 31 0a 20 20 20 20 7d 20 2d 72  ar con1.    } -r
8cd0: 65 73 75 6c 74 20 63 6f 6e 31 62 61 72 0a 0a 0c  esult con1bar...
8ce0: 0a 20 20 20 20 69 6e 74 65 72 70 20 62 67 65 72  .    interp bger
8cf0: 72 6f 72 20 7b 7d 20 24 62 67 65 72 72 6f 72 73  ror {} $bgerrors
8d00: 61 76 65 64 0a 0a 20 20 20 20 23 20 54 65 73 74  aved..    # Test
8d10: 73 20 6d 73 67 63 61 74 2d 31 38 2e 2a 3a 20 5b  s msgcat-18.*: [
8d20: 6d 63 75 74 69 6c 5d 0a 0a 20 20 20 20 74 65 73  mcutil]..    tes
8d30: 74 20 6d 73 67 63 61 74 2d 31 38 2e 31 20 7b 6d  t msgcat-18.1 {m
8d40: 63 75 74 69 6c 20 2d 20 6e 6f 20 61 72 67 75 6d  cutil - no argum
8d50: 65 6e 74 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63  ent} -body {..mc
8d60: 75 74 69 6c 0a 20 20 20 20 7d 20 2d 72 65 74 75  util.    } -retu
8d70: 72 6e 43 6f 64 65 73 20 31 5c 0a 20 20 20 20 2d  rnCodes 1\.    -
8d80: 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20  result {wrong # 
8d90: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
8da0: 22 6d 63 75 74 69 6c 20 73 75 62 63 6f 6d 6d 61  "mcutil subcomma
8db0: 6e 64 20 3f 61 72 67 20 2e 2e 2e 3f 22 7d 0a 0a  nd ?arg ...?"}..
8dc0: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
8dd0: 31 38 2e 32 20 7b 6d 63 75 74 69 6c 20 2d 20 77  18.2 {mcutil - w
8de0: 72 6f 6e 67 20 61 72 67 75 6d 65 6e 74 7d 20 2d  rong argument} -
8df0: 62 6f 64 79 20 7b 0a 09 6d 63 75 74 69 6c 20 6a  body {..mcutil j
8e00: 75 6e 6b 0a 20 20 20 20 7d 20 2d 72 65 74 75 72  unk.    } -retur
8e10: 6e 43 6f 64 65 73 20 31 5c 0a 20 20 20 20 2d 72  nCodes 1\.    -r
8e20: 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 73  esult {unknown s
8e30: 75 62 63 6f 6d 6d 61 6e 64 20 22 6a 75 6e 6b 22  ubcommand "junk"
8e40: 3a 20 6d 75 73 74 20 62 65 20 67 65 74 70 72 65  : must be getpre
8e50: 66 65 72 65 6e 63 65 73 2c 20 6f 72 20 67 65 74  ferences, or get
8e60: 73 79 73 74 65 6d 6c 6f 63 61 6c 65 7d 0a 0a 20  systemlocale}.. 
8e70: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31     test msgcat-1
8e80: 38 2e 33 20 7b 6d 63 75 74 69 6c 20 2d 20 70 61  8.3 {mcutil - pa
8e90: 72 74 69 61 6c 20 61 72 67 75 6d 65 6e 74 7d 20  rtial argument} 
8ea0: 2d 62 6f 64 79 20 7b 0a 09 6d 63 75 74 69 6c 20  -body {..mcutil 
8eb0: 67 65 74 73 79 73 74 65 6d 0a 20 20 20 20 7d 20  getsystem.    } 
8ec0: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a  -returnCodes 1\.
8ed0: 20 20 20 20 2d 72 65 73 75 6c 74 20 7b 75 6e 6b      -result {unk
8ee0: 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20  nown subcommand 
8ef0: 22 67 65 74 73 79 73 74 65 6d 22 3a 20 6d 75 73  "getsystem": mus
8f00: 74 20 62 65 20 67 65 74 70 72 65 66 65 72 65 6e  t be getpreferen
8f10: 63 65 73 2c 20 6f 72 20 67 65 74 73 79 73 74 65  ces, or getsyste
8f20: 6d 6c 6f 63 61 6c 65 7d 0a 0a 20 20 20 20 74 65  mlocale}..    te
8f30: 73 74 20 6d 73 67 63 61 74 2d 31 38 2e 34 20 7b  st msgcat-18.4 {
8f40: 6d 63 75 74 69 6c 20 67 65 74 70 72 65 66 65 72  mcutil getprefer
8f50: 65 6e 63 65 73 20 2d 20 6e 6f 20 61 72 67 75 6d  ences - no argum
8f60: 65 6e 74 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63  ent} -body {..mc
8f70: 75 74 69 6c 20 67 65 74 70 72 65 66 65 72 65 6e  util getpreferen
8f80: 63 65 73 0a 20 20 20 20 7d 20 2d 72 65 74 75 72  ces.    } -retur
8f90: 6e 43 6f 64 65 73 20 31 5c 0a 20 20 20 20 2d 72  nCodes 1\.    -r
8fa0: 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61  esult {wrong # a
8fb0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22  rgs: should be "
8fc0: 6d 63 75 74 69 6c 20 67 65 74 70 72 65 66 65 72  mcutil getprefer
8fd0: 65 6e 63 65 73 20 6c 6f 63 61 6c 65 22 7d 0a 0a  ences locale"}..
8fe0: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
8ff0: 31 38 2e 35 20 7b 6d 63 75 74 69 6c 20 67 65 74  18.5 {mcutil get
9000: 70 72 65 66 65 72 65 6e 63 65 73 20 2d 20 44 45  preferences - DE
9010: 5f 64 65 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63  _de} -body {..mc
9020: 75 74 69 6c 20 67 65 74 70 72 65 66 65 72 65 6e  util getpreferen
9030: 63 65 73 20 44 45 5f 64 65 0a 20 20 20 20 7d 20  ces DE_de.    } 
9040: 2d 72 65 73 75 6c 74 20 7b 64 65 5f 64 65 20 64  -result {de_de d
9050: 65 20 7b 7d 7d 0a 0a 20 20 20 20 74 65 73 74 20  e {}}..    test 
9060: 6d 73 67 63 61 74 2d 31 38 2e 36 20 7b 6d 63 75  msgcat-18.6 {mcu
9070: 74 69 6c 20 67 65 74 73 79 73 74 65 6d 6c 6f 63  til getsystemloc
9080: 61 6c 65 20 2d 20 77 72 6f 6e 67 20 61 72 67 75  ale - wrong argu
9090: 6d 65 6e 74 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d  ment} -body {..m
90a0: 63 75 74 69 6c 20 67 65 74 73 79 73 74 65 6d 6c  cutil getsysteml
90b0: 6f 63 61 6c 65 20 44 45 5f 64 65 0a 20 20 20 20  ocale DE_de.    
90c0: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31  } -returnCodes 1
90d0: 5c 0a 20 20 20 20 2d 72 65 73 75 6c 74 20 7b 77  \.    -result {w
90e0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
90f0: 75 6c 64 20 62 65 20 22 6d 63 75 74 69 6c 20 67  uld be "mcutil g
9100: 65 74 73 79 73 74 65 6d 6c 6f 63 61 6c 65 22 7d  etsystemlocale"}
9110: 0a 0a 20 20 20 20 23 20 54 68 65 20 72 65 73 75  ..    # The resu
9120: 6c 74 20 69 73 20 73 79 73 74 65 6d 20 64 65 70  lt is system dep
9130: 65 6e 64 65 6e 74 0a 20 20 20 20 23 20 53 6f 20  endent.    # So 
9140: 6a 75 73 74 20 74 65 73 74 20 69 66 20 69 74 20  just test if it 
9150: 72 75 6e 73 0a 20 20 20 20 23 20 54 68 65 20 65  runs.    # The e
9160: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
9170: 62 6c 65 20 76 65 72 73 69 6f 6e 20 77 61 73 20  ble version was 
9180: 74 65 73 74 20 77 69 74 68 20 74 65 73 74 20 30  test with test 0
9190: 2e 78 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  .x.    test msgc
91a0: 61 74 2d 31 38 2e 37 20 7b 6d 63 75 74 69 6c 20  at-18.7 {mcutil 
91b0: 67 65 74 73 79 73 74 65 6d 6c 6f 63 61 6c 65 7d  getsystemlocale}
91c0: 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 75 74 69 6c   -body {..mcutil
91d0: 20 67 65 74 73 79 73 74 65 6d 6c 6f 63 61 6c 65   getsystemlocale
91e0: 0a 09 73 65 74 20 6f 6b 20 6f 6b 0a 20 20 20 20  ..set ok ok.    
91f0: 7d 20 2d 72 65 73 75 6c 74 20 7b 6f 6b 7d 0a 0a  } -result {ok}..
9200: 0a 20 20 20 20 63 6c 65 61 6e 75 70 54 65 73 74  .    cleanupTest
9210: 73 0a 7d 0a 6e 61 6d 65 73 70 61 63 65 20 64 65  s.}.namespace de
9220: 6c 65 74 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 74  lete ::msgcat::t
9230: 65 73 74 0a 72 65 74 75 72 6e 0a 0a 23 20 4c 6f  est.return..# Lo
9240: 63 61 6c 20 56 61 72 69 61 62 6c 65 73 3a 0a 23  cal Variables:.#
9250: 20 6d 6f 64 65 3a 20 74 63 6c 0a 23 20 45 6e 64   mode: tcl.# End
9260: 3a 0a                                            :.