Tcl Source Code

Hex Artifact Content
Login

Artifact f0ee1869d464daa40ab6abec046d799bdaa327d249e3c812ca9872046cb3c3be:


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 09 09 73 65 74 20 72 65 73  le]} {...set res
0760: 75 6c 74 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f  ult [string tolo
0770: 77 65 72 20 5c 0a 09 09 09 5b 6d 73 67 63 61 74  wer \....[msgcat
0780: 3a 3a 6d 63 75 74 69 6c 3a 3a 43 6f 6e 76 65 72  ::mcutil::Conver
0790: 74 4c 6f 63 61 6c 65 20 24 3a 3a 74 63 6c 3a 3a  tLocale $::tcl::
07a0: 6d 61 63 3a 3a 6c 6f 63 61 6c 65 5d 5d 0a 09 20  mac::locale]].. 
07b0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66     } else {...if
07c0: 20 7b 28 5b 69 6e 66 6f 20 73 68 61 72 65 64 6c   {([info sharedl
07d0: 69 62 65 78 74 65 6e 73 69 6f 6e 5d 20 65 71 20  ibextension] eq 
07e0: 22 2e 64 6c 6c 22 29 0a 09 09 09 26 26 20 21 5b  ".dll")....&& ![
07f0: 63 61 74 63 68 20 7b 70 61 63 6b 61 67 65 20 72  catch {package r
0800: 65 71 75 69 72 65 20 72 65 67 69 73 74 72 79 7d  equire registry}
0810: 5d 7d 20 7b 0a 09 09 20 20 20 20 23 20 57 69 6e  ]} {...    # Win
0820: 64 6f 77 73 20 61 6e 64 20 43 79 67 77 69 6e 20  dows and Cygwin 
0830: 68 61 76 65 20 6f 74 68 65 72 20 77 61 79 73 20  have other ways 
0840: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
0850: 0a 09 09 20 20 20 20 23 20 6c 6f 63 61 6c 65 20  ...    # locale 
0860: 77 68 65 6e 20 74 68 65 20 65 6e 76 69 72 6f 6e  when the environ
0870: 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 61  ment variables a
0880: 72 65 20 6d 69 73 73 69 6e 67 0a 09 09 20 20 20  re missing...   
0890: 20 23 20 61 6e 64 20 74 68 65 20 72 65 67 69 73   # and the regis
08a0: 74 72 79 20 70 61 63 6b 61 67 65 20 69 73 20 70  try package is p
08b0: 72 65 73 65 6e 74 0a 09 09 20 20 20 20 63 6f 6e  resent...    con
08c0: 74 69 6e 75 65 0a 09 09 7d 0a 09 09 73 65 74 20  tinue...}...set 
08d0: 72 65 73 75 6c 74 20 63 0a 09 20 20 20 20 7d 0a  result c..    }.
08e0: 09 7d 0a 0c 0a 09 74 65 73 74 20 6d 73 67 63 61  .}....test msgca
08f0: 74 2d 30 2e 24 63 6f 75 6e 74 20 5b 6c 69 73 74  t-0.$count [list
0900: 20 5c 0a 09 20 20 20 20 6c 6f 63 61 6c 65 20 69   \..    locale i
0910: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66 72  nitialization fr
0920: 6f 6d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  om environment v
0930: 61 72 69 61 62 6c 65 73 20 24 73 65 74 56 61 72  ariables $setVar
0940: 73 20 5c 0a 09 5d 20 2d 73 65 74 75 70 20 7b 0a  s \..] -setup {.
0950: 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 76 61  .    variable va
0960: 72 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 76  r..    foreach v
0970: 61 72 20 24 65 6e 76 56 61 72 73 20 7b 0a 09 09  ar $envVars {...
0980: 63 61 74 63 68 20 7b 76 61 72 69 61 62 6c 65 20  catch {variable 
0990: 24 76 61 72 20 24 3a 3a 65 6e 76 28 24 76 61 72  $var $::env($var
09a0: 29 7d 0a 09 09 75 6e 73 65 74 20 2d 6e 6f 63 6f  )}...unset -noco
09b0: 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 76 61  mplain ::env($va
09c0: 72 29 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 66  r)..    }..    f
09d0: 6f 72 65 61 63 68 20 76 61 72 20 24 73 65 74 56  oreach var $setV
09e0: 61 72 73 20 7b 0a 09 09 73 65 74 20 3a 3a 65 6e  ars {...set ::en
09f0: 76 28 24 76 61 72 29 20 24 76 61 72 0a 09 20 20  v($var) $var..  
0a00: 20 20 7d 0a 09 20 20 20 20 69 6e 74 65 72 70 20    }..    interp 
0a10: 63 72 65 61 74 65 20 5b 6e 61 6d 65 73 70 61 63  create [namespac
0a20: 65 20 63 75 72 72 65 6e 74 5d 3a 3a 69 0a 09 20  e current]::i.. 
0a30: 20 20 20 69 20 65 76 61 6c 20 5b 6c 69 73 74 20     i eval [list 
0a40: 70 61 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64  package ifneeded
0a50: 20 6d 73 67 63 61 74 20 5b 70 61 63 6b 61 67 65   msgcat [package
0a60: 20 70 72 6f 76 69 64 65 20 6d 73 67 63 61 74 5d   provide msgcat]
0a70: 20 5c 0a 09 09 20 20 20 20 5b 70 61 63 6b 61 67   \...    [packag
0a80: 65 20 69 66 6e 65 65 64 65 64 20 6d 73 67 63 61  e ifneeded msgca
0a90: 74 20 5b 70 61 63 6b 61 67 65 20 70 72 6f 76 69  t [package provi
0aa0: 64 65 20 6d 73 67 63 61 74 5d 5d 5d 0a 09 20 20  de msgcat]]]..  
0ab0: 20 20 69 20 65 76 61 6c 20 70 61 63 6b 61 67 65    i eval package
0ac0: 20 72 65 71 75 69 72 65 20 6d 73 67 63 61 74 0a   require msgcat.
0ad0: 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20  .} -cleanup {.. 
0ae0: 20 20 20 69 6e 74 65 72 70 20 64 65 6c 65 74 65     interp delete
0af0: 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 75 72 72   [namespace curr
0b00: 65 6e 74 5d 3a 3a 69 0a 09 20 20 20 20 66 6f 72  ent]::i..    for
0b10: 65 61 63 68 20 76 61 72 20 24 65 6e 76 56 61 72  each var $envVar
0b20: 73 20 7b 0a 09 09 75 6e 73 65 74 20 2d 6e 6f 63  s {...unset -noc
0b30: 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 76  omplain ::env($v
0b40: 61 72 29 0a 09 09 63 61 74 63 68 20 7b 73 65 74  ar)...catch {set
0b50: 20 3a 3a 65 6e 76 28 24 76 61 72 29 20 5b 73 65   ::env($var) [se
0b60: 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 75 72  t [namespace cur
0b70: 72 65 6e 74 5d 3a 3a 24 76 61 72 5d 7d 0a 09 20  rent]::$var]}.. 
0b80: 20 20 20 7d 0a 09 7d 20 2d 62 6f 64 79 20 7b 69     }..} -body {i
0b90: 20 65 76 61 6c 20 6d 73 67 63 61 74 3a 3a 6d 63   eval msgcat::mc
0ba0: 6c 6f 63 61 6c 65 7d 20 2d 72 65 73 75 6c 74 20  locale} -result 
0bb0: 24 72 65 73 75 6c 74 0a 09 69 6e 63 72 20 63 6f  $result..incr co
0bc0: 75 6e 74 0a 20 20 20 20 7d 0a 20 20 20 20 75 6e  unt.    }.    un
0bd0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
0be0: 72 65 73 75 6c 74 0a 0a 20 20 20 20 23 20 43 6f  result..    # Co
0bf0: 75 6c 64 20 61 64 64 20 74 65 73 74 73 20 6f 66  uld add tests of
0c00: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
0c10: 66 72 6f 6d 20 57 69 6e 64 6f 77 73 20 72 65 67  from Windows reg
0c20: 69 73 74 72 79 20 68 65 72 65 2e 0a 20 20 20 20  istry here..    
0c30: 23 20 55 73 65 20 61 20 66 61 6b 65 20 72 65 67  # Use a fake reg
0c40: 69 73 74 72 79 20 70 61 63 6b 61 67 65 2e 0a 0a  istry package...
0c50: 20 20 20 20 23 20 54 65 73 74 73 20 6d 73 67 63      # Tests msgc
0c60: 61 74 2d 31 2e 2a 3a 20 5b 6d 63 6c 6f 63 61 6c  at-1.*: [mclocal
0c70: 65 5d 2c 20 5b 6d 63 70 72 65 66 65 72 65 6e 63  e], [mcpreferenc
0c80: 65 73 5d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73  es]..    test ms
0c90: 67 63 61 74 2d 31 2e 33 20 7b 6d 63 6c 6f 63 61  gcat-1.3 {mcloca
0ca0: 6c 65 20 73 65 74 2c 20 73 69 6e 67 6c 65 20 65  le set, single e
0cb0: 6c 65 6d 65 6e 74 7d 20 2d 73 65 74 75 70 20 7b  lement} -setup {
0cc0: 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c  ..variable local
0cd0: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 20 20 20  e [mclocale].   
0ce0: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
0cf0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
0d00: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d      } -body {..m
0d10: 63 6c 6f 63 61 6c 65 20 65 6e 0a 20 20 20 20 7d  clocale en.    }
0d20: 20 2d 72 65 73 75 6c 74 20 65 6e 0a 0a 20 20 20   -result en..   
0d30: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 2e 34   test msgcat-1.4
0d40: 20 7b 6d 63 6c 6f 63 61 6c 65 20 67 65 74 2c 20   {mclocale get, 
0d50: 73 69 6e 67 6c 65 20 65 6c 65 6d 65 6e 74 7d 20  single element} 
0d60: 2d 73 65 74 75 70 20 7b 0a 09 76 61 72 69 61 62  -setup {..variab
0d70: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
0d80: 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 65  ale]..mclocale e
0d90: 6e 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70  n.    } -cleanup
0da0: 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f   {..mclocale $lo
0db0: 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79  cale.    } -body
0dc0: 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 0a 20 20 20   {..mclocale.   
0dd0: 20 7d 20 2d 72 65 73 75 6c 74 20 65 6e 0a 0a 20   } -result en.. 
0de0: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31     test msgcat-1
0df0: 2e 35 20 7b 6d 63 70 72 65 66 65 72 65 6e 63 65  .5 {mcpreference
0e00: 73 2c 20 73 69 6e 67 6c 65 20 65 6c 65 6d 65 6e  s, single elemen
0e10: 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 76 61 72  t} -setup {..var
0e20: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
0e30: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c  locale]..mclocal
0e40: 65 20 65 6e 0a 20 20 20 20 7d 20 2d 63 6c 65 61  e en.    } -clea
0e50: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
0e60: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
0e70: 6f 64 79 20 7b 0a 09 6d 63 70 72 65 66 65 72 65  ody {..mcprefere
0e80: 6e 63 65 73 0a 20 20 20 20 7d 20 2d 72 65 73 75  nces.    } -resu
0e90: 6c 74 20 7b 65 6e 20 7b 7d 7d 0a 0a 20 20 20 20  lt {en {}}..    
0ea0: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 2e 36 20  test msgcat-1.6 
0eb0: 7b 6d 63 6c 6f 63 61 6c 65 20 73 65 74 2c 20 74  {mclocale set, t
0ec0: 77 6f 20 65 6c 65 6d 65 6e 74 73 7d 20 2d 73 65  wo elements} -se
0ed0: 74 75 70 20 7b 0a 09 76 61 72 69 61 62 6c 65 20  tup {..variable 
0ee0: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
0ef0: 5d 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70  ].    } -cleanup
0f00: 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f   {..mclocale $lo
0f10: 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79  cale.    } -body
0f20: 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 65 6e 5f   {..mclocale en_
0f30: 55 53 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74  US.    } -result
0f40: 20 65 6e 5f 75 73 0a 0a 20 20 20 20 74 65 73 74   en_us..    test
0f50: 20 6d 73 67 63 61 74 2d 31 2e 37 20 7b 6d 63 6c   msgcat-1.7 {mcl
0f60: 6f 63 61 6c 65 20 67 65 74 2c 20 74 77 6f 20 65  ocale get, two e
0f70: 6c 65 6d 65 6e 74 73 7d 20 2d 73 65 74 75 70 20  lements} -setup 
0f80: 7b 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61  {..variable loca
0f90: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d  le [mclocale]..m
0fa0: 63 6c 6f 63 61 6c 65 20 65 6e 5f 55 53 0a 20 20  clocale en_US.  
0fb0: 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09    } -cleanup {..
0fc0: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
0fd0: 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09  .    } -body {..
0fe0: 6d 63 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d  mclocale.    } -
0ff0: 72 65 73 75 6c 74 20 65 6e 5f 75 73 0a 0a 20 20  result en_us..  
1000: 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 2e    test msgcat-1.
1010: 38 20 7b 6d 63 70 72 65 66 65 72 65 6e 63 65 73  8 {mcpreferences
1020: 2c 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 7d 20  , two elements} 
1030: 2d 73 65 74 75 70 20 7b 0a 09 76 61 72 69 61 62  -setup {..variab
1040: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
1050: 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 65  ale]..mclocale e
1060: 6e 5f 55 53 0a 20 20 20 20 7d 20 2d 63 6c 65 61  n_US.    } -clea
1070: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
1080: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
1090: 6f 64 79 20 7b 0a 09 6d 63 70 72 65 66 65 72 65  ody {..mcprefere
10a0: 6e 63 65 73 0a 20 20 20 20 7d 20 2d 72 65 73 75  nces.    } -resu
10b0: 6c 74 20 7b 65 6e 5f 75 73 20 65 6e 20 7b 7d 7d  lt {en_us en {}}
10c0: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
10d0: 74 2d 31 2e 39 20 7b 6d 63 6c 6f 63 61 6c 65 20  t-1.9 {mclocale 
10e0: 73 65 74 2c 20 74 68 72 65 65 20 65 6c 65 6d 65  set, three eleme
10f0: 6e 74 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09 76  nts} -setup {..v
1100: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
1110: 6d 63 6c 6f 63 61 6c 65 5d 0a 20 20 20 20 7d 20  mclocale].    } 
1120: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f  -cleanup {..mclo
1130: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20  cale $locale.   
1140: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 6c 6f   } -body {..mclo
1150: 63 61 6c 65 20 65 6e 5f 55 53 5f 66 75 6e 6b 79  cale en_US_funky
1160: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 65  .    } -result e
1170: 6e 5f 75 73 5f 66 75 6e 6b 79 0a 0a 20 20 20 20  n_us_funky..    
1180: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 2e 31 30  test msgcat-1.10
1190: 20 7b 6d 63 6c 6f 63 61 6c 65 20 67 65 74 2c 20   {mclocale get, 
11a0: 74 68 72 65 65 20 65 6c 65 6d 65 6e 74 73 7d 20  three elements} 
11b0: 2d 73 65 74 75 70 20 7b 0a 09 76 61 72 69 61 62  -setup {..variab
11c0: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
11d0: 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 65  ale]..mclocale e
11e0: 6e 5f 55 53 5f 66 75 6e 6b 79 0a 20 20 20 20 7d  n_US_funky.    }
11f0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c   -cleanup {..mcl
1200: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20  ocale $locale.  
1210: 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 6c    } -body {..mcl
1220: 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 72 65 73  ocale.    } -res
1230: 75 6c 74 20 65 6e 5f 75 73 5f 66 75 6e 6b 79 0a  ult en_us_funky.
1240: 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74  .    test msgcat
1250: 2d 31 2e 31 31 20 7b 6d 63 70 72 65 66 65 72 65  -1.11 {mcprefere
1260: 6e 63 65 73 2c 20 74 68 72 65 65 20 65 6c 65 6d  nces, three elem
1270: 65 6e 74 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09  ents} -setup {..
1280: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
1290: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f  [mclocale]..mclo
12a0: 63 61 6c 65 20 65 6e 5f 55 53 5f 66 75 6e 6b 79  cale en_US_funky
12b0: 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20  .    } -cleanup 
12c0: 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63  {..mclocale $loc
12d0: 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20  ale.    } -body 
12e0: 7b 0a 09 6d 63 70 72 65 66 65 72 65 6e 63 65 73  {..mcpreferences
12f0: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b  .    } -result {
1300: 65 6e 5f 75 73 5f 66 75 6e 6b 79 20 65 6e 5f 75  en_us_funky en_u
1310: 73 20 65 6e 20 7b 7d 7d 0a 0a 20 20 20 20 74 65  s en {}}..    te
1320: 73 74 20 6d 73 67 63 61 74 2d 31 2e 31 32 20 7b  st msgcat-1.12 {
1330: 6d 63 6c 6f 63 61 6c 65 20 73 65 74 2c 20 72 65  mclocale set, re
1340: 6a 65 63 74 20 65 76 69 6c 20 69 6e 70 75 74 7d  ject evil input}
1350: 20 2d 73 65 74 75 70 20 7b 0a 09 76 61 72 69 61   -setup {..varia
1360: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
1370: 63 61 6c 65 5d 0a 20 20 20 20 7d 20 2d 63 6c 65  cale].    } -cle
1380: 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65  anup {..mclocale
1390: 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d   $locale.    } -
13a0: 62 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65  body {..mclocale
13b0: 20 2f 70 61 74 68 2f 74 6f 2f 65 76 69 6c 2f 63   /path/to/evil/c
13c0: 6f 64 65 0a 20 20 20 20 7d 20 2d 72 65 74 75 72  ode.    } -retur
13d0: 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 6d 61  nCodes error -ma
13e0: 74 63 68 20 67 6c 6f 62 20 2d 72 65 73 75 6c 74  tch glob -result
13f0: 20 7b 6c 6f 63 61 6c 65 20 22 2a 22 20 6e 6f 74   {locale "*" not
1400: 20 76 61 6c 69 64 7d 20 2d 65 72 72 6f 72 43 6f   valid} -errorCo
1410: 64 65 20 7b 4d 53 47 43 41 54 20 62 61 64 4c 6f  de {MSGCAT badLo
1420: 63 61 6c 65 20 2a 7d 0a 0a 20 20 20 20 74 65 73  cale *}..    tes
1430: 74 20 6d 73 67 63 61 74 2d 31 2e 31 33 20 7b 6d  t msgcat-1.13 {m
1440: 63 6c 6f 63 61 6c 65 20 73 65 74 2c 20 72 65 6a  clocale set, rej
1450: 65 63 74 20 65 76 69 6c 20 69 6e 70 75 74 7d 20  ect evil input} 
1460: 2d 73 65 74 75 70 20 7b 0a 09 76 61 72 69 61 62  -setup {..variab
1470: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
1480: 61 6c 65 5d 0a 20 20 20 20 7d 20 2d 63 6c 65 61  ale].    } -clea
1490: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
14a0: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
14b0: 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  ody {..mclocale 
14c0: 6c 6f 6f 6b 73 2f 6f 6b 2f 2e 2e 2f 2e 2e 2f 2e  looks/ok/../../.
14d0: 2e 2f 2e 2e 2f 62 75 74 2f 69 73 2f 70 61 74 68  ./../but/is/path
14e0: 2f 74 6f 2f 65 76 69 6c 2f 63 6f 64 65 0a 20 20  /to/evil/code.  
14f0: 20 20 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73    } -returnCodes
1500: 20 65 72 72 6f 72 20 2d 6d 61 74 63 68 20 67 6c   error -match gl
1510: 6f 62 20 2d 72 65 73 75 6c 74 20 7b 6c 6f 63 61  ob -result {loca
1520: 6c 65 20 22 2a 22 20 6e 6f 74 20 76 61 6c 69 64  le "*" not valid
1530: 7d 20 2d 65 72 72 6f 72 43 6f 64 65 20 7b 4d 53  } -errorCode {MS
1540: 47 43 41 54 20 62 61 64 4c 6f 63 61 6c 65 20 2a  GCAT badLocale *
1550: 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  }..    test msgc
1560: 61 74 2d 31 2e 31 34 20 7b 6d 63 70 72 65 66 65  at-1.14 {mcprefe
1570: 72 65 6e 63 65 73 2c 20 63 75 73 74 6f 6d 20 6c  rences, custom l
1580: 6f 63 61 6c 65 20 70 72 65 66 65 72 65 6e 63 65  ocale preference
1590: 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09 76 61 72  s} -setup {..var
15a0: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
15b0: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c  locale]..mclocal
15c0: 65 20 65 6e 0a 09 6d 63 70 72 65 66 65 72 65 6e  e en..mcpreferen
15d0: 63 65 73 20 66 72 20 65 6e 20 7b 7d 0a 20 20 20  ces fr en {}.   
15e0: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
15f0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
1600: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d      } -body {..m
1610: 63 70 72 65 66 65 72 65 6e 63 65 73 0a 20 20 20  cpreferences.   
1620: 20 7d 20 2d 72 65 73 75 6c 74 20 7b 66 72 20 65   } -result {fr e
1630: 6e 20 7b 7d 7d 0a 0a 20 20 20 20 74 65 73 74 20  n {}}..    test 
1640: 6d 73 67 63 61 74 2d 31 2e 31 35 20 7b 6d 63 70  msgcat-1.15 {mcp
1650: 72 65 66 65 72 65 6e 63 65 73 2c 20 6f 76 65 72  references, over
1660: 77 72 69 74 65 20 63 75 73 74 6f 6d 20 6c 6f 63  write custom loc
1670: 61 6c 65 20 70 72 65 66 65 72 65 6e 63 65 73 7d  ale preferences}
1680: 5c 0a 20 20 20 20 2d 73 65 74 75 70 20 7b 0a 09  \.    -setup {..
1690: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
16a0: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 70 72  [mclocale]..mcpr
16b0: 65 66 65 72 65 6e 63 65 73 20 66 72 20 65 6e 20  eferences fr en 
16c0: 7b 7d 0a 09 6d 63 6c 6f 63 61 6c 65 20 65 6e 0a  {}..mclocale en.
16d0: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
16e0: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
16f0: 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  le.    } -body {
1700: 0a 09 6d 63 70 72 65 66 65 72 65 6e 63 65 73 0a  ..mcpreferences.
1710: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 65      } -result {e
1720: 6e 20 7b 7d 7d 0a 0a 0a 20 20 20 20 23 20 54 65  n {}}...    # Te
1730: 73 74 73 20 6d 73 67 63 61 74 2d 32 2e 2a 3a 20  sts msgcat-2.*: 
1740: 5b 6d 63 73 65 74 5d 2c 20 5b 6d 63 6d 73 65 74  [mcset], [mcmset
1750: 5d 2c 20 6e 61 6d 65 73 70 61 63 65 20 70 61 72  ], namespace par
1760: 74 69 74 69 6f 6e 69 6e 67 0a 0a 20 20 20 20 74  titioning..    t
1770: 65 73 74 20 6d 73 67 63 61 74 2d 32 2e 31 20 7b  est msgcat-2.1 {
1780: 6d 63 73 65 74 2c 20 67 6c 6f 62 61 6c 20 73 63  mcset, global sc
1790: 6f 70 65 7d 20 7b 0a 09 6e 61 6d 65 73 70 61 63  ope} {..namespac
17a0: 65 20 65 76 61 6c 20 3a 3a 20 3a 3a 6d 73 67 63  e eval :: ::msgc
17b0: 61 74 3a 3a 6d 63 73 65 74 20 20 66 6f 6f 5f 42  at::mcset  foo_B
17c0: 41 52 20 74 65 78 74 31 20 74 65 78 74 32 0a 20  AR text1 text2. 
17d0: 20 20 20 7d 20 7b 74 65 78 74 32 7d 0a 0a 20 20     } {text2}..  
17e0: 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 32 2e    test msgcat-2.
17f0: 32 20 7b 6d 63 73 65 74 2c 20 67 6c 6f 62 61 6c  2 {mcset, global
1800: 20 73 63 6f 70 65 2c 20 64 65 66 61 75 6c 74 7d   scope, default}
1810: 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76   {..namespace ev
1820: 61 6c 20 3a 3a 20 3a 3a 6d 73 67 63 61 74 3a 3a  al :: ::msgcat::
1830: 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 20 74 65  mcset foo_BAR te
1840: 78 74 33 0a 20 20 20 20 7d 20 7b 74 65 78 74 33  xt3.    } {text3
1850: 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  }..    test msgc
1860: 61 74 2d 32 2e 32 2e 31 20 7b 6d 63 73 65 74 2c  at-2.2.1 {mcset,
1870: 20 6e 61 6d 65 73 70 61 63 65 20 6f 76 65 72 6c   namespace overl
1880: 61 70 7d 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65  ap} {..namespace
1890: 20 65 76 61 6c 20 62 61 7a 20 7b 3a 3a 6d 73 67   eval baz {::msg
18a0: 63 61 74 3a 3a 6d 63 73 65 74 20 20 66 6f 6f 5f  cat::mcset  foo_
18b0: 42 41 52 20 63 6f 6e 31 20 63 6f 6e 31 62 61 7a  BAR con1 con1baz
18c0: 7d 0a 20 20 20 20 7d 20 7b 63 6f 6e 31 62 61 7a  }.    } {con1baz
18d0: 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  }..    test msgc
18e0: 61 74 2d 32 2e 33 20 7b 6d 63 73 65 74 2c 20 6e  at-2.3 {mcset, n
18f0: 61 6d 65 73 70 61 63 65 20 6f 76 65 72 6c 61 70  amespace overlap
1900: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65  } -setup {..name
1910: 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b  space eval bar {
1920: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20  ::msgcat::mcset 
1930: 20 66 6f 6f 5f 42 41 52 20 63 6f 6e 31 20 63 6f   foo_BAR con1 co
1940: 6e 31 62 61 72 7d 0a 09 6e 61 6d 65 73 70 61 63  n1bar}..namespac
1950: 65 20 65 76 61 6c 20 62 61 7a 20 7b 3a 3a 6d 73  e eval baz {::ms
1960: 67 63 61 74 3a 3a 6d 63 73 65 74 20 20 66 6f 6f  gcat::mcset  foo
1970: 5f 42 41 52 20 63 6f 6e 31 20 63 6f 6e 31 62 61  _BAR con1 con1ba
1980: 7a 7d 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63  z}..variable loc
1990: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
19a0: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52  mclocale foo_BAR
19b0: 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20  .    } -cleanup 
19c0: 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63  {..mclocale $loc
19d0: 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20  ale.    } -body 
19e0: 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61  {..namespace eva
19f0: 6c 20 62 61 72 20 7b 3a 3a 6d 73 67 63 61 74 3a  l bar {::msgcat:
1a00: 3a 6d 63 20 63 6f 6e 31 7d 0a 20 20 20 20 7d 20  :mc con1}.    } 
1a10: 2d 72 65 73 75 6c 74 20 63 6f 6e 31 62 61 72 0a  -result con1bar.
1a20: 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74  .    test msgcat
1a30: 2d 32 2e 34 20 7b 6d 63 73 65 74 2c 20 6e 61 6d  -2.4 {mcset, nam
1a40: 65 73 70 61 63 65 20 6f 76 65 72 6c 61 70 7d 20  espace overlap} 
1a50: 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70  -setup {..namesp
1a60: 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a  ace eval bar {::
1a70: 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 20 66  msgcat::mcset  f
1a80: 6f 6f 5f 42 41 52 20 63 6f 6e 31 20 63 6f 6e 31  oo_BAR con1 con1
1a90: 62 61 72 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20  bar}..namespace 
1aa0: 65 76 61 6c 20 62 61 7a 20 7b 3a 3a 6d 73 67 63  eval baz {::msgc
1ab0: 61 74 3a 3a 6d 63 73 65 74 20 20 66 6f 6f 5f 42  at::mcset  foo_B
1ac0: 41 52 20 63 6f 6e 31 20 63 6f 6e 31 62 61 7a 7d  AR con1 con1baz}
1ad0: 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c  ..variable local
1ae0: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63  e [mclocale]..mc
1af0: 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52 0a 20  locale foo_BAR. 
1b00: 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a     } -cleanup {.
1b10: 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c  .mclocale $local
1b20: 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a  e.    } -body {.
1b30: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
1b40: 62 61 7a 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d  baz {::msgcat::m
1b50: 63 20 63 6f 6e 31 7d 0a 20 20 20 20 7d 20 2d 72  c con1}.    } -r
1b60: 65 73 75 6c 74 20 63 6f 6e 31 62 61 7a 0a 0a 20  esult con1baz.. 
1b70: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 32     test msgcat-2
1b80: 2e 35 20 7b 6d 63 6d 73 65 74 2c 20 67 6c 6f 62  .5 {mcmset, glob
1b90: 61 6c 20 73 63 6f 70 65 7d 20 2d 73 65 74 75 70  al scope} -setup
1ba0: 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76   {..namespace ev
1bb0: 61 6c 20 3a 3a 20 7b 0a 09 20 20 20 20 3a 3a 6d  al :: {..    ::m
1bc0: 73 67 63 61 74 3a 3a 6d 63 6d 73 65 74 20 20 66  sgcat::mcmset  f
1bd0: 6f 6f 5f 42 41 52 20 7b 0a 09 09 73 72 63 31 20  oo_BAR {...src1 
1be0: 74 72 61 6e 73 31 0a 09 09 73 72 63 32 20 74 72  trans1...src2 tr
1bf0: 61 6e 73 32 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  ans2..    }..}..
1c00: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
1c10: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f  [mclocale]..mclo
1c20: 63 61 6c 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20  cale foo_BAR.   
1c30: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
1c40: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
1c50: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6e      } -body {..n
1c60: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a  amespace eval ::
1c70: 20 7b 0a 09 20 20 20 20 3a 3a 6d 73 67 63 61 74   {..    ::msgcat
1c80: 3a 3a 6d 63 20 73 72 63 31 0a 09 7d 0a 20 20 20  ::mc src1..}.   
1c90: 20 7d 20 2d 72 65 73 75 6c 74 20 74 72 61 6e 73   } -result trans
1ca0: 31 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  1..    test msgc
1cb0: 61 74 2d 32 2e 36 20 7b 6d 63 6d 73 65 74 2c 20  at-2.6 {mcmset, 
1cc0: 6e 61 6d 65 73 70 61 63 65 20 6f 76 65 72 6c 61  namespace overla
1cd0: 70 7d 20 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d  p} -setup {..nam
1ce0: 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20  espace eval bar 
1cf0: 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 6d 73 65  {::msgcat::mcmse
1d00: 74 20 20 66 6f 6f 5f 42 41 52 20 7b 63 6f 6e 32  t  foo_BAR {con2
1d10: 20 63 6f 6e 32 62 61 72 7d 7d 0a 09 6e 61 6d 65   con2bar}}..name
1d20: 73 70 61 63 65 20 65 76 61 6c 20 62 61 7a 20 7b  space eval baz {
1d30: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 6d 73 65 74  ::msgcat::mcmset
1d40: 20 20 66 6f 6f 5f 42 41 52 20 7b 63 6f 6e 32 20    foo_BAR {con2 
1d50: 63 6f 6e 32 62 61 7a 7d 7d 0a 09 76 61 72 69 61  con2baz}}..varia
1d60: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
1d70: 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20  cale]..mclocale 
1d80: 66 6f 6f 5f 42 41 52 0a 20 20 20 20 7d 20 2d 63  foo_BAR.    } -c
1d90: 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61  leanup {..mcloca
1da0: 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d  le $locale.    }
1db0: 20 2d 62 6f 64 79 20 7b 0a 09 6e 61 6d 65 73 70   -body {..namesp
1dc0: 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a  ace eval bar {::
1dd0: 6d 73 67 63 61 74 3a 3a 6d 63 20 63 6f 6e 32 7d  msgcat::mc con2}
1de0: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 63  .    } -result c
1df0: 6f 6e 32 62 61 72 0a 0a 20 20 20 20 74 65 73 74  on2bar..    test
1e00: 20 6d 73 67 63 61 74 2d 32 2e 37 20 7b 6d 63 6d   msgcat-2.7 {mcm
1e10: 73 65 74 2c 20 6e 61 6d 65 73 70 61 63 65 20 6f  set, namespace o
1e20: 76 65 72 6c 61 70 7d 20 2d 73 65 74 75 70 20 7b  verlap} -setup {
1e30: 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
1e40: 20 62 61 72 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a   bar {::msgcat::
1e50: 6d 63 6d 73 65 74 20 20 66 6f 6f 5f 42 41 52 20  mcmset  foo_BAR 
1e60: 7b 63 6f 6e 32 20 63 6f 6e 32 62 61 72 7d 7d 0a  {con2 con2bar}}.
1e70: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
1e80: 62 61 7a 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d  baz {::msgcat::m
1e90: 63 6d 73 65 74 20 20 66 6f 6f 5f 42 41 52 20 7b  cmset  foo_BAR {
1ea0: 63 6f 6e 32 20 63 6f 6e 32 62 61 7a 7d 7d 0a 09  con2 con2baz}}..
1eb0: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
1ec0: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f  [mclocale]..mclo
1ed0: 63 61 6c 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20  cale foo_BAR.   
1ee0: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
1ef0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
1f00: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6e      } -body {..n
1f10: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61  amespace eval ba
1f20: 7a 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 20  z {::msgcat::mc 
1f30: 63 6f 6e 32 7d 0a 20 20 20 20 7d 20 2d 72 65 73  con2}.    } -res
1f40: 75 6c 74 20 63 6f 6e 32 62 61 7a 0a 0a 20 20 20  ult con2baz..   
1f50: 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d   # Tests msgcat-
1f60: 33 2e 2a 3a 20 5b 6d 63 73 65 74 5d 2c 20 5b 6d  3.*: [mcset], [m
1f70: 63 5d 2c 20 63 61 74 61 6c 6f 67 20 22 69 6e 68  c], catalog "inh
1f80: 65 72 69 74 61 6e 63 65 22 0a 20 20 20 20 23 0a  eritance".    #.
1f90: 20 20 20 20 23 20 54 65 73 74 20 6d 63 73 65 74      # Test mcset
1fa0: 20 61 6e 64 20 6d 63 2c 20 65 6e 73 75 72 69 6e   and mc, ensurin
1fb0: 67 20 74 68 61 74 20 6d 6f 72 65 20 73 70 65 63  g that more spec
1fc0: 69 66 69 63 20 6c 6f 63 61 6c 65 73 0a 20 20 20  ific locales.   
1fd0: 20 23 20 28 65 2e 67 2e 20 65 6e 5f 55 4b 29 20   # (e.g. en_UK) 
1fe0: 77 69 6c 6c 20 73 65 61 72 63 68 20 6c 65 73 73  will search less
1ff0: 20 73 70 65 63 69 66 69 63 20 6c 6f 63 61 6c 65   specific locale
2000: 73 0a 20 20 20 20 23 20 28 65 2e 67 2e 20 65 6e  s.    # (e.g. en
2010: 29 20 66 6f 72 20 74 72 61 6e 73 6c 61 74 69 6f  ) for translatio
2020: 6e 20 73 74 72 69 6e 67 73 2e 0a 20 20 20 20 23  n strings..    #
2030: 0a 20 20 20 20 23 20 44 6f 20 74 68 69 73 20 66  .    # Do this f
2040: 6f 72 20 74 68 65 20 31 35 20 70 65 72 6d 75 74  or the 15 permut
2050: 61 74 69 6f 6e 73 20 6f 66 0a 20 20 20 20 23 20  ations of.    # 
2060: 20 20 20 20 6c 6f 63 61 6c 65 73 3a 20 7b 66 6f      locales: {fo
2070: 6f 20 66 6f 6f 5f 42 41 52 20 66 6f 6f 5f 42 41  o foo_BAR foo_BA
2080: 52 5f 62 61 7a 7d 0a 20 20 20 20 23 20 20 20 20  R_baz}.    #    
2090: 20 73 74 72 69 6e 67 73 3a 20 7b 6f 76 30 20 6f   strings: {ov0 o
20a0: 76 31 20 6f 76 32 20 6f 76 33 20 6f 76 34 7d 0a  v1 ov2 ov3 ov4}.
20b0: 20 20 20 20 23 09 20 20 6c 6f 63 61 6c 65 20 52      #.  locale R
20c0: 4f 4f 54 20 20 20 20 20 20 20 20 64 65 66 69 6e  OOT        defin
20d0: 65 73 20 6f 76 30 2c 20 6f 76 31 2c 20 6f 76 32  es ov0, ov1, ov2
20e0: 2c 20 6f 76 33 0a 20 20 20 20 23 20 20 20 20 20  , ov3.    #     
20f0: 6c 6f 63 61 6c 65 20 66 6f 6f 20 20 20 20 20 20  locale foo      
2100: 20 20 20 64 65 66 69 6e 65 73 20 20 20 20 20 20     defines      
2110: 6f 76 31 2c 20 6f 76 32 2c 20 6f 76 33 0a 20 20  ov1, ov2, ov3.  
2120: 20 20 23 20 20 20 20 20 6c 6f 63 61 6c 65 20 66    #     locale f
2130: 6f 6f 5f 42 41 52 20 20 20 20 20 64 65 66 69 6e  oo_BAR     defin
2140: 65 73 20 20 20 20 20 20 20 20 20 20 20 6f 76 32  es           ov2
2150: 2c 20 6f 76 33 0a 20 20 20 20 23 20 20 20 20 20  , ov3.    #     
2160: 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52 5f 42  locale foo_BAR_B
2170: 41 5a 20 64 65 66 69 6e 65 73 20 20 20 20 20 20  AZ defines      
2180: 20 20 20 20 20 20 20 20 20 20 6f 76 33 0a 20 20            ov3.  
2190: 20 20 23 20 20 20 20 20 28 6f 76 34 20 69 73 20    #     (ov4 is 
21a0: 64 65 66 69 6e 65 64 20 69 6e 20 6e 6f 6e 65 29  defined in none)
21b0: 0a 20 20 20 20 23 20 53 6f 2c 0a 20 20 20 20 23  .    # So,.    #
21c0: 20 20 20 20 20 6f 76 33 20 73 68 6f 75 6c 64 20       ov3 should 
21d0: 62 65 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 66  be resolved in f
21e0: 6f 6f 2c 20 66 6f 6f 5f 42 41 52 2c 20 66 6f 6f  oo, foo_BAR, foo
21f0: 5f 42 41 52 5f 62 61 7a 0a 20 20 20 20 23 20 20  _BAR_baz.    #  
2200: 20 20 20 6f 76 32 20 73 68 6f 75 6c 64 20 62 65     ov2 should be
2210: 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 66 6f 6f   resolved in foo
2220: 2c 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20 23 20  , foo_BAR.    # 
2230: 20 20 20 20 6f 76 32 20 73 68 6f 75 6c 64 20 72      ov2 should r
2240: 65 73 6f 6c 76 65 20 74 6f 20 66 6f 6f 5f 42 41  esolve to foo_BA
2250: 52 20 69 6e 20 66 6f 6f 5f 42 41 52 5f 62 61 7a  R in foo_BAR_baz
2260: 0a 20 20 20 20 23 20 20 20 20 20 6f 76 31 20 73  .    #     ov1 s
2270: 68 6f 75 6c 64 20 62 65 20 72 65 73 6f 6c 76 65  hould be resolve
2280: 64 20 69 6e 20 66 6f 6f 0a 20 20 20 20 23 20 20  d in foo.    #  
2290: 20 20 20 6f 76 31 20 73 68 6f 75 6c 64 20 72 65     ov1 should re
22a0: 73 6f 6c 76 65 20 74 6f 20 66 6f 6f 20 69 6e 20  solve to foo in 
22b0: 66 6f 6f 5f 42 41 52 2c 20 66 6f 6f 5f 42 41 52  foo_BAR, foo_BAR
22c0: 5f 62 61 7a 0a 20 20 20 20 23 20 20 20 20 20 6f  _baz.    #     o
22d0: 76 34 20 73 68 6f 75 6c 64 20 62 65 20 72 65 73  v4 should be res
22e0: 6f 6c 76 65 64 20 69 6e 20 6e 6f 6e 65 2c 20 61  olved in none, a
22f0: 6e 64 20 63 61 6c 6c 20 6d 63 75 6e 6b 6e 6f 77  nd call mcunknow
2300: 6e 0a 20 20 20 20 23 0a 20 20 20 20 76 61 72 69  n.    #.    vari
2310: 61 62 6c 65 20 63 6f 75 6e 74 20 32 0a 20 20 20  able count 2.   
2320: 20 76 61 72 69 61 62 6c 65 20 72 65 73 75 6c 74   variable result
2330: 0a 20 20 20 20 61 72 72 61 79 20 73 65 74 20 72  .    array set r
2340: 65 73 75 6c 74 20 7b 0a 09 66 6f 6f 2c 6f 76 30  esult {..foo,ov0
2350: 20 6f 76 30 5f 52 4f 4f 54 20 66 6f 6f 2c 6f 76   ov0_ROOT foo,ov
2360: 31 20 6f 76 31 5f 66 6f 6f 20 66 6f 6f 2c 6f 76  1 ov1_foo foo,ov
2370: 32 20 6f 76 32 5f 66 6f 6f 0a 09 66 6f 6f 2c 6f  2 ov2_foo..foo,o
2380: 76 33 20 6f 76 33 5f 66 6f 6f 20 66 6f 6f 2c 6f  v3 ov3_foo foo,o
2390: 76 34 20 6f 76 34 0a 09 66 6f 6f 5f 42 41 52 2c  v4 ov4..foo_BAR,
23a0: 6f 76 30 20 6f 76 30 5f 52 4f 4f 54 20 66 6f 6f  ov0 ov0_ROOT foo
23b0: 5f 42 41 52 2c 6f 76 31 20 6f 76 31 5f 66 6f 6f  _BAR,ov1 ov1_foo
23c0: 20 66 6f 6f 5f 42 41 52 2c 6f 76 32 20 6f 76 32   foo_BAR,ov2 ov2
23d0: 5f 66 6f 6f 5f 42 41 52 0a 09 66 6f 6f 5f 42 41  _foo_BAR..foo_BA
23e0: 52 2c 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f 42 41  R,ov3 ov3_foo_BA
23f0: 52 09 66 6f 6f 5f 42 41 52 2c 6f 76 34 20 6f 76  R.foo_BAR,ov4 ov
2400: 34 0a 09 66 6f 6f 5f 42 41 52 5f 62 61 7a 2c 6f  4..foo_BAR_baz,o
2410: 76 30 20 6f 76 30 5f 52 4f 4f 54 20 66 6f 6f 5f  v0 ov0_ROOT foo_
2420: 42 41 52 5f 62 61 7a 2c 6f 76 31 20 6f 76 31 5f  BAR_baz,ov1 ov1_
2430: 66 6f 6f 0a 09 66 6f 6f 5f 42 41 52 5f 62 61 7a  foo..foo_BAR_baz
2440: 2c 6f 76 32 20 6f 76 32 5f 66 6f 6f 5f 42 41 52  ,ov2 ov2_foo_BAR
2450: 0a 09 66 6f 6f 5f 42 41 52 5f 62 61 7a 2c 6f 76  ..foo_BAR_baz,ov
2460: 33 20 6f 76 33 5f 66 6f 6f 5f 42 41 52 5f 62 61  3 ov3_foo_BAR_ba
2470: 7a 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 2c 6f 76  z foo_BAR_baz,ov
2480: 34 20 6f 76 34 0a 20 20 20 20 7d 0a 20 20 20 20  4 ov4.    }.    
2490: 76 61 72 69 61 62 6c 65 20 6c 6f 63 0a 20 20 20  variable loc.   
24a0: 20 76 61 72 69 61 62 6c 65 20 73 74 72 69 6e 67   variable string
24b0: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6c 6f 63  .    foreach loc
24c0: 20 7b 66 6f 6f 20 66 6f 6f 5f 42 41 52 20 66 6f   {foo foo_BAR fo
24d0: 6f 5f 42 41 52 5f 62 61 7a 7d 20 7b 0a 09 66 6f  o_BAR_baz} {..fo
24e0: 72 65 61 63 68 20 73 74 72 69 6e 67 20 7b 6f 76  reach string {ov
24f0: 30 20 6f 76 31 20 6f 76 32 20 6f 76 33 20 6f 76  0 ov1 ov2 ov3 ov
2500: 34 7d 20 7b 0a 09 20 20 20 20 74 65 73 74 20 6d  4} {..    test m
2510: 73 67 63 61 74 2d 33 2e 24 63 6f 75 6e 74 20 7b  sgcat-3.$count {
2520: 6d 63 73 65 74 2c 20 6f 76 65 72 6c 61 70 7d 20  mcset, overlap} 
2530: 2d 73 65 74 75 70 20 7b 0a 09 09 6d 63 73 65 74  -setup {...mcset
2540: 20 7b 7d 20 6f 76 30 20 6f 76 30 5f 52 4f 4f 54   {} ov0 ov0_ROOT
2550: 0a 09 09 6d 63 73 65 74 20 7b 7d 20 6f 76 31 20  ...mcset {} ov1 
2560: 6f 76 31 5f 52 4f 4f 54 0a 09 09 6d 63 73 65 74  ov1_ROOT...mcset
2570: 20 7b 7d 20 6f 76 32 20 6f 76 32 5f 52 4f 4f 54   {} ov2 ov2_ROOT
2580: 0a 09 09 6d 63 73 65 74 20 7b 7d 20 6f 76 33 20  ...mcset {} ov3 
2590: 6f 76 33 5f 52 4f 4f 54 0a 09 09 6d 63 73 65 74  ov3_ROOT...mcset
25a0: 20 66 6f 6f 20 6f 76 31 20 6f 76 31 5f 66 6f 6f   foo ov1 ov1_foo
25b0: 0a 09 09 6d 63 73 65 74 20 66 6f 6f 20 6f 76 32  ...mcset foo ov2
25c0: 20 6f 76 32 5f 66 6f 6f 0a 09 09 6d 63 73 65 74   ov2_foo...mcset
25d0: 20 66 6f 6f 20 6f 76 33 20 6f 76 33 5f 66 6f 6f   foo ov3 ov3_foo
25e0: 0a 09 09 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52  ...mcset foo_BAR
25f0: 20 6f 76 32 20 6f 76 32 5f 66 6f 6f 5f 42 41 52   ov2 ov2_foo_BAR
2600: 0a 09 09 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52  ...mcset foo_BAR
2610: 20 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f 42 41 52   ov3 ov3_foo_BAR
2620: 0a 09 09 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52  ...mcset foo_BAR
2630: 5f 62 61 7a 20 6f 76 33 20 6f 76 33 5f 66 6f 6f  _baz ov3 ov3_foo
2640: 5f 42 41 52 5f 62 61 7a 0a 09 09 76 61 72 69 61  _BAR_baz...varia
2650: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
2660: 63 61 6c 65 5d 0a 09 09 6d 63 6c 6f 63 61 6c 65  cale]...mclocale
2670: 20 24 6c 6f 63 0a 09 20 20 20 20 7d 20 2d 63 6c   $loc..    } -cl
2680: 65 61 6e 75 70 20 7b 0a 09 09 6d 63 6c 6f 63 61  eanup {...mcloca
2690: 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20  le $locale..    
26a0: 7d 20 2d 62 6f 64 79 20 7b 0a 09 09 6d 63 20 24  } -body {...mc $
26b0: 73 74 72 69 6e 67 0a 09 20 20 20 20 7d 20 2d 72  string..    } -r
26c0: 65 73 75 6c 74 20 24 72 65 73 75 6c 74 28 24 6c  esult $result($l
26d0: 6f 63 2c 24 73 74 72 69 6e 67 29 0a 09 20 20 20  oc,$string)..   
26e0: 20 69 6e 63 72 20 63 6f 75 6e 74 0a 09 7d 0a 20   incr count..}. 
26f0: 20 20 20 7d 0a 20 20 20 20 75 6e 73 65 74 20 2d     }.    unset -
2700: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
2710: 74 0a 0a 20 20 20 20 23 20 54 65 73 74 73 20 6d  t..    # Tests m
2720: 73 67 63 61 74 2d 34 2e 2a 3a 20 5b 6d 63 75 6e  sgcat-4.*: [mcun
2730: 6b 6e 6f 77 6e 5d 0a 0a 20 20 20 20 74 65 73 74  known]..    test
2740: 20 6d 73 67 63 61 74 2d 34 2e 32 20 7b 6d 63 75   msgcat-4.2 {mcu
2750: 6e 6b 6e 6f 77 6e 2c 20 64 65 66 61 75 6c 74 7d  nknown, default}
2760: 20 2d 73 65 74 75 70 20 7b 0a 09 6d 63 73 65 74   -setup {..mcset
2770: 20 66 6f 6f 20 75 6e 6b 31 20 22 75 6e 6b 6e 6f   foo unk1 "unkno
2780: 77 6e 20 31 22 0a 09 76 61 72 69 61 62 6c 65 20  wn 1"..variable 
2790: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
27a0: 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a  ]..mclocale foo.
27b0: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
27c0: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
27d0: 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  le.    } -body {
27e0: 0a 09 6d 63 20 75 6e 6b 31 0a 20 20 20 20 7d 20  ..mc unk1.    } 
27f0: 2d 72 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e  -result {unknown
2800: 20 31 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73   1}..    test ms
2810: 67 63 61 74 2d 34 2e 33 20 7b 6d 63 75 6e 6b 6e  gcat-4.3 {mcunkn
2820: 6f 77 6e 2c 20 64 65 66 61 75 6c 74 7d 20 2d 73  own, default} -s
2830: 65 74 75 70 20 7b 0a 09 6d 63 73 65 74 20 66 6f  etup {..mcset fo
2840: 6f 20 75 6e 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20  o unk1 "unknown 
2850: 31 22 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63  1"..variable loc
2860: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
2870: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 20 20 20  mclocale foo.   
2880: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
2890: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
28a0: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d      } -body {..m
28b0: 63 20 75 6e 6b 32 0a 20 20 20 20 7d 20 2d 72 65  c unk2.    } -re
28c0: 73 75 6c 74 20 75 6e 6b 32 0a 0a 20 20 20 20 74  sult unk2..    t
28d0: 65 73 74 20 6d 73 67 63 61 74 2d 34 2e 34 20 7b  est msgcat-4.4 {
28e0: 6d 63 75 6e 6b 6e 6f 77 6e 2c 20 6f 76 65 72 72  mcunknown, overr
28f0: 69 64 64 65 6e 7d 20 2d 73 65 74 75 70 20 7b 0a  idden} -setup {.
2900: 09 72 65 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74  .rename ::msgcat
2910: 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 53 61 76 65  ::mcunknown Save
2920: 64 4d 63 75 6e 6b 6e 6f 77 6e 0a 09 70 72 6f 63  dMcunknown..proc
2930: 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b   ::msgcat::mcunk
2940: 6e 6f 77 6e 20 7b 64 6f 6d 20 73 7d 20 7b 0a 09  nown {dom s} {..
2950: 20 20 20 20 72 65 74 75 72 6e 20 75 6e 6b 6e 6f      return unkno
2960: 77 6e 3a 24 64 6f 6d 3a 24 73 0a 09 7d 0a 09 6d  wn:$dom:$s..}..m
2970: 63 73 65 74 20 66 6f 6f 20 75 6e 6b 31 20 22 75  cset foo unk1 "u
2980: 6e 6b 6e 6f 77 6e 20 31 22 0a 09 76 61 72 69 61  nknown 1"..varia
2990: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
29a0: 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20  cale]..mclocale 
29b0: 66 6f 6f 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e  foo.    } -clean
29c0: 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24  up {..mclocale $
29d0: 6c 6f 63 61 6c 65 0a 09 72 65 6e 61 6d 65 20 3a  locale..rename :
29e0: 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f  :msgcat::mcunkno
29f0: 77 6e 20 7b 7d 0a 09 72 65 6e 61 6d 65 20 53 61  wn {}..rename Sa
2a00: 76 65 64 4d 63 75 6e 6b 6e 6f 77 6e 20 3a 3a 6d  vedMcunknown ::m
2a10: 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e  sgcat::mcunknown
2a20: 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09  .    } -body {..
2a30: 6d 63 20 75 6e 6b 31 0a 20 20 20 20 7d 20 2d 72  mc unk1.    } -r
2a40: 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 31  esult {unknown 1
2a50: 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  }..    test msgc
2a60: 61 74 2d 34 2e 35 20 7b 6d 63 75 6e 6b 6e 6f 77  at-4.5 {mcunknow
2a70: 6e 2c 20 6f 76 65 72 72 69 64 64 65 6e 7d 20 2d  n, overridden} -
2a80: 73 65 74 75 70 20 7b 0a 09 72 65 6e 61 6d 65 20  setup {..rename 
2a90: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e  ::msgcat::mcunkn
2aa0: 6f 77 6e 20 53 61 76 65 64 4d 63 75 6e 6b 6e 6f  own SavedMcunkno
2ab0: 77 6e 0a 09 70 72 6f 63 20 3a 3a 6d 73 67 63 61  wn..proc ::msgca
2ac0: 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 64 6f  t::mcunknown {do
2ad0: 6d 20 73 7d 20 7b 0a 09 20 20 20 20 72 65 74 75  m s} {..    retu
2ae0: 72 6e 20 75 6e 6b 6e 6f 77 6e 3a 24 64 6f 6d 3a  rn unknown:$dom:
2af0: 24 73 0a 09 7d 0a 09 6d 63 73 65 74 20 66 6f 6f  $s..}..mcset foo
2b00: 20 75 6e 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20 31   unk1 "unknown 1
2b10: 22 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61  "..variable loca
2b20: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d  le [mclocale]..m
2b30: 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20  clocale foo.    
2b40: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63  } -cleanup {..mc
2b50: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09  locale $locale..
2b60: 72 65 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a  rename ::msgcat:
2b70: 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 09 72  :mcunknown {}..r
2b80: 65 6e 61 6d 65 20 53 61 76 65 64 4d 63 75 6e 6b  ename SavedMcunk
2b90: 6e 6f 77 6e 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d  nown ::msgcat::m
2ba0: 63 75 6e 6b 6e 6f 77 6e 0a 20 20 20 20 7d 20 2d  cunknown.    } -
2bb0: 62 6f 64 79 20 7b 0a 09 6d 63 20 75 6e 6b 32 0a  body {..mc unk2.
2bc0: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 75      } -result {u
2bd0: 6e 6b 6e 6f 77 6e 3a 66 6f 6f 3a 75 6e 6b 32 7d  nknown:foo:unk2}
2be0: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
2bf0: 74 2d 34 2e 36 20 7b 6d 63 75 6e 6b 6e 6f 77 6e  t-4.6 {mcunknown
2c00: 2c 20 75 70 6c 65 76 65 6c 20 63 6f 6e 74 65 78  , uplevel contex
2c10: 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 72 65 6e  t} -setup {..ren
2c20: 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  ame ::msgcat::mc
2c30: 75 6e 6b 6e 6f 77 6e 20 53 61 76 65 64 4d 63 75  unknown SavedMcu
2c40: 6e 6b 6e 6f 77 6e 0a 09 70 72 6f 63 20 3a 3a 6d  nknown..proc ::m
2c50: 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e  sgcat::mcunknown
2c60: 20 7b 64 6f 6d 20 73 7d 20 7b 0a 09 20 20 20 20   {dom s} {..    
2c70: 72 65 74 75 72 6e 20 22 75 6e 6b 6e 6f 77 6e 3a  return "unknown:
2c80: 24 64 6f 6d 3a 24 73 3a 5b 65 78 70 72 20 7b 5b  $dom:$s:[expr {[
2c90: 69 6e 66 6f 20 6c 65 76 65 6c 5d 20 2d 20 31 7d  info level] - 1}
2ca0: 5d 22 0a 09 7d 0a 09 6d 63 73 65 74 20 66 6f 6f  ]"..}..mcset foo
2cb0: 20 75 6e 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20 31   unk1 "unknown 1
2cc0: 22 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61  "..variable loca
2cd0: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d  le [mclocale]..m
2ce0: 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20  clocale foo.    
2cf0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63  } -cleanup {..mc
2d00: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09  locale $locale..
2d10: 72 65 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a  rename ::msgcat:
2d20: 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 09 72  :mcunknown {}..r
2d30: 65 6e 61 6d 65 20 53 61 76 65 64 4d 63 75 6e 6b  ename SavedMcunk
2d40: 6e 6f 77 6e 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d  nown ::msgcat::m
2d50: 63 75 6e 6b 6e 6f 77 6e 0a 20 20 20 20 7d 20 2d  cunknown.    } -
2d60: 62 6f 64 79 20 7b 0a 09 6d 63 20 75 6e 6b 32 0a  body {..mc unk2.
2d70: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 75 6e      } -result un
2d80: 6b 6e 6f 77 6e 3a 66 6f 6f 3a 75 6e 6b 32 3a 5b  known:foo:unk2:[
2d90: 69 6e 66 6f 20 6c 65 76 65 6c 5d 0a 0a 20 20 20  info level]..   
2da0: 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d   # Tests msgcat-
2db0: 35 2e 2a 3a 20 5b 6d 63 6c 6f 61 64 5d 0a 0a 20  5.*: [mcload].. 
2dc0: 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61     variable loca
2dd0: 6c 65 73 20 7b 7b 7d 20 66 6f 6f 20 66 6f 6f 5f  les {{} foo foo_
2de0: 42 41 52 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 7d  BAR foo_BAR_baz}
2df0: 0a 20 20 20 20 73 65 74 20 6d 73 67 64 69 72 20  .    set msgdir 
2e00: 5b 6d 61 6b 65 44 69 72 65 63 74 6f 72 79 20 6d  [makeDirectory m
2e10: 73 67 64 69 72 5d 0a 20 20 20 20 66 6f 72 65 61  sgdir].    forea
2e20: 63 68 20 6c 6f 63 20 24 6c 6f 63 61 6c 65 73 20  ch loc $locales 
2e30: 7b 0a 09 69 66 20 7b 20 24 6c 6f 63 20 65 71 20  {..if { $loc eq 
2e40: 7b 7d 20 7d 20 7b 0a 09 20 20 20 20 73 65 74 20  {} } {..    set 
2e50: 6d 73 67 20 52 4f 4f 54 0a 09 7d 20 65 6c 73 65  msg ROOT..} else
2e60: 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 73 67 20   {..    set msg 
2e70: 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20  [string tolower 
2e80: 24 6c 6f 63 5d 0a 09 7d 0a 09 6d 61 6b 65 46 69  $loc]..}..makeFi
2e90: 6c 65 20 5b 6c 69 73 74 20 3a 3a 6d 73 67 63 61  le [list ::msgca
2ea0: 74 3a 3a 6d 63 73 65 74 20 24 6c 6f 63 20 61 62  t::mcset $loc ab
2eb0: 63 20 61 62 63 2d 24 6c 6f 63 5d 20 24 6d 73 67  c abc-$loc] $msg
2ec0: 2e 6d 73 67 20 24 6d 73 67 64 69 72 0a 20 20 20  .msg $msgdir.   
2ed0: 20 7d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20   }.    variable 
2ee0: 63 6f 75 6e 74 20 31 0a 20 20 20 20 66 6f 72 65  count 1.    fore
2ef0: 61 63 68 20 6c 6f 63 20 7b 66 6f 6f 20 66 6f 6f  ach loc {foo foo
2f00: 5f 42 41 52 20 66 6f 6f 5f 42 41 52 5f 62 61 7a  _BAR foo_BAR_baz
2f10: 7d 20 7b 0a 09 74 65 73 74 20 6d 73 67 63 61 74  } {..test msgcat
2f20: 2d 35 2e 24 63 6f 75 6e 74 20 7b 6d 63 6c 6f 61  -5.$count {mcloa
2f30: 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  d} -setup {..   
2f40: 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65   variable locale
2f50: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20   [mclocale]..   
2f60: 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 6c 6f 63   ::msgcat::mcloc
2f70: 61 6c 65 20 22 22 0a 09 20 20 20 20 3a 3a 6d 73  ale ""..    ::ms
2f80: 67 63 61 74 3a 3a 6d 63 6c 6f 61 64 65 64 6c 6f  gcat::mcloadedlo
2f90: 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20  cales clear..   
2fa0: 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 70 61 63   ::msgcat::mcpac
2fb0: 6b 61 67 65 63 6f 6e 66 69 67 20 75 6e 73 65 74  kageconfig unset
2fc0: 20 6d 63 66 6f 6c 64 65 72 0a 09 20 20 20 20 6d   mcfolder..    m
2fd0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 0a 09 7d 20  clocale $loc..} 
2fe0: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20  -cleanup {..    
2ff0: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
3000: 0a 09 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a  ..    ::msgcat::
3010: 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20  mcloadedlocales 
3020: 63 6c 65 61 72 0a 09 20 20 20 20 3a 3a 6d 73 67  clear..    ::msg
3030: 63 61 74 3a 3a 6d 63 70 61 63 6b 61 67 65 63 6f  cat::mcpackageco
3040: 6e 66 69 67 20 75 6e 73 65 74 20 6d 63 66 6f 6c  nfig unset mcfol
3050: 64 65 72 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09  der..} -body {..
3060: 20 20 20 20 6d 63 6c 6f 61 64 20 24 6d 73 67 64      mcload $msgd
3070: 69 72 0a 09 7d 20 2d 72 65 73 75 6c 74 20 5b 65  ir..} -result [e
3080: 78 70 72 20 7b 20 24 63 6f 75 6e 74 2b 31 20 7d  xpr { $count+1 }
3090: 5d 0a 09 69 6e 63 72 20 63 6f 75 6e 74 0a 20 20  ]..incr count.  
30a0: 20 20 7d 0a 0a 20 20 20 20 23 20 45 76 65 6e 20    }..    # Even 
30b0: 74 68 6f 75 67 68 20 66 6f 6f 5f 42 41 52 5f 6e  though foo_BAR_n
30c0: 6f 74 65 78 69 73 74 20 64 6f 65 73 20 6e 6f 74  otexist does not
30d0: 20 65 78 69 73 74 2c 0a 20 20 20 20 23 20 66 6f   exist,.    # fo
30e0: 6f 5f 42 41 52 2c 20 66 6f 6f 20 61 6e 64 20 74  o_BAR, foo and t
30f0: 68 65 20 72 6f 6f 74 20 73 68 6f 75 6c 64 20 62  he root should b
3100: 65 20 6c 6f 61 64 65 64 2e 0a 09 74 65 73 74 20  e loaded...test 
3110: 6d 73 67 63 61 74 2d 35 2e 34 20 7b 6d 63 6c 6f  msgcat-5.4 {mclo
3120: 61 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20  ad} -setup {..  
3130: 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c    variable local
3140: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20  e [mclocale]..  
3150: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42    mclocale foo_B
3160: 41 52 5f 6e 6f 74 65 78 69 73 74 0a 09 7d 20 2d  AR_notexist..} -
3170: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
3180: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
3190: 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63  .    mcloadedloc
31a0: 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20  ales clear..    
31b0: 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20  mcpackageconfig 
31c0: 75 6e 73 65 74 20 6d 63 66 6f 6c 64 65 72 0a 09  unset mcfolder..
31d0: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
31e0: 63 6c 6f 61 64 20 24 6d 73 67 64 69 72 0a 09 7d  cload $msgdir..}
31f0: 20 2d 72 65 73 75 6c 74 20 33 0a 0a 09 74 65 73   -result 3...tes
3200: 74 20 6d 73 67 63 61 74 2d 35 2e 35 20 7b 6d 63  t msgcat-5.5 {mc
3210: 6c 6f 61 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09  load} -setup {..
3220: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63      variable loc
3230: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
3240: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 6e 6f 5f      mclocale no_
3250: 46 49 5f 6e 6f 74 65 78 69 73 74 0a 09 7d 20 2d  FI_notexist..} -
3260: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
3270: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
3280: 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63  .    mcloadedloc
3290: 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20  ales clear..    
32a0: 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20  mcpackageconfig 
32b0: 75 6e 73 65 74 20 6d 63 66 6f 6c 64 65 72 0a 09  unset mcfolder..
32c0: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
32d0: 63 6c 6f 61 64 20 24 6d 73 67 64 69 72 0a 09 7d  cload $msgdir..}
32e0: 20 2d 72 65 73 75 6c 74 20 31 0a 0a 09 74 65 73   -result 1...tes
32f0: 74 20 6d 73 67 63 61 74 2d 35 2e 36 20 7b 6d 63  t msgcat-5.6 {mc
3300: 6c 6f 61 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09  load} -setup {..
3310: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63      variable loc
3320: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
3330: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f      mclocale foo
3340: 0a 09 20 20 20 20 6d 63 6c 6f 61 64 20 24 6d 73  ..    mcload $ms
3350: 67 64 69 72 0a 09 7d 20 2d 63 6c 65 61 6e 75 70  gdir..} -cleanup
3360: 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65   {..    mclocale
3370: 20 24 6c 6f 63 61 6c 65 0a 09 7d 20 2d 62 6f 64   $locale..} -bod
3380: 79 20 7b 0a 09 20 20 20 20 6d 63 20 61 62 63 0a  y {..    mc abc.
3390: 09 7d 20 2d 72 65 73 75 6c 74 20 61 62 63 2d 66  .} -result abc-f
33a0: 6f 6f 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74  oo...test msgcat
33b0: 2d 35 2e 37 20 7b 6d 63 6c 6f 61 64 7d 20 2d 73  -5.7 {mcload} -s
33c0: 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69  etup {..    vari
33d0: 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c  able locale [mcl
33e0: 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f  ocale]..    mclo
33f0: 63 61 6c 65 20 66 6f 6f 5f 42 41 52 0a 09 20 20  cale foo_BAR..  
3400: 20 20 6d 63 6c 6f 61 64 20 24 6d 73 67 64 69 72    mcload $msgdir
3410: 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09  ..} -cleanup {..
3420: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f      mclocale $lo
3430: 63 61 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  cale..} -body {.
3440: 09 20 20 20 20 6d 63 20 61 62 63 0a 09 7d 20 2d  .    mc abc..} -
3450: 72 65 73 75 6c 74 20 61 62 63 2d 66 6f 6f 5f 42  result abc-foo_B
3460: 41 52 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74  AR...test msgcat
3470: 2d 35 2e 38 20 7b 6d 63 6c 6f 61 64 7d 20 2d 73  -5.8 {mcload} -s
3480: 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69  etup {..    vari
3490: 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c  able locale [mcl
34a0: 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f  ocale]..    mclo
34b0: 63 61 6c 65 20 66 6f 6f 5f 42 41 52 5f 62 61 7a  cale foo_BAR_baz
34c0: 0a 09 20 20 20 20 6d 63 6c 6f 61 64 20 24 6d 73  ..    mcload $ms
34d0: 67 64 69 72 0a 09 7d 20 2d 63 6c 65 61 6e 75 70  gdir..} -cleanup
34e0: 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65   {..    mclocale
34f0: 20 24 6c 6f 63 61 6c 65 0a 09 7d 20 2d 62 6f 64   $locale..} -bod
3500: 79 20 7b 0a 09 20 20 20 20 6d 63 20 61 62 63 0a  y {..    mc abc.
3510: 09 7d 20 2d 72 65 73 75 6c 74 20 61 62 63 2d 66  .} -result abc-f
3520: 6f 6f 5f 42 41 52 5f 62 61 7a 0a 0a 09 74 65 73  oo_BAR_baz...tes
3530: 74 20 6d 73 67 63 61 74 2d 35 2e 39 20 7b 6d 63  t msgcat-5.9 {mc
3540: 6c 6f 61 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09  load} -setup {..
3550: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63      variable loc
3560: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
3570: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 6e 6f 5f      mclocale no_
3580: 46 49 5f 6e 6f 74 65 78 69 73 74 0a 09 20 20 20  FI_notexist..   
3590: 20 6d 63 6c 6f 61 64 20 24 6d 73 67 64 69 72 0a   mcload $msgdir.
35a0: 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20  .} -cleanup {.. 
35b0: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63     mclocale $loc
35c0: 61 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09  ale..} -body {..
35d0: 20 20 20 20 6d 63 20 61 62 63 0a 09 7d 20 2d 72      mc abc..} -r
35e0: 65 73 75 6c 74 20 61 62 63 2d 0a 0a 09 74 65 73  esult abc-...tes
35f0: 74 20 6d 73 67 63 61 74 2d 35 2e 31 30 20 7b 6d  t msgcat-5.10 {m
3600: 63 6c 6f 61 64 7d 20 2d 73 65 74 75 70 20 7b 0a  cload} -setup {.
3610: 09 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 6d 73  .    rename ::ms
3620: 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20  gcat::mcunknown 
3630: 53 61 76 65 64 4d 63 75 6e 6b 6e 6f 77 6e 0a 09  SavedMcunknown..
3640: 20 20 20 20 70 72 6f 63 20 3a 3a 6d 73 67 63 61      proc ::msgca
3650: 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 64 6f  t::mcunknown {do
3660: 6d 20 73 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20  m s} {...return 
3670: 75 6e 6b 6e 6f 77 6e 3a 24 64 6f 6d 3a 24 73 0a  unknown:$dom:$s.
3680: 09 20 20 20 20 7d 0a 09 20 20 20 20 76 61 72 69  .    }..    vari
3690: 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c  able locale [mcl
36a0: 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f  ocale]..    mclo
36b0: 63 61 6c 65 20 6e 6f 5f 46 49 5f 6e 6f 74 65 78  cale no_FI_notex
36c0: 69 73 74 0a 09 20 20 20 20 6d 63 6c 6f 61 64 20  ist..    mcload 
36d0: 24 6d 73 67 64 69 72 0a 09 7d 20 2d 63 6c 65 61  $msgdir..} -clea
36e0: 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63  nup {..    mcloc
36f0: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20  ale $locale..   
3700: 20 72 65 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74   rename ::msgcat
3710: 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 09  ::mcunknown {}..
3720: 20 20 20 20 72 65 6e 61 6d 65 20 53 61 76 65 64      rename Saved
3730: 4d 63 75 6e 6b 6e 6f 77 6e 20 3a 3a 6d 73 67 63  Mcunknown ::msgc
3740: 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 0a 09 7d  at::mcunknown..}
3750: 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63   -body {..    mc
3760: 20 64 65 66 0a 09 7d 20 2d 72 65 73 75 6c 74 20   def..} -result 
3770: 75 6e 6b 6e 6f 77 6e 3a 6e 6f 5f 66 69 5f 6e 6f  unknown:no_fi_no
3780: 74 65 78 69 73 74 3a 64 65 66 0a 0a 09 74 65 73  texist:def...tes
3790: 74 20 6d 73 67 63 61 74 2d 35 2e 31 31 20 7b 6d  t msgcat-5.11 {m
37a0: 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 6d  cpackageconfig m
37b0: 63 66 6f 6c 64 65 72 7d 20 2d 73 65 74 75 70 20  cfolder} -setup 
37c0: 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20  {..    variable 
37d0: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
37e0: 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  ]..    mclocale 
37f0: 22 22 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64  ""..    mcloaded
3800: 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20  locales clear.. 
3810: 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66     mcpackageconf
3820: 69 67 20 75 6e 73 65 74 20 6d 63 66 6f 6c 64 65  ig unset mcfolde
3830: 72 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  r..} -cleanup {.
3840: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c  .    mclocale $l
3850: 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63 6c 6f 61  ocale..    mcloa
3860: 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72  dedlocales clear
3870: 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63  ..    mcpackagec
3880: 6f 6e 66 69 67 20 75 6e 73 65 74 20 6d 63 66 6f  onfig unset mcfo
3890: 6c 64 65 72 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  lder..} -body {.
38a0: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f  .    mclocale fo
38b0: 6f 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65  o..    mcpackage
38c0: 63 6f 6e 66 69 67 20 73 65 74 20 6d 63 66 6f 6c  config set mcfol
38d0: 64 65 72 20 24 6d 73 67 64 69 72 0a 09 7d 20 2d  der $msgdir..} -
38e0: 72 65 73 75 6c 74 20 32 0a 0a 20 20 20 20 66 6f  result 2..    fo
38f0: 72 65 61 63 68 20 6c 6f 63 20 24 6c 6f 63 61 6c  reach loc $local
3900: 65 73 20 7b 0a 09 69 66 20 7b 20 24 6c 6f 63 20  es {..if { $loc 
3910: 65 71 20 7b 7d 20 7d 20 7b 0a 09 20 20 20 20 73  eq {} } {..    s
3920: 65 74 20 6d 73 67 20 52 4f 4f 54 0a 09 7d 20 65  et msg ROOT..} e
3930: 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74 20 6d  lse {..    set m
3940: 73 67 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77  sg [string tolow
3950: 65 72 20 24 6c 6f 63 5d 0a 09 7d 0a 09 72 65 6d  er $loc]..}..rem
3960: 6f 76 65 46 69 6c 65 20 24 6d 73 67 2e 6d 73 67  oveFile $msg.msg
3970: 20 24 6d 73 67 64 69 72 0a 20 20 20 20 7d 0a 20   $msgdir.    }. 
3980: 20 20 20 72 65 6d 6f 76 65 44 69 72 65 63 74 6f     removeDirecto
3990: 72 79 20 6d 73 67 64 69 72 0a 0a 20 20 20 20 23  ry msgdir..    #
39a0: 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d 36 2e   Tests msgcat-6.
39b0: 2a 3a 20 5b 6d 63 73 65 74 5d 2c 20 5b 6d 63 5d  *: [mcset], [mc]
39c0: 20 6e 61 6d 65 73 70 61 63 65 20 69 6e 68 65 72   namespace inher
39d0: 69 74 61 6e 63 65 0a 23 0a 23 20 54 65 73 74 20  itance.#.# Test 
39e0: 6d 63 73 65 74 20 61 6e 64 20 6d 63 2c 20 65 6e  mcset and mc, en
39f0: 73 75 72 69 6e 67 20 74 68 61 74 20 72 65 73 6f  suring that reso
3a00: 6c 75 74 69 6f 6e 20 66 6f 72 20 6d 65 73 73 61  lution for messa
3a10: 67 65 73 0a 23 20 70 72 6f 63 65 65 64 73 20 66  ges.# proceeds f
3a20: 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
3a30: 6e 73 20 74 6f 20 69 74 73 20 70 61 72 65 6e 74  ns to its parent
3a40: 20 61 6e 64 20 73 6f 20 6f 6e 20 74 6f 20 74 68   and so on to th
3a50: 65 0a 23 20 67 6c 6f 62 61 6c 20 6e 73 2e 0a 23  e.# global ns..#
3a60: 0a 23 20 44 6f 20 74 68 69 73 20 66 6f 72 20 74  .# Do this for t
3a70: 68 65 20 31 32 20 70 65 72 6d 75 74 61 74 69 6f  he 12 permutatio
3a80: 6e 73 20 6f 66 0a 23 20 20 20 20 20 6c 6f 63 61  ns of.#     loca
3a90: 6c 65 73 3a 20 66 6f 6f 0a 23 20 20 20 20 20 6e  les: foo.#     n
3aa0: 61 6d 65 73 70 61 63 65 73 3a 20 66 6f 6f 20 66  amespaces: foo f
3ab0: 6f 6f 3a 3a 62 61 72 20 66 6f 6f 3a 3a 62 61 72  oo::bar foo::bar
3ac0: 3a 3a 62 61 7a 0a 23 20 20 20 20 20 73 74 72 69  ::baz.#     stri
3ad0: 6e 67 73 3a 20 7b 6f 76 31 20 6f 76 32 20 6f 76  ngs: {ov1 ov2 ov
3ae0: 33 20 6f 76 34 7d 0a 23 20 20 20 20 20 6e 61 6d  3 ov4}.#     nam
3af0: 65 73 70 61 63 65 20 3a 3a 66 6f 6f 20 20 20 20  espace ::foo    
3b00: 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 73 20          defines 
3b10: 6f 76 31 2c 20 6f 76 32 2c 20 6f 76 33 0a 23 20  ov1, ov2, ov3.# 
3b20: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 3a 3a      namespace ::
3b30: 66 6f 6f 3a 3a 62 61 72 20 20 20 20 20 20 20 64  foo::bar       d
3b40: 65 66 69 6e 65 73 20 20 20 20 20 20 6f 76 32 2c  efines      ov2,
3b50: 20 6f 76 33 0a 23 20 20 20 20 20 6e 61 6d 65 73   ov3.#     names
3b60: 70 61 63 65 20 3a 3a 66 6f 6f 3a 3a 62 61 72 3a  pace ::foo::bar:
3b70: 3a 62 61 7a 20 20 64 65 66 69 6e 65 73 20 20 20  :baz  defines   
3b80: 20 20 20 20 20 20 20 20 6f 76 33 0a 23 0a 23 20          ov3.#.# 
3b90: 20 20 20 20 6f 76 34 20 69 73 20 6e 6f 74 20 64      ov4 is not d
3ba0: 65 66 69 6e 65 64 20 69 6e 20 61 6e 79 20 6e 61  efined in any na
3bb0: 6d 65 73 70 61 63 65 2e 0a 23 0a 23 20 53 6f 2c  mespace..#.# So,
3bc0: 0a 23 20 20 20 20 20 6f 76 33 20 73 68 6f 75 6c  .#     ov3 shoul
3bd0: 64 20 62 65 20 72 65 73 6f 6c 76 65 64 20 69 6e  d be resolved in
3be0: 20 3a 3a 66 6f 6f 3a 3a 62 61 72 3a 3a 62 61 7a   ::foo::bar::baz
3bf0: 2c 20 3a 3a 66 6f 6f 3a 3a 62 61 72 2c 20 3a 3a  , ::foo::bar, ::
3c00: 66 6f 6f 3b 0a 23 20 20 20 20 20 6f 76 32 20 73  foo;.#     ov2 s
3c10: 68 6f 75 6c 64 20 62 65 20 72 65 73 6f 6c 76 65  hould be resolve
3c20: 64 20 69 6e 20 3a 3a 66 6f 6f 2c 20 3a 3a 66 6f  d in ::foo, ::fo
3c30: 6f 3a 3a 62 61 72 0a 23 20 20 20 20 20 6f 76 31  o::bar.#     ov1
3c40: 20 73 68 6f 75 6c 64 20 62 65 20 72 65 73 6f 6c   should be resol
3c50: 76 65 64 20 69 6e 20 3a 3a 66 6f 6f 0a 23 20 20  ved in ::foo.#  
3c60: 20 20 20 6f 76 34 20 73 68 6f 75 6c 64 20 62 65     ov4 should be
3c70: 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 6e 6f 6e   resolved in non
3c80: 65 2c 20 61 6e 64 20 63 61 6c 6c 20 6d 63 75 6e  e, and call mcun
3c90: 6b 6e 6f 77 6e 0a 23 0a 0a 20 20 20 20 76 61 72  known.#..    var
3ca0: 69 61 62 6c 65 20 72 65 73 75 6c 74 0a 20 20 20  iable result.   
3cb0: 20 61 72 72 61 79 20 73 65 74 20 72 65 73 75 6c   array set resul
3cc0: 74 20 7b 0a 09 66 6f 6f 2c 6f 76 31 20 6f 76 31  t {..foo,ov1 ov1
3cd0: 5f 66 6f 6f 20 66 6f 6f 2c 6f 76 32 20 6f 76 32  _foo foo,ov2 ov2
3ce0: 5f 66 6f 6f 20 66 6f 6f 2c 6f 76 33 20 6f 76 33  _foo foo,ov3 ov3
3cf0: 5f 66 6f 6f 20 66 6f 6f 2c 6f 76 34 20 6f 76 34  _foo foo,ov4 ov4
3d00: 0a 09 66 6f 6f 3a 3a 62 61 72 2c 6f 76 31 20 6f  ..foo::bar,ov1 o
3d10: 76 31 5f 66 6f 6f 20 66 6f 6f 3a 3a 62 61 72 2c  v1_foo foo::bar,
3d20: 6f 76 32 20 6f 76 32 5f 66 6f 6f 5f 62 61 72 0a  ov2 ov2_foo_bar.
3d30: 09 66 6f 6f 3a 3a 62 61 72 2c 6f 76 33 20 6f 76  .foo::bar,ov3 ov
3d40: 33 5f 66 6f 6f 5f 62 61 72 20 66 6f 6f 3a 3a 62  3_foo_bar foo::b
3d50: 61 72 2c 6f 76 34 20 6f 76 34 20 66 6f 6f 3a 3a  ar,ov4 ov4 foo::
3d60: 62 61 72 3a 3a 62 61 7a 2c 6f 76 31 20 6f 76 31  bar::baz,ov1 ov1
3d70: 5f 66 6f 6f 0a 09 66 6f 6f 3a 3a 62 61 72 3a 3a  _foo..foo::bar::
3d80: 62 61 7a 2c 6f 76 32 20 6f 76 32 5f 66 6f 6f 5f  baz,ov2 ov2_foo_
3d90: 62 61 72 20 66 6f 6f 3a 3a 62 61 72 3a 3a 62 61  bar foo::bar::ba
3da0: 7a 2c 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f 62 61  z,ov3 ov3_foo_ba
3db0: 72 5f 62 61 7a 0a 09 66 6f 6f 3a 3a 62 61 72 3a  r_baz..foo::bar:
3dc0: 3a 62 61 7a 2c 6f 76 34 20 6f 76 34 0a 20 20 20  :baz,ov4 ov4.   
3dd0: 20 7d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20   }.    variable 
3de0: 63 6f 75 6e 74 20 31 0a 20 20 20 20 76 61 72 69  count 1.    vari
3df0: 61 62 6c 65 20 6e 73 0a 20 20 20 20 66 6f 72 65  able ns.    fore
3e00: 61 63 68 20 6e 73 20 7b 66 6f 6f 20 66 6f 6f 3a  ach ns {foo foo:
3e10: 3a 62 61 72 20 66 6f 6f 3a 3a 62 61 72 3a 3a 62  :bar foo::bar::b
3e20: 61 7a 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 73  az} {..foreach s
3e30: 74 72 69 6e 67 20 7b 6f 76 31 20 6f 76 32 20 6f  tring {ov1 ov2 o
3e40: 76 33 20 6f 76 34 7d 20 7b 0a 09 20 20 20 20 74  v3 ov4} {..    t
3e50: 65 73 74 20 6d 73 67 63 61 74 2d 36 2e 24 63 6f  est msgcat-6.$co
3e60: 75 6e 74 20 7b 6d 63 73 65 74 2c 20 6f 76 65 72  unt {mcset, over
3e70: 6c 61 70 7d 20 2d 73 65 74 75 70 20 7b 0a 09 09  lap} -setup {...
3e80: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 66  namespace eval f
3e90: 6f 6f 20 7b 0a 09 09 20 20 20 20 3a 3a 6d 73 67  oo {...    ::msg
3ea0: 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f 6f 20 6f  cat::mcset foo o
3eb0: 76 31 20 6f 76 31 5f 66 6f 6f 0a 09 09 20 20 20  v1 ov1_foo...   
3ec0: 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74   ::msgcat::mcset
3ed0: 20 66 6f 6f 20 6f 76 32 20 6f 76 32 5f 66 6f 6f   foo ov2 ov2_foo
3ee0: 0a 09 09 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a  ...    ::msgcat:
3ef0: 3a 6d 63 73 65 74 20 66 6f 6f 20 6f 76 33 20 6f  :mcset foo ov3 o
3f00: 76 33 5f 66 6f 6f 0a 09 09 20 20 20 20 6e 61 6d  v3_foo...    nam
3f10: 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20  espace eval bar 
3f20: 7b 0a 09 09 09 3a 3a 6d 73 67 63 61 74 3a 3a 6d  {....::msgcat::m
3f30: 63 73 65 74 20 66 6f 6f 20 6f 76 32 20 6f 76 32  cset foo ov2 ov2
3f40: 5f 66 6f 6f 5f 62 61 72 0a 09 09 09 3a 3a 6d 73  _foo_bar....::ms
3f50: 67 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f 6f 20  gcat::mcset foo 
3f60: 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f 62 61 72 0a  ov3 ov3_foo_bar.
3f70: 09 09 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61  ...namespace eva
3f80: 6c 20 62 61 7a 20 7b 0a 09 09 09 20 20 20 20 3a  l baz {....    :
3f90: 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 66  :msgcat::mcset f
3fa0: 6f 6f 20 6f 76 33 20 22 6f 76 33 5f 66 6f 6f 5f  oo ov3 "ov3_foo_
3fb0: 62 61 72 5f 62 61 7a 22 0a 09 09 09 7d 0a 09 09  bar_baz"....}...
3fc0: 20 20 20 20 7d 0a 0a 09 09 7d 0a 09 09 76 61 72      }....}...var
3fd0: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
3fe0: 6c 6f 63 61 6c 65 5d 0a 09 09 6d 63 6c 6f 63 61  locale]...mcloca
3ff0: 6c 65 20 66 6f 6f 0a 09 20 20 20 20 7d 20 2d 63  le foo..    } -c
4000: 6c 65 61 6e 75 70 20 7b 0a 09 09 6d 63 6c 6f 63  leanup {...mcloc
4010: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 09 6e 61  ale $locale...na
4020: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 66  mespace delete f
4030: 6f 6f 0a 09 20 20 20 20 7d 20 2d 62 6f 64 79 20  oo..    } -body 
4040: 7b 0a 09 09 6e 61 6d 65 73 70 61 63 65 20 65 76  {...namespace ev
4050: 61 6c 20 24 6e 73 20 5b 6c 69 73 74 20 3a 3a 6d  al $ns [list ::m
4060: 73 67 63 61 74 3a 3a 6d 63 20 24 73 74 72 69 6e  sgcat::mc $strin
4070: 67 5d 0a 09 20 20 20 20 7d 20 2d 72 65 73 75 6c  g]..    } -resul
4080: 74 20 24 72 65 73 75 6c 74 28 24 6e 73 2c 24 73  t $result($ns,$s
4090: 74 72 69 6e 67 29 0a 09 20 20 20 20 69 6e 63 72  tring)..    incr
40a0: 20 63 6f 75 6e 74 0a 09 7d 0a 20 20 20 20 7d 0a   count..}.    }.
40b0: 0a 20 20 20 20 23 20 54 65 73 74 73 20 6d 73 67  .    # Tests msg
40c0: 63 61 74 2d 37 2e 2a 3a 20 5b 6d 63 5d 20 65 78  cat-7.*: [mc] ex
40d0: 74 72 61 20 61 72 67 73 20 70 72 6f 63 65 73 73  tra args process
40e0: 65 64 20 62 79 20 5b 66 6f 72 6d 61 74 5d 0a 0a  ed by [format]..
40f0: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
4100: 37 2e 31 20 7b 6d 63 20 65 78 74 72 61 20 61 72  7.1 {mc extra ar
4110: 67 73 20 67 6f 20 74 68 72 6f 75 67 68 20 74 6f  gs go through to
4120: 20 66 6f 72 6d 61 74 7d 20 2d 73 65 74 75 70 20   format} -setup 
4130: 7b 0a 09 6d 63 73 65 74 20 66 6f 6f 20 66 6f 72  {..mcset foo for
4140: 6d 61 74 31 20 22 74 68 69 73 20 69 73 20 61 20  mat1 "this is a 
4150: 74 65 73 74 22 0a 09 6d 63 73 65 74 20 66 6f 6f  test"..mcset foo
4160: 20 66 6f 72 6d 61 74 32 20 22 74 68 69 73 20 69   format2 "this i
4170: 73 20 61 20 25 73 22 0a 09 6d 63 73 65 74 20 66  s a %s"..mcset f
4180: 6f 6f 20 66 6f 72 6d 61 74 33 20 22 74 68 69 73  oo format3 "this
4190: 20 69 73 20 61 20 25 73 20 25 73 22 0a 09 76 61   is a %s %s"..va
41a0: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
41b0: 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61  clocale]..mcloca
41c0: 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20 2d 63 6c  le foo.    } -cl
41d0: 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c  eanup {..mclocal
41e0: 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20  e $locale.    } 
41f0: 2d 62 6f 64 79 20 7b 0a 09 6d 63 20 66 6f 72 6d  -body {..mc form
4200: 61 74 31 20 22 67 6f 6f 64 20 74 65 73 74 22 0a  at1 "good test".
4210: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 22 74      } -result "t
4220: 68 69 73 20 69 73 20 61 20 74 65 73 74 22 0a 0a  his is a test"..
4230: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
4240: 37 2e 32 20 7b 6d 63 20 65 78 74 72 61 20 61 72  7.2 {mc extra ar
4250: 67 73 20 67 6f 20 74 68 72 6f 75 67 68 20 74 6f  gs go through to
4260: 20 66 6f 72 6d 61 74 7d 20 2d 73 65 74 75 70 20   format} -setup 
4270: 7b 0a 09 6d 63 73 65 74 20 66 6f 6f 20 66 6f 72  {..mcset foo for
4280: 6d 61 74 31 20 22 74 68 69 73 20 69 73 20 61 20  mat1 "this is a 
4290: 74 65 73 74 22 0a 09 6d 63 73 65 74 20 66 6f 6f  test"..mcset foo
42a0: 20 66 6f 72 6d 61 74 32 20 22 74 68 69 73 20 69   format2 "this i
42b0: 73 20 61 20 25 73 22 0a 09 6d 63 73 65 74 20 66  s a %s"..mcset f
42c0: 6f 6f 20 66 6f 72 6d 61 74 33 20 22 74 68 69 73  oo format3 "this
42d0: 20 69 73 20 61 20 25 73 20 25 73 22 0a 09 76 61   is a %s %s"..va
42e0: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
42f0: 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61  clocale]..mcloca
4300: 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20 2d 63 6c  le foo.    } -cl
4310: 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c  eanup {..mclocal
4320: 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20  e $locale.    } 
4330: 2d 62 6f 64 79 20 7b 0a 09 6d 63 20 66 6f 72 6d  -body {..mc form
4340: 61 74 32 20 22 67 6f 6f 64 20 74 65 73 74 22 0a  at2 "good test".
4350: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 22 74      } -result "t
4360: 68 69 73 20 69 73 20 61 20 67 6f 6f 64 20 74 65  his is a good te
4370: 73 74 22 0a 0a 20 20 20 20 74 65 73 74 20 6d 73  st"..    test ms
4380: 67 63 61 74 2d 37 2e 33 20 7b 6d 63 20 65 72 72  gcat-7.3 {mc err
4390: 6f 72 73 20 66 72 6f 6d 20 66 6f 72 6d 61 74 20  ors from format 
43a0: 61 72 65 20 70 72 6f 70 61 67 61 74 65 64 7d 20  are propagated} 
43b0: 2d 73 65 74 75 70 20 7b 0a 09 6d 63 73 65 74 20  -setup {..mcset 
43c0: 66 6f 6f 20 66 6f 72 6d 61 74 31 20 22 74 68 69  foo format1 "thi
43d0: 73 20 69 73 20 61 20 74 65 73 74 22 0a 09 6d 63  s is a test"..mc
43e0: 73 65 74 20 66 6f 6f 20 66 6f 72 6d 61 74 32 20  set foo format2 
43f0: 22 74 68 69 73 20 69 73 20 61 20 25 73 22 0a 09  "this is a %s"..
4400: 6d 63 73 65 74 20 66 6f 6f 20 66 6f 72 6d 61 74  mcset foo format
4410: 33 20 22 74 68 69 73 20 69 73 20 61 20 25 73 20  3 "this is a %s 
4420: 25 73 22 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f  %s"..variable lo
4430: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
4440: 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 20 20  .mclocale foo.  
4450: 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09    } -cleanup {..
4460: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
4470: 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09  .    } -body {..
4480: 63 61 74 63 68 20 7b 6d 63 20 66 6f 72 6d 61 74  catch {mc format
4490: 33 20 22 67 6f 6f 64 20 74 65 73 74 22 7d 0a 20  3 "good test"}. 
44a0: 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 31 0a 0a     } -result 1..
44b0: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
44c0: 37 2e 34 20 7b 6d 63 2c 20 65 78 74 72 61 20 61  7.4 {mc, extra a
44d0: 72 67 73 20 61 72 65 20 67 69 76 65 6e 20 74 6f  rgs are given to
44e0: 20 75 6e 6b 6e 6f 77 6e 7d 20 2d 73 65 74 75 70   unknown} -setup
44f0: 20 7b 0a 09 6d 63 73 65 74 20 66 6f 6f 20 66 6f   {..mcset foo fo
4500: 72 6d 61 74 31 20 22 74 68 69 73 20 69 73 20 61  rmat1 "this is a
4510: 20 74 65 73 74 22 0a 09 6d 63 73 65 74 20 66 6f   test"..mcset fo
4520: 6f 20 66 6f 72 6d 61 74 32 20 22 74 68 69 73 20  o format2 "this 
4530: 69 73 20 61 20 25 73 22 0a 09 6d 63 73 65 74 20  is a %s"..mcset 
4540: 66 6f 6f 20 66 6f 72 6d 61 74 33 20 22 74 68 69  foo format3 "thi
4550: 73 20 69 73 20 61 20 25 73 20 25 73 22 0a 09 76  s is a %s %s"..v
4560: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
4570: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63  mclocale]..mcloc
4580: 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20 2d 63  ale foo.    } -c
4590: 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61  leanup {..mcloca
45a0: 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d  le $locale.    }
45b0: 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 20 22 74 68   -body {..mc "th
45c0: 69 73 20 69 73 20 61 20 25 73 22 20 22 67 6f 6f  is is a %s" "goo
45d0: 64 20 74 65 73 74 22 0a 20 20 20 20 7d 20 2d 72  d test".    } -r
45e0: 65 73 75 6c 74 20 22 74 68 69 73 20 69 73 20 61  esult "this is a
45f0: 20 67 6f 6f 64 20 74 65 73 74 22 0a 0a 20 20 20   good test"..   
4600: 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d   # Tests msgcat-
4610: 38 2e 2a 3a 20 5b 6d 63 66 6c 73 65 74 5d 0a 0a  8.*: [mcflset]..
4620: 20 20 20 20 73 65 74 20 6d 73 67 64 69 72 31 20      set msgdir1 
4630: 5b 6d 61 6b 65 44 69 72 65 63 74 6f 72 79 20 6d  [makeDirectory m
4640: 73 67 64 69 72 31 5d 0a 20 20 20 20 6d 61 6b 65  sgdir1].    make
4650: 46 69 6c 65 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a  File {::msgcat::
4660: 6d 63 66 6c 73 65 74 20 6b 31 20 76 31 7d 20 6c  mcflset k1 v1} l
4670: 31 2e 6d 73 67 20 24 6d 73 67 64 69 72 31 0a 0a  1.msg $msgdir1..
4680: 09 74 65 73 74 20 6d 73 67 63 61 74 2d 38 2e 31  .test msgcat-8.1
4690: 20 7b 6d 63 66 6c 73 65 74 7d 20 2d 73 65 74 75   {mcflset} -setu
46a0: 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c  p {..    variabl
46b0: 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  e locale [mcloca
46c0: 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  le]..    mclocal
46d0: 65 20 6c 31 0a 09 20 20 20 20 6d 63 6c 6f 61 64  e l1..    mcload
46e0: 20 24 6d 73 67 64 69 72 31 0a 09 7d 20 2d 63 6c   $msgdir1..} -cl
46f0: 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c  eanup {..    mcl
4700: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 7d  ocale $locale..}
4710: 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63   -body {..    mc
4720: 20 6b 31 0a 09 7d 20 2d 72 65 73 75 6c 74 20 76   k1..} -result v
4730: 31 0a 0a 20 20 20 20 72 65 6d 6f 76 65 46 69 6c  1..    removeFil
4740: 65 20 6c 31 2e 6d 73 67 20 24 6d 73 67 64 69 72  e l1.msg $msgdir
4750: 31 0a 20 20 20 20 72 65 6d 6f 76 65 44 69 72 65  1.    removeDire
4760: 63 74 6f 72 79 20 6d 73 67 64 69 72 31 0a 0a 20  ctory msgdir1.. 
4770: 20 20 20 73 65 74 20 6d 73 67 64 69 72 32 20 5b     set msgdir2 [
4780: 6d 61 6b 65 44 69 72 65 63 74 6f 72 79 20 6d 73  makeDirectory ms
4790: 67 64 69 72 32 5d 0a 20 20 20 20 73 65 74 20 6d  gdir2].    set m
47a0: 73 67 64 69 72 33 20 5b 6d 61 6b 65 44 69 72 65  sgdir3 [makeDire
47b0: 63 74 6f 72 79 20 6d 73 67 64 69 72 33 5d 0a 20  ctory msgdir3]. 
47c0: 20 20 20 6d 61 6b 65 46 69 6c 65 20 22 3a 3a 6d     makeFile "::m
47d0: 73 67 63 61 74 3a 3a 6d 63 66 6c 73 65 74 20 6b  sgcat::mcflset k
47e0: 32 20 76 32 20 3b 20 3a 3a 6d 73 67 63 61 74 3a  2 v2 ; ::msgcat:
47f0: 3a 6d 63 6c 6f 61 64 20 5b 6c 69 73 74 20 24 6d  :mcload [list $m
4800: 73 67 64 69 72 33 5d 22 5c 0a 09 20 20 20 20 6c  sgdir3]"\..    l
4810: 32 2e 6d 73 67 20 24 6d 73 67 64 69 72 32 0a 20  2.msg $msgdir2. 
4820: 20 20 20 6d 61 6b 65 46 69 6c 65 20 7b 3a 3a 6d     makeFile {::m
4830: 73 67 63 61 74 3a 3a 6d 63 66 6c 73 65 74 20 6b  sgcat::mcflset k
4840: 33 20 76 33 20 3b 20 3a 3a 6d 73 67 63 61 74 3a  3 v3 ; ::msgcat:
4850: 3a 6d 63 66 6c 6d 73 65 74 20 7b 6b 34 20 76 34  :mcflmset {k4 v4
4860: 20 6b 35 20 76 35 7d 7d 20 6c 32 2e 6d 73 67 20   k5 v5}} l2.msg 
4870: 24 6d 73 67 64 69 72 33 0a 0a 09 23 20 63 68 61  $msgdir3...# cha
4880: 69 6e 65 64 20 6d 63 6c 6f 61 64 0a 09 74 65 73  ined mcload..tes
4890: 74 20 6d 73 67 63 61 74 2d 38 2e 32 20 7b 6d 63  t msgcat-8.2 {mc
48a0: 66 6c 73 65 74 2f 6d 63 66 6c 6d 73 65 74 7d 20  flset/mcflmset} 
48b0: 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61  -setup {..    va
48c0: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
48d0: 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d 63  clocale]..    mc
48e0: 6c 6f 63 61 6c 65 20 6c 32 0a 09 20 20 20 20 6d  locale l2..    m
48f0: 63 6c 6f 61 64 20 24 6d 73 67 64 69 72 32 0a 09  cload $msgdir2..
4900: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20  } -cleanup {..  
4910: 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61    mclocale $loca
4920: 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20  le..} -body {.. 
4930: 20 20 20 72 65 74 75 72 6e 20 5b 6d 63 20 6b 32     return [mc k2
4940: 5d 5b 6d 63 20 6b 33 5d 2d 2d 5b 6d 63 20 6b 34  ][mc k3]--[mc k4
4950: 5d 5b 6d 63 20 6b 35 5d 0a 09 7d 20 2d 72 65 73  ][mc k5]..} -res
4960: 75 6c 74 20 76 32 76 33 2d 2d 76 34 76 35 0a 0a  ult v2v3--v4v5..
4970: 20 20 20 20 72 65 6d 6f 76 65 46 69 6c 65 20 6c      removeFile l
4980: 32 2e 6d 73 67 20 24 6d 73 67 64 69 72 32 0a 20  2.msg $msgdir2. 
4990: 20 20 20 72 65 6d 6f 76 65 44 69 72 65 63 74 6f     removeDirecto
49a0: 72 79 20 6d 73 67 64 69 72 32 0a 20 20 20 20 72  ry msgdir2.    r
49b0: 65 6d 6f 76 65 44 69 72 65 63 74 6f 72 79 20 6d  emoveDirectory m
49c0: 73 67 64 69 72 33 0a 0a 20 20 20 20 23 20 54 65  sgdir3..    # Te
49d0: 73 74 73 20 6d 73 67 63 61 74 2d 39 2e 2a 3a 20  sts msgcat-9.*: 
49e0: 5b 6d 63 65 78 69 73 74 73 5d 0a 0a 09 74 65 73  [mcexists]...tes
49f0: 74 20 6d 73 67 63 61 74 2d 39 2e 31 20 7b 6d 63  t msgcat-9.1 {mc
4a00: 65 78 69 73 74 73 20 6e 6f 20 70 61 72 61 6d 65  exists no parame
4a10: 74 65 72 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  ter} -body {..  
4a20: 20 20 6d 63 65 78 69 73 74 73 0a 09 7d 20 2d 72    mcexists..} -r
4a30: 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09 2d  eturnCodes 1\..-
4a40: 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20  result {wrong # 
4a50: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
4a60: 22 6d 63 65 78 69 73 74 73 20 3f 2d 65 78 61 63  "mcexists ?-exac
4a70: 74 6e 61 6d 65 73 70 61 63 65 3f 20 3f 2d 65 78  tnamespace? ?-ex
4a80: 61 63 74 6c 6f 63 61 6c 65 3f 20 3f 2d 6e 61 6d  actlocale? ?-nam
4a90: 65 73 70 61 63 65 20 6e 73 3f 20 73 72 63 22 7d  espace ns? src"}
4aa0: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 39  ...test msgcat-9
4ab0: 2e 32 20 7b 6d 63 65 78 69 73 74 73 20 75 6e 6b  .2 {mcexists unk
4ac0: 6e 6f 77 6e 20 6f 70 74 69 6f 6e 7d 20 2d 62 6f  nown option} -bo
4ad0: 64 79 20 7b 0a 09 20 20 20 20 6d 63 65 78 69 73  dy {..    mcexis
4ae0: 74 73 20 2d 75 6e 6b 6e 6f 77 6e 20 73 72 63 0a  ts -unknown src.
4af0: 09 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  .} -returnCodes 
4b00: 31 5c 0a 09 2d 72 65 73 75 6c 74 20 7b 75 6e 6b  1\..-result {unk
4b10: 6e 6f 77 6e 20 6f 70 74 69 6f 6e 20 22 2d 75 6e  nown option "-un
4b20: 6b 6e 6f 77 6e 22 7d 0a 0a 09 74 65 73 74 20 6d  known"}...test m
4b30: 73 67 63 61 74 2d 39 2e 33 20 7b 6d 63 65 78 69  sgcat-9.3 {mcexi
4b40: 73 74 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  sts} -setup {.. 
4b50: 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61     mcforgetpacka
4b60: 67 65 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65  ge..    variable
4b70: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
4b80: 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65  e]..    mclocale
4b90: 20 66 6f 6f 0a 09 20 20 20 20 6d 63 73 65 74 20   foo..    mcset 
4ba0: 66 6f 6f 20 6b 31 20 76 31 0a 09 7d 20 2d 63 6c  foo k1 v1..} -cl
4bb0: 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c  eanup {..    mcl
4bc0: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 7d  ocale $locale..}
4bd0: 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6c 69   -body {..    li
4be0: 73 74 20 5b 6d 63 65 78 69 73 74 73 20 6b 31 5d  st [mcexists k1]
4bf0: 20 5b 6d 63 65 78 69 73 74 73 20 6b 32 5d 0a 09   [mcexists k2]..
4c00: 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20 30 7d 0a  } -result {1 0}.
4c10: 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 39 2e  ..test msgcat-9.
4c20: 34 20 7b 6d 63 65 78 69 73 74 73 20 64 65 73 63  4 {mcexists desc
4c30: 65 6e 64 65 6e 74 20 70 72 65 66 65 72 65 6e 63  endent preferenc
4c40: 65 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  e} -setup {..   
4c50: 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65   mcforgetpackage
4c60: 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  ..    variable l
4c70: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
4c80: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66  ..    mclocale f
4c90: 6f 6f 5f 62 61 72 0a 09 20 20 20 20 6d 63 73 65  oo_bar..    mcse
4ca0: 74 20 66 6f 6f 20 6b 31 20 76 31 0a 09 7d 20 2d  t foo k1 v1..} -
4cb0: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
4cc0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
4cd0: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
4ce0: 6c 69 73 74 20 5b 6d 63 65 78 69 73 74 73 20 6b  list [mcexists k
4cf0: 31 5d 20 5b 6d 63 65 78 69 73 74 73 20 2d 65 78  1] [mcexists -ex
4d00: 61 63 74 6c 6f 63 61 6c 65 20 6b 31 5d 0a 09 7d  actlocale k1]..}
4d10: 20 2d 72 65 73 75 6c 74 20 7b 31 20 30 7d 0a 0a   -result {1 0}..
4d20: 09 74 65 73 74 20 6d 73 67 63 61 74 2d 39 2e 35  .test msgcat-9.5
4d30: 20 7b 6d 63 65 78 69 73 74 73 20 70 61 72 65 6e   {mcexists paren
4d40: 74 20 6e 61 6d 65 73 70 61 63 65 7d 20 2d 73 65  t namespace} -se
4d50: 74 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72  tup {..    mcfor
4d60: 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20  getpackage..    
4d70: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
4d80: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20  [mclocale]..    
4d90: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62 61 72  mclocale foo_bar
4da0: 0a 09 20 20 20 20 6d 63 73 65 74 20 66 6f 6f 20  ..    mcset foo 
4db0: 6b 31 20 76 31 0a 09 7d 20 2d 63 6c 65 61 6e 75  k1 v1..} -cleanu
4dc0: 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  p {..    mclocal
4dd0: 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6e  e $locale..    n
4de0: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
4df0: 3a 3a 66 6f 6f 0a 09 7d 20 2d 62 6f 64 79 20 7b  ::foo..} -body {
4e00: 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
4e10: 65 76 61 6c 20 3a 3a 66 6f 6f 20 7b 0a 09 09 6c  eval ::foo {...l
4e20: 69 73 74 20 5b 3a 3a 6d 73 67 63 61 74 3a 3a 6d  ist [::msgcat::m
4e30: 63 65 78 69 73 74 73 20 6b 31 5d 5c 0a 09 09 09  cexists k1]\....
4e40: 5b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 65 78 69  [::msgcat::mcexi
4e50: 73 74 73 20 2d 6e 61 6d 65 73 70 61 63 65 20 3a  sts -namespace :
4e60: 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 20 6b 31  :msgcat::test k1
4e70: 5d 0a 09 20 20 20 20 7d 0a 09 7d 20 2d 72 65 73  ]..    }..} -res
4e80: 75 6c 74 20 7b 30 20 31 7d 0a 0a 09 74 65 73 74  ult {0 1}...test
4e90: 20 6d 73 67 63 61 74 2d 39 2e 36 20 7b 6d 63 65   msgcat-9.6 {mce
4ea0: 78 69 73 74 73 20 2d 6e 61 6d 65 73 70 61 63 65  xists -namespace
4eb0: 20 6e 73 20 70 61 72 61 6d 65 74 65 72 7d 20 2d   ns parameter} -
4ec0: 73 65 74 75 70 20 7b 0a 09 20 20 20 20 6d 63 66  setup {..    mcf
4ed0: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20  orgetpackage..  
4ee0: 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c    variable local
4ef0: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20  e [mclocale]..  
4f00: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62    mclocale foo_b
4f10: 61 72 0a 09 20 20 20 20 6d 63 73 65 74 20 66 6f  ar..    mcset fo
4f20: 6f 20 6b 31 20 76 31 0a 09 7d 20 2d 63 6c 65 61  o k1 v1..} -clea
4f30: 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63  nup {..    mcloc
4f40: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20  ale $locale..   
4f50: 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74   namespace delet
4f60: 65 20 3a 3a 66 6f 6f 0a 09 7d 20 2d 62 6f 64 79  e ::foo..} -body
4f70: 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63   {..    namespac
4f80: 65 20 65 76 61 6c 20 3a 3a 66 6f 6f 20 7b 0a 09  e eval ::foo {..
4f90: 09 6c 69 73 74 20 5b 3a 3a 6d 73 67 63 61 74 3a  .list [::msgcat:
4fa0: 3a 6d 63 65 78 69 73 74 73 20 6b 31 5d 5c 0a 09  :mcexists k1]\..
4fb0: 09 09 5b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 65  ..[::msgcat::mce
4fc0: 78 69 73 74 73 20 2d 6e 61 6d 65 73 70 61 63 65  xists -namespace
4fd0: 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 20   ::msgcat::test 
4fe0: 6b 31 5d 0a 09 20 20 20 20 7d 0a 09 7d 20 2d 72  k1]..    }..} -r
4ff0: 65 73 75 6c 74 20 7b 30 20 31 7d 0a 0a 09 74 65  esult {0 1}...te
5000: 73 74 20 6d 73 67 63 61 74 2d 39 2e 37 20 7b 6d  st msgcat-9.7 {m
5010: 63 65 78 69 73 74 73 20 2d 6e 61 6d 65 73 70 61  cexists -namespa
5020: 63 65 20 2d 20 6e 73 20 61 72 67 75 6d 65 6e 74  ce - ns argument
5030: 20 6d 69 73 73 69 6e 67 7d 20 2d 62 6f 64 79 20   missing} -body 
5040: 7b 0a 09 20 20 20 20 6d 63 65 78 69 73 74 73 20  {..    mcexists 
5050: 2d 6e 61 6d 65 73 70 61 63 65 20 73 72 63 0a 09  -namespace src..
5060: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31  } -returnCodes 1
5070: 5c 0a 09 2d 72 65 73 75 6c 74 20 7b 41 72 67 75  \..-result {Argu
5080: 6d 65 6e 74 20 6d 69 73 73 69 6e 67 20 66 6f 72  ment missing for
5090: 20 73 77 69 74 63 68 20 22 2d 6e 61 6d 65 73 70   switch "-namesp
50a0: 61 63 65 22 7d 0a 0a 0a 20 20 20 20 23 20 54 65  ace"}...    # Te
50b0: 73 74 73 20 6d 73 67 63 61 74 2d 31 30 2e 2a 3a  sts msgcat-10.*:
50c0: 20 5b 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65   [mcloadedlocale
50d0: 73 5d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74  s]...test msgcat
50e0: 2d 31 30 2e 31 20 7b 6d 63 6c 6f 61 64 65 64 6c  -10.1 {mcloadedl
50f0: 6f 63 61 6c 65 73 20 6e 6f 20 61 72 67 7d 20 2d  ocales no arg} -
5100: 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  body {..    mclo
5110: 61 64 65 64 6c 6f 63 61 6c 65 73 0a 09 7d 20 2d  adedlocales..} -
5120: 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09  returnCodes 1\..
5130: 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23  -result {wrong #
5140: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
5150: 20 22 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65   "mcloadedlocale
5160: 73 20 73 75 62 63 6f 6d 6d 61 6e 64 22 7d 0a 0a  s subcommand"}..
5170: 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 30 2e  .test msgcat-10.
5180: 32 20 7b 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c  2 {mcloadedlocal
5190: 65 73 20 77 72 6f 6e 67 20 73 75 62 63 6f 6d 6d  es wrong subcomm
51a0: 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  and} -body {..  
51b0: 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65    mcloadedlocale
51c0: 73 20 6a 75 6e 6b 0a 09 7d 20 2d 72 65 74 75 72  s junk..} -retur
51d0: 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72 65 73 75  nCodes 1\..-resu
51e0: 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 73 75 62 63  lt {unknown subc
51f0: 6f 6d 6d 61 6e 64 20 22 6a 75 6e 6b 22 3a 20 6d  ommand "junk": m
5200: 75 73 74 20 62 65 20 63 6c 65 61 72 2c 20 6f 72  ust be clear, or
5210: 20 6c 6f 61 64 65 64 7d 0a 0a 09 74 65 73 74 20   loaded}...test 
5220: 6d 73 67 63 61 74 2d 31 30 2e 33 20 7b 6d 63 6c  msgcat-10.3 {mcl
5230: 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 6c 6f 61  oadedlocales loa
5240: 64 65 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  ded} -setup {.. 
5250: 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61     mcforgetpacka
5260: 67 65 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65  ge..    variable
5270: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
5280: 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65  e]..    mclocale
5290: 20 7b 7d 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65   {}..    mcloade
52a0: 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72 0a 09  dlocales clear..
52b0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20  } -cleanup {..  
52c0: 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61    mclocale $loca
52d0: 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20  le..} -body {.. 
52e0: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f     mclocale foo_
52f0: 62 61 72 0a 09 20 20 20 20 23 20 54 68 65 20 72  bar..    # The r
5300: 65 73 75 6c 74 20 69 73 20 70 6f 73 69 74 69 6f  esult is positio
5310: 6e 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 73 6f  n independent so
5320: 20 73 6f 72 74 0a 09 20 20 20 20 73 65 74 20 72   sort..    set r
5330: 65 73 75 6c 74 6c 69 73 74 20 5b 6c 73 6f 72 74  esultlist [lsort
5340: 20 5b 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65   [mcloadedlocale
5350: 73 20 6c 6f 61 64 65 64 5d 5d 0a 09 7d 20 2d 72  s loaded]]..} -r
5360: 65 73 75 6c 74 20 7b 7b 7d 20 66 6f 6f 20 66 6f  esult {{} foo fo
5370: 6f 5f 62 61 72 7d 0a 0a 09 74 65 73 74 20 6d 73  o_bar}...test ms
5380: 67 63 61 74 2d 31 30 2e 34 20 7b 6d 63 6c 6f 61  gcat-10.4 {mcloa
5390: 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72  dedlocales clear
53a0: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20  } -setup {..    
53b0: 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a  mcforgetpackage.
53c0: 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f  .    variable lo
53d0: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
53e0: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 7b 7d  .    mclocale {}
53f0: 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f  ..    mcloadedlo
5400: 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 7d 20 2d  cales clear..} -
5410: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
5420: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
5430: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
5440: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20  mclocale foo..  
5450: 20 20 6d 63 73 65 74 20 66 6f 6f 20 6b 31 20 76    mcset foo k1 v
5460: 31 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 5b  1..    set res [
5470: 6d 63 65 78 69 73 74 73 20 6b 31 5d 0a 09 20 20  mcexists k1]..  
5480: 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a 09 20    mclocale "".. 
5490: 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c     mcloadedlocal
54a0: 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20 6d 63  es clear..    mc
54b0: 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20  locale foo..    
54c0: 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6d 63 65  lappend res [mce
54d0: 78 69 73 74 73 20 6b 31 5d 0a 09 7d 20 2d 72 65  xists k1]..} -re
54e0: 73 75 6c 74 20 7b 31 20 30 7d 0a 0a 20 20 20 20  sult {1 0}..    
54f0: 23 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d 31  # Tests msgcat-1
5500: 31 2e 2a 3a 20 5b 6d 63 66 6f 72 67 65 74 70 61  1.*: [mcforgetpa
5510: 63 6b 61 67 65 5d 0a 0a 09 74 65 73 74 20 6d 73  ckage]...test ms
5520: 67 63 61 74 2d 31 31 2e 31 20 7b 6d 63 66 6f 72  gcat-11.1 {mcfor
5530: 67 65 74 70 61 63 6b 61 67 65 20 74 72 61 6e 73  getpackage trans
5540: 6c 61 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b  lation} -setup {
5550: 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  ..    variable l
5560: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
5570: 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09  ..} -cleanup {..
5580: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f      mclocale $lo
5590: 63 61 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  cale..} -body {.
55a0: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f  .    mclocale fo
55b0: 6f 0a 09 20 20 20 20 6d 63 73 65 74 20 66 6f 6f  o..    mcset foo
55c0: 20 6b 31 20 76 31 0a 09 20 20 20 20 73 65 74 20   k1 v1..    set 
55d0: 72 65 73 20 5b 6d 63 65 78 69 73 74 73 20 6b 31  res [mcexists k1
55e0: 5d 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70  ]..    mcforgetp
55f0: 61 63 6b 61 67 65 0a 09 20 20 20 20 6c 61 70 70  ackage..    lapp
5600: 65 6e 64 20 72 65 73 20 5b 6d 63 65 78 69 73 74  end res [mcexist
5610: 73 20 6b 31 5d 0a 09 7d 20 2d 72 65 73 75 6c 74  s k1]..} -result
5620: 20 7b 31 20 30 7d 0a 0a 09 74 65 73 74 20 6d 73   {1 0}...test ms
5630: 67 63 61 74 2d 31 31 2e 32 20 7b 6d 63 66 6f 72  gcat-11.2 {mcfor
5640: 67 65 74 70 61 63 6b 61 67 65 20 6c 6f 63 61 6c  getpackage local
5650: 65 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  e} -setup {..   
5660: 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65   variable locale
5670: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d   [mclocale]..} -
5680: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
5690: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
56a0: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
56b0: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20  mclocale foo..  
56c0: 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c    mcpackagelocal
56d0: 65 20 73 65 74 20 62 61 72 0a 09 20 20 20 20 73  e set bar..    s
56e0: 65 74 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67  et res [mcpackag
56f0: 65 6c 6f 63 61 6c 65 20 67 65 74 5d 0a 09 20 20  elocale get]..  
5700: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
5710: 65 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  e..    lappend r
5720: 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63  es [mcpackageloc
5730: 61 6c 65 20 67 65 74 5d 0a 09 7d 20 2d 72 65 73  ale get]..} -res
5740: 75 6c 74 20 7b 62 61 72 20 66 6f 6f 7d 0a 0a 09  ult {bar foo}...
5750: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 31 2e 33  test msgcat-11.3
5760: 20 7b 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67   {mcforgetpackag
5770: 65 20 6f 70 74 69 6f 6e 73 7d 20 2d 62 6f 64 79  e options} -body
5780: 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67   {..    mcpackag
5790: 65 63 6f 6e 66 69 67 20 73 65 74 20 6c 6f 61 64  econfig set load
57a0: 63 6d 64 20 22 22 0a 09 20 20 20 20 73 65 74 20  cmd ""..    set 
57b0: 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 63 6f  res [mcpackageco
57c0: 6e 66 69 67 20 69 73 73 65 74 20 6c 6f 61 64 63  nfig isset loadc
57d0: 6d 64 5d 0a 09 20 20 20 20 6d 63 66 6f 72 67 65  md]..    mcforge
57e0: 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20 6c 61  tpackage..    la
57f0: 70 70 65 6e 64 20 72 65 73 20 5b 6d 63 70 61 63  ppend res [mcpac
5800: 6b 61 67 65 63 6f 6e 66 69 67 20 69 73 73 65 74  kageconfig isset
5810: 20 6c 6f 61 64 63 6d 64 5d 0a 09 7d 20 2d 72 65   loadcmd]..} -re
5820: 73 75 6c 74 20 7b 31 20 30 7d 0a 0a 20 20 20 20  sult {1 0}..    
5830: 23 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d 31  # Tests msgcat-1
5840: 32 2e 2a 3a 20 5b 6d 63 70 61 63 6b 61 67 65 6c  2.*: [mcpackagel
5850: 6f 63 61 6c 65 5d 0a 0a 09 74 65 73 74 20 6d 73  ocale]...test ms
5860: 67 63 61 74 2d 31 32 2e 31 20 7b 6d 63 70 61 63  gcat-12.1 {mcpac
5870: 6b 61 67 65 6c 6f 63 61 6c 65 20 6e 6f 20 73 75  kagelocale no su
5880: 62 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20  bcommand} -body 
5890: 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65  {..    mcpackage
58a0: 6c 6f 63 61 6c 65 0a 09 7d 20 2d 72 65 74 75 72  locale..} -retur
58b0: 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72 65 73 75  nCodes 1\..-resu
58c0: 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73  lt {wrong # args
58d0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 6d 63 70  : should be "mcp
58e0: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73 75 62  ackagelocale sub
58f0: 63 6f 6d 6d 61 6e 64 20 3f 61 72 67 20 2e 2e 2e  command ?arg ...
5900: 3f 22 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61  ?"}...test msgca
5910: 74 2d 31 32 2e 32 20 7b 6d 63 6c 70 61 63 6b 61  t-12.2 {mclpacka
5920: 67 65 6c 6f 63 61 6c 65 20 77 72 6f 6e 67 20 73  gelocale wrong s
5930: 75 62 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79  ubcommand} -body
5940: 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67   {..    mcpackag
5950: 65 6c 6f 63 61 6c 65 20 6a 75 6e 6b 0a 09 7d 20  elocale junk..} 
5960: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a  -returnCodes 1\.
5970: 09 2d 72 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77  .-result {unknow
5980: 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22 6a 75  n subcommand "ju
5990: 6e 6b 22 3a 20 6d 75 73 74 20 62 65 20 63 6c 65  nk": must be cle
59a0: 61 72 2c 20 67 65 74 2c 20 69 73 73 65 74 2c 20  ar, get, isset, 
59b0: 6c 6f 61 64 65 64 2c 20 70 72 65 73 65 6e 74 2c  loaded, present,
59c0: 20 73 65 74 2c 20 6f 72 20 75 6e 73 65 74 7d 0a   set, or unset}.
59d0: 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 32  ..test msgcat-12
59e0: 2e 32 2e 31 20 7b 6d 63 6c 70 61 63 6b 61 67 65  .2.1 {mclpackage
59f0: 6c 6f 63 61 6c 65 20 73 65 74 20 6d 75 6c 74 69  locale set multi
5a00: 70 6c 65 20 61 72 67 73 7d 20 2d 62 6f 64 79 20  ple args} -body 
5a10: 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65  {..    mcpackage
5a20: 6c 6f 63 61 6c 65 20 73 65 74 20 61 20 62 0a 09  locale set a b..
5a30: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31  } -returnCodes 1
5a40: 5c 0a 09 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e  \..-result {wron
5a50: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
5a60: 20 62 65 20 22 6d 63 70 61 63 6b 61 67 65 6c 6f   be "mcpackagelo
5a70: 63 61 6c 65 20 73 65 74 20 3f 6c 6f 63 61 6c 65  cale set ?locale
5a80: 3f 22 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61  ?"}...test msgca
5a90: 74 2d 31 32 2e 33 20 7b 6d 63 70 61 63 6b 61 67  t-12.3 {mcpackag
5aa0: 65 6c 6f 63 61 6c 65 20 73 65 74 7d 20 2d 73 65  elocale set} -se
5ab0: 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61  tup {..    varia
5ac0: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
5ad0: 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75  cale]..} -cleanu
5ae0: 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  p {..    mclocal
5af0: 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d  e $locale..    m
5b00: 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09  cforgetpackage..
5b10: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
5b20: 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20  clocale foo..   
5b30: 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65   mcpackagelocale
5b40: 20 73 65 74 20 62 61 72 0a 09 20 20 20 20 6c 69   set bar..    li
5b50: 73 74 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63  st [mcpackageloc
5b60: 61 6c 65 20 67 65 74 5d 20 5b 6d 63 6c 6f 63 61  ale get] [mcloca
5b70: 6c 65 5d 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b  le]..} -result {
5b80: 62 61 72 20 66 6f 6f 7d 0a 0a 09 74 65 73 74 20  bar foo}...test 
5b90: 6d 73 67 63 61 74 2d 31 32 2e 34 20 7b 6d 63 70  msgcat-12.4 {mcp
5ba0: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 67 65 74  ackagelocale get
5bb0: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20  } -setup {..    
5bc0: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
5bd0: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d 63  [mclocale]..} -c
5be0: 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63  leanup {..    mc
5bf0: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09  locale $locale..
5c00: 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b      mcforgetpack
5c10: 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09  age..} -body {..
5c20: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f      mclocale foo
5c30: 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 5b 6d  ..    set res [m
5c40: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 67  cpackagelocale g
5c50: 65 74 5d 0a 09 20 20 20 20 6d 63 70 61 63 6b 61  et]..    mcpacka
5c60: 67 65 6c 6f 63 61 6c 65 20 73 65 74 20 62 61 72  gelocale set bar
5c70: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
5c80: 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61  s [mcpackageloca
5c90: 6c 65 20 67 65 74 5d 0a 09 7d 20 2d 72 65 73 75  le get]..} -resu
5ca0: 6c 74 20 7b 66 6f 6f 20 62 61 72 7d 0a 0a 09 74  lt {foo bar}...t
5cb0: 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e 35 20  est msgcat-12.5 
5cc0: 7b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  {mcpackagelocale
5cd0: 20 70 72 65 66 65 72 65 6e 63 65 73 7d 20 2d 73   preferences} -s
5ce0: 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69  etup {..    vari
5cf0: 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c  able locale [mcl
5d00: 6f 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e  ocale]..} -clean
5d10: 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61  up {..    mcloca
5d20: 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20  le $locale..    
5d30: 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a  mcforgetpackage.
5d40: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
5d50: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20  mclocale foo..  
5d60: 20 20 73 65 74 20 72 65 73 20 5b 6c 69 73 74 20    set res [list 
5d70: 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  [mcpackagelocale
5d80: 20 70 72 65 66 65 72 65 6e 63 65 73 5d 5d 0a 09   preferences]]..
5d90: 20 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63      mcpackageloc
5da0: 61 6c 65 20 73 65 74 20 62 61 72 0a 09 20 20 20  ale set bar..   
5db0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6d 63   lappend res [mc
5dc0: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72  packagelocale pr
5dd0: 65 66 65 72 65 6e 63 65 73 5d 0a 09 7d 20 2d 72  eferences]..} -r
5de0: 65 73 75 6c 74 20 7b 7b 66 6f 6f 20 7b 7d 7d 20  esult {{foo {}} 
5df0: 7b 62 61 72 20 7b 7d 7d 7d 0a 0a 09 74 65 73 74  {bar {}}}...test
5e00: 20 6d 73 67 63 61 74 2d 31 32 2e 36 20 7b 6d 63   msgcat-12.6 {mc
5e10: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 6c 6f  packagelocale lo
5e20: 61 64 65 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09  aded} -setup {..
5e30: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63      variable loc
5e40: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
5e50: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20  } -cleanup {..  
5e60: 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61    mclocale $loca
5e70: 6c 65 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74  le..    mcforget
5e80: 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79  package..} -body
5e90: 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65   {..    mclocale
5ea0: 20 22 22 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65   ""..    mcloade
5eb0: 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72 0a 09  dlocales clear..
5ec0: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f      mclocale foo
5ed0: 0a 09 20 20 20 20 23 20 54 68 65 20 72 65 73 75  ..    # The resu
5ee0: 6c 74 20 69 73 20 70 6f 73 69 74 69 6f 6e 20 69  lt is position i
5ef0: 6e 64 65 70 65 6e 64 65 6e 74 20 73 6f 20 73 6f  ndependent so so
5f00: 72 74 0a 09 20 20 20 20 73 65 74 20 72 65 73 20  rt..    set res 
5f10: 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 6d 63  [list [lsort [mc
5f20: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 6c 6f  packagelocale lo
5f30: 61 64 65 64 5d 5d 5d 0a 09 20 20 20 20 6d 63 70  aded]]]..    mcp
5f40: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73 65 74  ackagelocale set
5f50: 20 62 61 72 0a 09 20 20 20 20 6c 61 70 70 65 6e   bar..    lappen
5f60: 64 20 72 65 73 20 5b 6c 73 6f 72 74 20 5b 6d 63  d res [lsort [mc
5f70: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 6c 6f  packagelocale lo
5f80: 61 64 65 64 5d 5d 0a 09 7d 20 2d 72 65 73 75 6c  aded]]..} -resul
5f90: 74 20 7b 7b 7b 7d 20 66 6f 6f 7d 20 7b 7b 7d 20  t {{{} foo} {{} 
5fa0: 62 61 72 20 66 6f 6f 7d 7d 0a 0a 09 74 65 73 74  bar foo}}...test
5fb0: 20 6d 73 67 63 61 74 2d 31 32 2e 37 20 7b 6d 63   msgcat-12.7 {mc
5fc0: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 69 73  packagelocale is
5fd0: 73 65 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  set} -setup {.. 
5fe0: 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61     variable loca
5ff0: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d  le [mclocale]..}
6000: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20   -cleanup {..   
6010: 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c   mclocale $local
6020: 65 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70  e..    mcforgetp
6030: 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20  ackage..} -body 
6040: 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  {..    mclocale 
6050: 66 6f 6f 0a 09 20 20 20 20 73 65 74 20 72 65 73  foo..    set res
6060: 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c   [mcpackagelocal
6070: 65 20 69 73 73 65 74 5d 0a 09 20 20 20 20 6d 63  e isset]..    mc
6080: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73 65  packagelocale se
6090: 74 20 62 61 72 0a 09 20 20 20 20 6c 61 70 70 65  t bar..    lappe
60a0: 6e 64 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67  nd res [mcpackag
60b0: 65 6c 6f 63 61 6c 65 20 69 73 73 65 74 5d 0a 09  elocale isset]..
60c0: 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 31 7d 0a  } -result {0 1}.
60d0: 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 32  ..test msgcat-12
60e0: 2e 38 20 7b 6d 63 70 61 63 6b 61 67 65 6c 6f 63  .8 {mcpackageloc
60f0: 61 6c 65 20 75 6e 73 65 74 7d 20 2d 73 65 74 75  ale unset} -setu
6100: 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c  p {..    variabl
6110: 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  e locale [mcloca
6120: 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20  le]..} -cleanup 
6130: 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  {..    mclocale 
6140: 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63 66  $locale..    mcf
6150: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 7d 20  orgetpackage..} 
6160: 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 70  -body {..    mcp
6170: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73 65 74  ackagelocale set
6180: 20 62 61 72 0a 09 20 20 20 20 73 65 74 20 72 65   bar..    set re
6190: 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61  s [mcpackageloca
61a0: 6c 65 20 69 73 73 65 74 5d 0a 09 20 20 20 20 6d  le isset]..    m
61b0: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 75  cpackagelocale u
61c0: 6e 73 65 74 0a 09 20 20 20 20 6c 61 70 70 65 6e  nset..    lappen
61d0: 64 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65  d res [mcpackage
61e0: 6c 6f 63 61 6c 65 20 69 73 73 65 74 5d 0a 09 7d  locale isset]..}
61f0: 20 2d 72 65 73 75 6c 74 20 7b 31 20 30 7d 0a 0a   -result {1 0}..
6200: 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e  .test msgcat-12.
6210: 39 20 7b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61  9 {mcpackageloca
6220: 6c 65 20 70 72 65 73 65 6e 74 7d 20 2d 73 65 74  le present} -set
6230: 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62  up {..    variab
6240: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
6250: 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75 70  ale]..} -cleanup
6260: 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65   {..    mclocale
6270: 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63   $locale..    mc
6280: 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 7d  forgetpackage..}
6290: 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63   -body {..    mc
62a0: 6c 6f 63 61 6c 65 20 22 22 0a 09 20 20 20 20 6d  locale ""..    m
62b0: 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 63  cloadedlocales c
62c0: 6c 65 61 72 0a 09 20 20 20 20 6d 63 6c 6f 63 61  lear..    mcloca
62d0: 6c 65 20 66 6f 6f 0a 09 20 20 20 20 73 65 74 20  le foo..    set 
62e0: 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f  res [mcpackagelo
62f0: 63 61 6c 65 20 70 72 65 73 65 6e 74 20 66 6f 6f  cale present foo
6300: 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  ]..    lappend r
6310: 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63  es [mcpackageloc
6320: 61 6c 65 20 70 72 65 73 65 6e 74 20 62 61 72 5d  ale present bar]
6330: 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 6c  ..    mcpackagel
6340: 6f 63 61 6c 65 20 73 65 74 20 62 61 72 0a 09 20  ocale set bar.. 
6350: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b     lappend res [
6360: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
6370: 70 72 65 73 65 6e 74 20 66 6f 6f 5d 5c 0a 09 09  present foo]\...
6380: 20 20 20 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f      [mcpackagelo
6390: 63 61 6c 65 20 70 72 65 73 65 6e 74 20 62 61 72  cale present bar
63a0: 5d 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20  ]..} -result {1 
63b0: 30 20 31 20 31 7d 0a 0a 09 74 65 73 74 20 6d 73  0 1 1}...test ms
63c0: 67 63 61 74 2d 31 32 2e 31 30 20 7b 6d 63 70 61  gcat-12.10 {mcpa
63d0: 63 6b 61 67 65 6c 6f 63 61 6c 65 20 63 6c 65 61  ckagelocale clea
63e0: 72 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20  r} -setup {..   
63f0: 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65   variable locale
6400: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d   [mclocale]..} -
6410: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
6420: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
6430: 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63  .    mcforgetpac
6440: 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  kage..} -body {.
6450: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22  .    mclocale ""
6460: 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f  ..    mcloadedlo
6470: 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20  cales clear..   
6480: 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20   mclocale foo.. 
6490: 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61     mcpackageloca
64a0: 6c 65 20 73 65 74 20 62 61 72 0a 09 20 20 20 20  le set bar..    
64b0: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
64c0: 63 6c 65 61 72 0a 09 20 20 20 20 6c 69 73 74 20  clear..    list 
64d0: 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  [mcpackagelocale
64e0: 20 70 72 65 73 65 6e 74 20 66 6f 6f 5d 20 5b 6d   present foo] [m
64f0: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70  cpackagelocale p
6500: 72 65 73 65 6e 74 20 62 61 72 5d 0a 09 7d 20 2d  resent bar]..} -
6510: 72 65 73 75 6c 74 20 7b 30 20 31 7d 0a 0a 09 74  result {0 1}...t
6520: 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e 31 31  est msgcat-12.11
6530: 20 7b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c   {mcpackagelocal
6540: 65 20 63 75 73 74 6f 6d 20 70 72 65 66 65 72 65  e custom prefere
6550: 6e 63 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09  nces} -setup {..
6560: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63      variable loc
6570: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
6580: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20  } -cleanup {..  
6590: 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61    mclocale $loca
65a0: 6c 65 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74  le..    mcforget
65b0: 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79  package..} -body
65c0: 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65   {..    mclocale
65d0: 20 66 6f 6f 0a 09 20 20 20 20 73 65 74 20 72 65   foo..    set re
65e0: 73 20 5b 6c 69 73 74 20 5b 6d 63 70 61 63 6b 61  s [list [mcpacka
65f0: 67 65 6c 6f 63 61 6c 65 20 70 72 65 66 65 72 65  gelocale prefere
6600: 6e 63 65 73 5d 5d 0a 09 20 20 20 20 6d 63 70 61  nces]]..    mcpa
6610: 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72 65 66  ckagelocale pref
6620: 65 72 65 6e 63 65 73 20 62 61 72 20 7b 7d 0a 09  erences bar {}..
6630: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20      lappend res 
6640: 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  [mcpackagelocale
6650: 20 70 72 65 66 65 72 65 6e 63 65 73 5d 0a 09 7d   preferences]..}
6660: 20 2d 72 65 73 75 6c 74 20 7b 7b 66 6f 6f 20 7b   -result {{foo {
6670: 7d 7d 20 7b 62 61 72 20 7b 7d 7d 7d 0a 0a 09 74  }} {bar {}}}...t
6680: 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e 31 32  est msgcat-12.12
6690: 20 7b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c   {mcpackagelocal
66a0: 65 20 70 72 65 66 65 72 65 6e 63 65 73 20 2d 3e  e preferences ->
66b0: 20 6e 6f 20 69 73 73 65 74 7d 20 2d 73 65 74 75   no isset} -setu
66c0: 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c  p {..    variabl
66d0: 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  e locale [mcloca
66e0: 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20  le]..} -cleanup 
66f0: 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  {..    mclocale 
6700: 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63 66  $locale..    mcf
6710: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 7d 20  orgetpackage..} 
6720: 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c  -body {..    mcl
6730: 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20 6d  ocale foo..    m
6740: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70  cpackagelocale p
6750: 72 65 66 65 72 65 6e 63 65 73 0a 09 20 20 20 20  references..    
6760: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
6770: 69 73 73 65 74 0a 09 7d 20 2d 72 65 73 75 6c 74  isset..} -result
6780: 20 7b 30 7d 0a 0a 09 66 6f 72 65 61 63 68 20 6c   {0}...foreach l
6790: 20 5b 6c 69 73 74 20 7b 2a 7d 7b 0a 09 20 20 20   [list {*}{..   
67a0: 20 2e 2e 2f 55 4e 53 41 46 45 50 41 54 48 2f 4e   ../UNSAFEPATH/N
67b0: 4f 57 48 45 52 45 20 55 4e 53 41 46 45 50 41 54  OWHERE UNSAFEPAT
67c0: 48 2f 2e 2e 2f 45 4e 20 2f 2f 55 4e 53 41 46 45  H/../EN //UNSAFE
67d0: 50 41 54 48 2f 4e 4f 57 48 45 52 45 0a 09 20 20  PATH/NOWHERE..  
67e0: 20 20 7a 69 70 66 73 3a 2f 55 4e 53 41 46 45 50    zipfs:/UNSAFEP
67f0: 41 54 48 2f 4e 4f 57 48 45 52 45 20 43 3a 2f 55  ATH/NOWHERE C:/U
6800: 4e 53 41 46 45 50 41 54 48 2f 4e 4f 57 48 45 52  NSAFEPATH/NOWHER
6810: 45 0a 09 20 20 20 20 7e 2f 55 4e 53 41 46 45 50  E..    ~/UNSAFEP
6820: 41 54 48 2f 4e 4f 57 48 45 52 45 20 7e 55 4e 53  ATH/NOWHERE ~UNS
6830: 41 46 45 55 53 45 52 2f 4e 4f 57 48 45 52 45 0a  AFEUSER/NOWHERE.
6840: 09 20 20 7d 20 5b 6c 69 73 74 20 5b 66 69 6c 65  .  } [list [file
6850: 20 6a 6f 69 6e 20 5b 69 6e 66 6f 20 6c 69 62 72   join [info libr
6860: 61 72 79 5d 20 6d 73 67 73 5d 5d 0a 09 5d 20 7b  ary] msgs]]..] {
6870: 0a 09 20 20 73 65 74 20 6c 20 5b 73 74 72 69 6e  ..  set l [strin
6880: 67 20 74 6f 6c 6f 77 65 72 20 24 6c 5d 0a 09 20  g tolower $l].. 
6890: 20 66 6f 72 65 61 63 68 20 6c 20 5b 6c 69 73 74   foreach l [list
68a0: 20 24 6c 20 5b 73 74 72 69 6e 67 20 6d 61 70 20   $l [string map 
68b0: 7b 2f 20 5c 5c 7d 20 24 6c 5d 5d 20 7b 0a 09 20  {/ \\} $l]] {.. 
68c0: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31     test msgcat-1
68d0: 32 2e 31 33 2d 24 6c 20 22 6d 63 70 61 63 6b 61  2.13-$l "mcpacka
68e0: 67 65 6c 6f 63 61 6c 65 20 73 65 74 20 2d 20 62  gelocale set - b
68f0: 61 64 20 6c 6f 63 61 6c 65 20 28 6e 6f 74 20 76  ad locale (not v
6900: 61 6c 69 64 20 2d 20 75 6e 73 61 66 65 20 70 61  alid - unsafe pa
6910: 74 68 29 22 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  th)" -cleanup {.
6920: 09 20 20 20 20 20 20 6d 63 66 6f 72 67 65 74 70  .      mcforgetp
6930: 61 63 6b 61 67 65 0a 09 20 20 20 20 7d 20 2d 62  ackage..    } -b
6940: 6f 64 79 20 7b 0a 09 20 20 20 20 20 20 6d 63 70  ody {..      mcp
6950: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73 65 74  ackagelocale set
6960: 20 24 6c 0a 09 20 20 20 20 7d 20 2d 72 65 74 75   $l..    } -retu
6970: 72 6e 43 6f 64 65 73 20 31 20 2d 72 65 73 75 6c  rnCodes 1 -resul
6980: 74 20 22 6c 6f 63 61 6c 65 20 5c 22 24 6c 5c 22  t "locale \"$l\"
6990: 20 6e 6f 74 20 76 61 6c 69 64 22 20 2d 65 72 72   not valid" -err
69a0: 6f 72 43 6f 64 65 20 7b 4d 53 47 43 41 54 20 62  orCode {MSGCAT b
69b0: 61 64 4c 6f 63 61 6c 65 20 2a 7d 0a 09 20 20 20  adLocale *}..   
69c0: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e   test msgcat-12.
69d0: 31 34 2d 24 6c 20 22 6d 63 70 61 63 6b 61 67 65  14-$l "mcpackage
69e0: 6c 6f 63 61 6c 65 20 70 72 65 66 65 72 65 6e 63  locale preferenc
69f0: 65 73 20 2d 20 62 61 64 20 6c 6f 63 61 6c 65 20  es - bad locale 
6a00: 28 6e 6f 74 20 76 61 6c 69 64 20 2d 20 75 6e 73  (not valid - uns
6a10: 61 66 65 20 70 61 74 68 29 22 20 2d 63 6c 65 61  afe path)" -clea
6a20: 6e 75 70 20 7b 0a 09 20 20 20 20 20 20 6d 63 66  nup {..      mcf
6a30: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20  orgetpackage..  
6a40: 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20    } -body {..   
6a50: 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61     mcpackageloca
6a60: 6c 65 20 70 72 65 66 65 72 65 6e 63 65 73 20 65  le preferences e
6a70: 6e 20 24 6c 20 7b 7d 0a 09 20 20 20 20 7d 20 2d  n $l {}..    } -
6a80: 72 65 74 75 72 6e 43 6f 64 65 73 20 31 20 2d 72  returnCodes 1 -r
6a90: 65 73 75 6c 74 20 22 6c 6f 63 61 6c 65 20 5c 22  esult "locale \"
6aa0: 24 6c 5c 22 20 6e 6f 74 20 76 61 6c 69 64 22 20  $l\" not valid" 
6ab0: 2d 65 72 72 6f 72 43 6f 64 65 20 7b 4d 53 47 43  -errorCode {MSGC
6ac0: 41 54 20 62 61 64 4c 6f 63 61 6c 65 20 2a 7d 0a  AT badLocale *}.
6ad0: 09 20 20 7d 0a 09 7d 0a 09 75 6e 73 65 74 20 6c  .  }..}..unset l
6ae0: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31  ...test msgcat-1
6af0: 32 2e 31 35 20 7b 6d 63 70 61 63 6b 61 67 65 6c  2.15 {mcpackagel
6b00: 6f 63 61 6c 65 20 70 72 65 66 65 72 65 6e 63 65  ocale preference
6b10: 73 20 64 6f 65 73 20 6e 6f 74 20 73 6f 75 72 63  s does not sourc
6b20: 65 20 61 20 66 69 6c 65 20 6f 75 74 73 69 64 65  e a file outside
6b30: 20 74 68 65 20 6d 73 67 63 61 74 20 64 69 72 65   the msgcat dire
6b40: 63 74 6f 72 79 20 5b 32 66 38 62 62 34 38 30 30  ctory [2f8bb4800
6b50: 39 5d 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20  9]} -setup {..  
6b60: 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c    variable local
6b70: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20  e [mclocale]..  
6b80: 20 20 73 65 74 20 66 20 5b 6d 61 6b 65 46 69 6c    set f [makeFil
6b90: 65 20 7b 73 65 74 20 3a 3a 6d 73 67 63 61 74 3a  e {set ::msgcat:
6ba0: 3a 74 65 73 74 3a 3a 6c 6f 61 64 65 64 20 31 7d  :test::loaded 1}
6bb0: 20 75 6e 73 61 66 65 2e 6d 73 67 5d 0a 09 20 20   unsafe.msg]..  
6bc0: 20 20 73 65 74 20 6c 6f 61 64 65 64 20 30 0a 09    set loaded 0..
6bd0: 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e      mcpackagecon
6be0: 66 69 67 20 73 65 74 20 6d 63 66 6f 6c 64 65 72  fig set mcfolder
6bf0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 74 65 6d   [file join [tem
6c00: 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 5d  poraryDirectory]
6c10: 20 6e 6f 73 75 63 68 64 69 72 5d 0a 09 7d 20 2d   nosuchdir]..} -
6c20: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
6c30: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
6c40: 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63  .    mcforgetpac
6c50: 6b 61 67 65 0a 09 20 20 20 20 72 65 6d 6f 76 65  kage..    remove
6c60: 46 69 6c 65 20 75 6e 73 61 66 65 2e 6d 73 67 0a  File unsafe.msg.
6c70: 09 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  .    unset -noco
6c80: 6d 70 6c 61 69 6e 20 66 20 6c 6f 61 64 65 64 0a  mplain f loaded.
6c90: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
6ca0: 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 6d 63 70  list [catch {mcp
6cb0: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72 65  ackagelocale pre
6cc0: 66 65 72 65 6e 63 65 73 20 5b 66 69 6c 65 20 72  ferences [file r
6cd0: 6f 6f 74 6e 61 6d 65 20 24 66 5d 20 7b 7d 7d 5d  ootname $f] {}}]
6ce0: 20 24 6c 6f 61 64 65 64 0a 09 7d 20 2d 72 65 73   $loaded..} -res
6cf0: 75 6c 74 20 7b 31 20 30 7d 0a 0a 0a 20 20 20 20  ult {1 0}...    
6d00: 23 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d 31  # Tests msgcat-1
6d10: 33 2e 2a 3a 20 5b 6d 63 70 61 63 6b 61 67 65 63  3.*: [mcpackagec
6d20: 6f 6e 66 69 67 20 73 75 62 63 6d 64 73 5d 0a 0a  onfig subcmds]..
6d30: 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 33 2e  .test msgcat-13.
6d40: 31 20 7b 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66  1 {mcpackageconf
6d50: 69 67 20 6e 6f 20 73 75 62 63 6f 6d 6d 61 6e 64  ig no subcommand
6d60: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
6d70: 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 0a 09  cpackageconfig..
6d80: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31  } -returnCodes 1
6d90: 5c 0a 09 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e  \..-result {wron
6da0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
6db0: 20 62 65 20 22 6d 63 70 61 63 6b 61 67 65 63 6f   be "mcpackageco
6dc0: 6e 66 69 67 20 73 75 62 63 6f 6d 6d 61 6e 64 20  nfig subcommand 
6dd0: 6f 70 74 69 6f 6e 20 3f 76 61 6c 75 65 3f 22 7d  option ?value?"}
6de0: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31  ...test msgcat-1
6df0: 33 2e 32 20 7b 6d 63 6c 70 61 63 6b 61 67 65 63  3.2 {mclpackagec
6e00: 6f 6e 66 69 67 20 77 72 6f 6e 67 20 73 75 62 63  onfig wrong subc
6e10: 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a  ommand} -body {.
6e20: 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f  .    mcpackageco
6e30: 6e 66 69 67 20 6a 75 6e 6b 20 6d 63 66 6f 6c 64  nfig junk mcfold
6e40: 65 72 0a 09 7d 20 2d 72 65 74 75 72 6e 43 6f 64  er..} -returnCod
6e50: 65 73 20 31 5c 0a 09 2d 72 65 73 75 6c 74 20 7b  es 1\..-result {
6e60: 75 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61  unknown subcomma
6e70: 6e 64 20 22 6a 75 6e 6b 22 3a 20 6d 75 73 74 20  nd "junk": must 
6e80: 62 65 20 67 65 74 2c 20 69 73 73 65 74 2c 20 73  be get, isset, s
6e90: 65 74 2c 20 6f 72 20 75 6e 73 65 74 7d 0a 0a 09  et, or unset}...
6ea0: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 33 2e 33  test msgcat-13.3
6eb0: 20 7b 6d 63 6c 70 61 63 6b 61 67 65 63 6f 6e 66   {mclpackageconf
6ec0: 69 67 20 77 72 6f 6e 67 20 6f 70 74 69 6f 6e 7d  ig wrong option}
6ed0: 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63   -body {..    mc
6ee0: 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 67 65  packageconfig ge
6ef0: 74 20 6a 75 6e 6b 0a 09 7d 20 2d 72 65 74 75 72  t junk..} -retur
6f00: 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72 65 73 75  nCodes 1\..-resu
6f10: 6c 74 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22  lt {bad option "
6f20: 6a 75 6e 6b 22 3a 20 6d 75 73 74 20 62 65 20 6d  junk": must be m
6f30: 63 66 6f 6c 64 65 72 2c 20 6c 6f 61 64 63 6d 64  cfolder, loadcmd
6f40: 2c 20 63 68 61 6e 67 65 63 6d 64 2c 20 6f 72 20  , changecmd, or 
6f50: 75 6e 6b 6e 6f 77 6e 63 6d 64 7d 0a 0a 09 74 65  unknowncmd}...te
6f60: 73 74 20 6d 73 67 63 61 74 2d 31 33 2e 34 20 7b  st msgcat-13.4 {
6f70: 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20  mcpackageconfig 
6f80: 67 65 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  get} -setup {.. 
6f90: 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61     mcforgetpacka
6fa0: 67 65 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  ge..} -cleanup {
6fb0: 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61  ..    mcforgetpa
6fc0: 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b  ckage..} -body {
6fd0: 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63  ..    mcpackagec
6fe0: 6f 6e 66 69 67 20 73 65 74 20 6c 6f 61 64 63 6d  onfig set loadcm
6ff0: 64 20 22 22 0a 09 20 20 20 20 6d 63 70 61 63 6b  d ""..    mcpack
7000: 61 67 65 63 6f 6e 66 69 67 20 67 65 74 20 6c 6f  ageconfig get lo
7010: 61 64 63 6d 64 0a 09 7d 20 2d 72 65 73 75 6c 74  adcmd..} -result
7020: 20 7b 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61   {}...test msgca
7030: 74 2d 31 33 2e 35 20 7b 6d 63 70 61 63 6b 61 67  t-13.5 {mcpackag
7040: 65 63 6f 6e 66 69 67 20 28 69 73 2f 75 6e 29 73  econfig (is/un)s
7050: 65 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20  et} -setup {..  
7060: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
7070: 65 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  e..} -cleanup {.
7080: 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63  .    mcforgetpac
7090: 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  kage..} -body {.
70a0: 09 20 20 20 20 73 65 74 20 72 65 73 20 5b 6d 63  .    set res [mc
70b0: 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 69 73  packageconfig is
70c0: 73 65 74 20 6c 6f 61 64 63 6d 64 5d 0a 09 20 20  set loadcmd]..  
70d0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6d    lappend res [m
70e0: 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 73  cpackageconfig s
70f0: 65 74 20 6c 6f 61 64 63 6d 64 20 22 22 5d 0a 09  et loadcmd ""]..
7100: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20      lappend res 
7110: 5b 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67  [mcpackageconfig
7120: 20 69 73 73 65 74 20 6c 6f 61 64 63 6d 64 5d 0a   isset loadcmd].
7130: 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f  .    mcpackageco
7140: 6e 66 69 67 20 75 6e 73 65 74 20 6c 6f 61 64 63  nfig unset loadc
7150: 6d 64 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  md..    lappend 
7160: 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 63 6f  res [mcpackageco
7170: 6e 66 69 67 20 69 73 73 65 74 20 6c 6f 61 64 63  nfig isset loadc
7180: 6d 64 5d 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b  md]..} -result {
7190: 30 20 30 20 31 20 30 7d 0a 0a 20 20 20 20 23 20  0 0 1 0}..    # 
71a0: 6f 70 74 69 6f 6e 20 6d 63 66 6f 6c 64 65 72 20  option mcfolder 
71b0: 69 73 20 61 6c 72 65 61 64 79 20 74 65 73 74 65  is already teste
71c0: 64 20 77 69 74 68 20 35 2e 31 31 0a 0a 20 20 20  d with 5.11..   
71d0: 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d   # Tests msgcat-
71e0: 31 34 2e 2a 3a 20 63 61 6c 6c 62 61 63 6b 73 3a  14.*: callbacks:
71f0: 20 6c 6f 61 64 63 6d 64 2c 20 63 68 61 6e 67 65   loadcmd, change
7200: 63 6d 64 2c 20 75 6e 6b 6e 6f 77 6e 63 6d 64 0a  cmd, unknowncmd.
7210: 0a 20 20 20 20 23 20 54 68 69 73 20 72 6f 75 74  .    # This rout
7220: 69 6e 65 20 69 73 20 75 73 65 64 20 61 73 20 62  ine is used as b
7230: 67 65 72 72 6f 72 20 61 6e 64 20 62 79 20 64 69  gerror and by di
7240: 72 65 63 74 20 63 61 6c 6c 62 61 63 6b 20 69 6e  rect callback in
7250: 76 6f 63 61 74 69 6f 6e 0a 20 20 20 20 70 72 6f  vocation.    pro
7260: 63 20 63 61 6c 6c 62 61 63 6b 70 72 6f 63 20 61  c callbackproc a
7270: 72 67 73 20 7b 0a 09 76 61 72 69 61 62 6c 65 20  rgs {..variable 
7280: 72 65 73 75 6c 74 76 61 72 69 61 62 6c 65 0a 09  resultvariable..
7290: 73 65 74 20 72 65 73 75 6c 74 76 61 72 69 61 62  set resultvariab
72a0: 6c 65 20 24 61 72 67 73 0a 20 20 20 20 7d 0a 20  le $args.    }. 
72b0: 20 20 20 70 72 6f 63 20 63 61 6c 6c 62 61 63 6b     proc callback
72c0: 66 61 69 6c 70 72 6f 63 20 61 72 67 73 20 7b 0a  failproc args {.
72d0: 09 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72  .return -code er
72e0: 72 6f 72 20 66 61 69 6c 0a 20 20 20 20 7d 0a 20  ror fail.    }. 
72f0: 20 20 20 73 65 74 20 62 67 65 72 72 6f 72 73 61     set bgerrorsa
7300: 76 65 64 20 5b 69 6e 74 65 72 70 20 62 67 65 72  ved [interp bger
7310: 72 6f 72 20 7b 7d 5d 0a 20 20 20 20 69 6e 74 65  ror {}].    inte
7320: 72 70 20 62 67 65 72 72 6f 72 20 7b 7d 20 5b 6e  rp bgerror {} [n
7330: 61 6d 65 73 70 61 63 65 20 63 6f 64 65 20 63 61  amespace code ca
7340: 6c 6c 62 61 63 6b 70 72 6f 63 5d 0a 0a 20 20 20  llbackproc]..   
7350: 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65   variable locale
7360: 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20  .    if {![info 
7370: 65 78 69 73 74 20 6c 6f 63 61 6c 65 5d 7d 20 7b  exist locale]} {
7380: 20 73 65 74 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c   set locale [mcl
7390: 6f 63 61 6c 65 5d 20 7d 0a 0a 09 74 65 73 74 20  ocale] }...test 
73a0: 6d 73 67 63 61 74 2d 31 34 2e 31 20 7b 69 6e 76  msgcat-14.1 {inv
73b0: 6f 63 61 74 69 6f 6e 20 6c 6f 61 64 63 6d 64 7d  ocation loadcmd}
73c0: 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 6d   -setup {..    m
73d0: 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09  cforgetpackage..
73e0: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f      mclocale $lo
73f0: 63 61 6c 65 0a 09 20 20 20 20 6d 63 6c 6f 63 61  cale..    mcloca
7400: 6c 65 20 22 22 0a 09 20 20 20 20 6d 63 6c 6f 61  le ""..    mcloa
7410: 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72  dedlocales clear
7420: 0a 09 20 20 20 20 73 65 74 20 72 65 73 75 6c 74  ..    set result
7430: 76 61 72 69 61 62 6c 65 20 22 22 0a 09 7d 20 2d  variable ""..} -
7440: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
7450: 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09  cforgetpackage..
7460: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
7470: 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 73  cpackageconfig s
7480: 65 74 20 6c 6f 61 64 63 6d 64 20 5b 6e 61 6d 65  et loadcmd [name
7490: 73 70 61 63 65 20 63 6f 64 65 20 63 61 6c 6c 62  space code callb
74a0: 61 63 6b 70 72 6f 63 5d 0a 09 20 20 20 20 6d 63  ackproc]..    mc
74b0: 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62 61 72 0a 09  locale foo_bar..
74c0: 20 20 20 20 6c 73 6f 72 74 20 24 72 65 73 75 6c      lsort $resul
74d0: 74 76 61 72 69 61 62 6c 65 0a 09 7d 20 2d 72 65  tvariable..} -re
74e0: 73 75 6c 74 20 7b 66 6f 6f 20 66 6f 6f 5f 62 61  sult {foo foo_ba
74f0: 72 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74  r}...test msgcat
7500: 2d 31 34 2e 32 20 7b 69 6e 76 6f 63 61 74 69 6f  -14.2 {invocatio
7510: 6e 20 66 61 69 6c 65 64 20 69 6e 20 6c 6f 61 64  n failed in load
7520: 63 6d 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  cmd} -setup {.. 
7530: 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61     mcforgetpacka
7540: 67 65 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65  ge..    mclocale
7550: 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63   $locale..    mc
7560: 6c 6f 63 61 6c 65 20 22 22 0a 09 20 20 20 20 6d  locale ""..    m
7570: 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 63  cloadedlocales c
7580: 6c 65 61 72 0a 09 7d 20 2d 63 6c 65 61 6e 75 70  lear..} -cleanup
7590: 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74   {..    mcforget
75a0: 70 61 63 6b 61 67 65 0a 09 20 20 20 20 61 66 74  package..    aft
75b0: 65 72 20 63 61 6e 63 65 6c 20 73 65 74 20 5b 6e  er cancel set [n
75c0: 61 6d 65 73 70 61 63 65 20 63 75 72 72 65 6e 74  amespace current
75d0: 5d 3a 3a 72 65 73 75 6c 74 76 61 72 69 61 62 6c  ]::resultvariabl
75e0: 65 20 74 69 6d 65 6f 75 74 0a 09 7d 20 2d 62 6f  e timeout..} -bo
75f0: 64 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b  dy {..    mcpack
7600: 61 67 65 63 6f 6e 66 69 67 20 73 65 74 20 6c 6f  ageconfig set lo
7610: 61 64 63 6d 64 20 5b 6e 61 6d 65 73 70 61 63 65  adcmd [namespace
7620: 20 63 6f 64 65 20 63 61 6c 6c 62 61 63 6b 66 61   code callbackfa
7630: 69 6c 70 72 6f 63 5d 0a 09 20 20 20 20 6d 63 6c  ilproc]..    mcl
7640: 6f 63 61 6c 65 20 66 6f 6f 5f 62 61 72 0a 09 20  ocale foo_bar.. 
7650: 20 20 20 23 20 6c 65 74 20 74 68 65 20 62 67 65     # let the bge
7660: 72 72 6f 72 20 72 75 6e 0a 09 20 20 20 20 61 66  rror run..    af
7670: 74 65 72 20 31 30 30 20 73 65 74 20 5b 6e 61 6d  ter 100 set [nam
7680: 65 73 70 61 63 65 20 63 75 72 72 65 6e 74 5d 3a  espace current]:
7690: 3a 72 65 73 75 6c 74 76 61 72 69 61 62 6c 65 20  :resultvariable 
76a0: 74 69 6d 65 6f 75 74 0a 09 20 20 20 20 76 77 61  timeout..    vwa
76b0: 69 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 75  it [namespace cu
76c0: 72 72 65 6e 74 5d 3a 3a 72 65 73 75 6c 74 76 61  rrent]::resultva
76d0: 72 69 61 62 6c 65 0a 09 20 20 20 20 6c 61 73 73  riable..    lass
76e0: 69 67 6e 20 24 72 65 73 75 6c 74 76 61 72 69 61  ign $resultvaria
76f0: 62 6c 65 20 65 72 72 20 65 72 72 64 69 63 74 0a  ble err errdict.
7700: 09 20 20 20 20 6c 69 73 74 20 24 65 72 72 20 5b  .    list $err [
7710: 64 69 63 74 20 67 65 74 20 24 65 72 72 64 69 63  dict get $errdic
7720: 74 20 2d 63 6f 64 65 5d 0a 09 7d 20 2d 72 65 73  t -code]..} -res
7730: 75 6c 74 20 7b 66 61 69 6c 20 31 7d 0a 0a 09 74  ult {fail 1}...t
7740: 65 73 74 20 6d 73 67 63 61 74 2d 31 34 2e 33 20  est msgcat-14.3 
7750: 7b 69 6e 76 6f 63 61 74 69 6f 6e 20 63 68 61 6e  {invocation chan
7760: 67 65 63 6d 64 7d 20 2d 73 65 74 75 70 20 7b 0a  gecmd} -setup {.
7770: 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63  .    mcforgetpac
7780: 6b 61 67 65 0a 09 20 20 20 20 6d 63 6c 6f 63 61  kage..    mcloca
7790: 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20  le $locale..    
77a0: 6d 63 6c 6f 63 61 6c 65 20 22 22 0a 09 20 20 20  mclocale ""..   
77b0: 20 73 65 74 20 72 65 73 75 6c 74 76 61 72 69 61   set resultvaria
77c0: 62 6c 65 20 22 22 0a 09 7d 20 2d 63 6c 65 61 6e  ble ""..} -clean
77d0: 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67  up {..    mcforg
77e0: 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f  etpackage..} -bo
77f0: 64 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b  dy {..    mcpack
7800: 61 67 65 63 6f 6e 66 69 67 20 73 65 74 20 63 68  ageconfig set ch
7810: 61 6e 67 65 63 6d 64 20 5b 6e 61 6d 65 73 70 61  angecmd [namespa
7820: 63 65 20 63 6f 64 65 20 63 61 6c 6c 62 61 63 6b  ce code callback
7830: 70 72 6f 63 5d 0a 09 20 20 20 20 6d 63 6c 6f 63  proc]..    mcloc
7840: 61 6c 65 20 66 6f 6f 5f 62 61 72 0a 09 20 20 20  ale foo_bar..   
7850: 20 73 65 74 20 72 65 73 75 6c 74 76 61 72 69 61   set resultvaria
7860: 62 6c 65 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b  ble..} -result {
7870: 66 6f 6f 5f 62 61 72 20 66 6f 6f 20 7b 7d 7d 0a  foo_bar foo {}}.
7880: 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 34  ..test msgcat-14
7890: 2e 34 20 7b 69 6e 76 6f 63 61 74 69 6f 6e 20 75  .4 {invocation u
78a0: 6e 6b 6e 6f 77 6e 63 6d 64 7d 20 2d 73 65 74 75  nknowncmd} -setu
78b0: 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67 65  p {..    mcforge
78c0: 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20 6d 63  tpackage..    mc
78d0: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09  locale $locale..
78e0: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a      mclocale "".
78f0: 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63  .    mcloadedloc
7900: 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20  ales clear..    
7910: 73 65 74 20 72 65 73 75 6c 74 76 61 72 69 61 62  set resultvariab
7920: 6c 65 20 22 22 0a 09 7d 20 2d 63 6c 65 61 6e 75  le ""..} -cleanu
7930: 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67 65  p {..    mcforge
7940: 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64  tpackage..} -bod
7950: 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61  y {..    mcpacka
7960: 67 65 63 6f 6e 66 69 67 20 73 65 74 20 75 6e 6b  geconfig set unk
7970: 6e 6f 77 6e 63 6d 64 20 5b 6e 61 6d 65 73 70 61  nowncmd [namespa
7980: 63 65 20 63 6f 64 65 20 63 61 6c 6c 62 61 63 6b  ce code callback
7990: 70 72 6f 63 5d 0a 09 20 20 20 20 6d 63 6c 6f 63  proc]..    mcloc
79a0: 61 6c 65 20 66 6f 6f 5f 62 61 72 0a 09 20 20 20  ale foo_bar..   
79b0: 20 6d 63 20 6b 31 20 70 31 0a 09 20 20 20 20 73   mc k1 p1..    s
79c0: 65 74 20 72 65 73 75 6c 74 76 61 72 69 61 62 6c  et resultvariabl
79d0: 65 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 66 6f  e..} -result {fo
79e0: 6f 5f 62 61 72 20 6b 31 20 70 31 7d 0a 0a 09 74  o_bar k1 p1}...t
79f0: 65 73 74 20 6d 73 67 63 61 74 2d 31 34 2e 35 20  est msgcat-14.5 
7a00: 7b 64 69 73 61 62 6c 65 20 67 6c 6f 62 61 6c 20  {disable global 
7a10: 75 6e 6b 6e 6f 77 6e 63 6d 64 7d 20 2d 73 65 74  unknowncmd} -set
7a20: 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67  up {..    mcforg
7a30: 65 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20 6d  etpackage..    m
7a40: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
7a50: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22  .    mclocale ""
7a60: 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f  ..    mcloadedlo
7a70: 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20  cales clear..   
7a80: 20 73 65 74 20 72 65 73 75 6c 74 76 61 72 69 61   set resultvaria
7a90: 62 6c 65 20 22 22 0a 09 20 20 20 20 72 65 6e 61  ble ""..    rena
7aa0: 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75  me ::msgcat::mcu
7ab0: 6e 6b 6e 6f 77 6e 20 53 61 76 65 64 4d 63 75 6e  nknown SavedMcun
7ac0: 6b 6e 6f 77 6e 0a 09 20 20 20 20 70 72 6f 63 20  known..    proc 
7ad0: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e  ::msgcat::mcunkn
7ae0: 6f 77 6e 20 7b 64 6f 6d 20 73 7d 20 7b 0a 09 09  own {dom s} {...
7af0: 72 65 74 75 72 6e 20 75 6e 6b 6e 6f 77 6e 3a 24  return unknown:$
7b00: 64 6f 6d 3a 24 73 0a 09 20 20 20 20 7d 0a 09 7d  dom:$s..    }..}
7b10: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20   -cleanup {..   
7b20: 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65   mcforgetpackage
7b30: 0a 09 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 6d  ..    rename ::m
7b40: 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e  sgcat::mcunknown
7b50: 20 7b 7d 0a 09 20 20 20 20 72 65 6e 61 6d 65 20   {}..    rename 
7b60: 53 61 76 65 64 4d 63 75 6e 6b 6e 6f 77 6e 20 3a  SavedMcunknown :
7b70: 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f  :msgcat::mcunkno
7b80: 77 6e 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20  wn..} -body {.. 
7b90: 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66     mcpackageconf
7ba0: 69 67 20 73 65 74 20 75 6e 6b 6e 6f 77 6e 63 6d  ig set unknowncm
7bb0: 64 20 22 22 0a 09 20 20 20 20 6d 63 6c 6f 63 61  d ""..    mcloca
7bc0: 6c 65 20 66 6f 6f 5f 62 61 72 0a 09 20 20 20 20  le foo_bar..    
7bd0: 6d 63 20 6b 31 25 73 20 70 31 0a 09 7d 20 2d 72  mc k1%s p1..} -r
7be0: 65 73 75 6c 74 20 7b 6b 31 70 31 7d 0a 0a 09 74  esult {k1p1}...t
7bf0: 65 73 74 20 6d 73 67 63 61 74 2d 31 34 2e 36 20  est msgcat-14.6 
7c00: 7b 75 6e 6b 6e 6f 77 6e 63 6d 64 20 66 61 69 6c  {unknowncmd fail
7c10: 69 6e 67 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  ing} -setup {.. 
7c20: 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61     mcforgetpacka
7c30: 67 65 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65  ge..    mclocale
7c40: 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63   $locale..    mc
7c50: 6c 6f 63 61 6c 65 20 22 22 0a 09 20 20 20 20 6d  locale ""..    m
7c60: 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 63  cloadedlocales c
7c70: 6c 65 61 72 0a 09 20 20 20 20 73 65 74 20 72 65  lear..    set re
7c80: 73 75 6c 74 76 61 72 69 61 62 6c 65 20 22 22 0a  sultvariable "".
7c90: 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20  .} -cleanup {.. 
7ca0: 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61     mcforgetpacka
7cb0: 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20  ge..} -body {.. 
7cc0: 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66     mcpackageconf
7cd0: 69 67 20 73 65 74 20 75 6e 6b 6e 6f 77 6e 63 6d  ig set unknowncm
7ce0: 64 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 6f 64  d [namespace cod
7cf0: 65 20 63 61 6c 6c 62 61 63 6b 66 61 69 6c 70 72  e callbackfailpr
7d00: 6f 63 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  oc]..    mclocal
7d10: 65 20 66 6f 6f 5f 62 61 72 0a 09 20 20 20 20 6d  e foo_bar..    m
7d20: 63 20 6b 31 0a 09 7d 20 2d 72 65 74 75 72 6e 43  c k1..} -returnC
7d30: 6f 64 65 73 20 31 5c 0a 09 2d 72 65 73 75 6c 74  odes 1\..-result
7d40: 20 7b 66 61 69 6c 7d 0a 0c 0a 0a 20 20 20 20 23   {fail}....    #
7d50: 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d 31 35   Tests msgcat-15
7d60: 2e 2a 3a 20 74 63 6c 6f 6f 20 63 6f 76 65 72 61  .*: tcloo covera
7d70: 67 65 0a 0a 20 20 20 20 23 20 54 68 65 72 65 20  ge..    # There 
7d80: 61 72 65 20 34 20 75 73 65 2d 63 61 73 65 73 2c  are 4 use-cases,
7d90: 20 77 68 65 72 65 20 33 20 6d 75 73 74 20 62 65   where 3 must be
7da0: 20 74 65 73 74 65 64 20 6e 6f 77 3a 0a 20 20 20   tested now:.   
7db0: 20 23 20 2d 20 6e 61 6d 65 73 70 61 63 65 20 64   # - namespace d
7dc0: 65 66 69 6e 65 64 2c 20 69 6e 20 63 6c 61 73 73  efined, in class
7dd0: 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 63 6c 61   definition, cla
7de0: 73 73 20 64 65 66 69 6e 65 64 20 6f 6f 2c 20 63  ss defined oo, c
7df0: 6c 61 73 73 6c 65 73 73 0a 0a 20 20 20 20 74 65  lassless..    te
7e00: 73 74 20 6d 73 67 63 61 74 2d 31 35 2e 31 20 7b  st msgcat-15.1 {
7e10: 6d 63 20 69 6e 20 63 6c 61 73 73 20 73 65 74 75  mc in class setu
7e20: 70 7d 20 2d 73 65 74 75 70 20 7b 0a 09 23 20 66  p} -setup {..# f
7e30: 75 6c 6c 20 6e 61 6d 65 73 70 61 63 65 20 69 73  ull namespace is
7e40: 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a   ::msgcat::test:
7e50: 62 61 72 0a 09 6e 61 6d 65 73 70 61 63 65 20 65  bar..namespace e
7e60: 76 61 6c 20 62 61 72 20 7b 0a 09 20 20 20 20 3a  val bar {..    :
7e70: 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 66  :msgcat::mcset f
7e80: 6f 6f 5f 42 41 52 20 63 6f 6e 32 20 63 6f 6e 32  oo_BAR con2 con2
7e90: 62 61 72 0a 09 20 20 20 20 6f 6f 3a 3a 63 6c 61  bar..    oo::cla
7ea0: 73 73 20 63 72 65 61 74 65 20 43 6c 61 73 73 43  ss create ClassC
7eb0: 75 72 0a 09 7d 0a 09 76 61 72 69 61 62 6c 65 20  ur..}..variable 
7ec0: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
7ed0: 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f  ]..mclocale foo_
7ee0: 42 41 52 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e  BAR.    } -clean
7ef0: 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24  up {..mclocale $
7f00: 6c 6f 63 61 6c 65 0a 09 6e 61 6d 65 73 70 61 63  locale..namespac
7f10: 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a 6d 73  e eval bar {::ms
7f20: 67 63 61 74 3a 3a 6d 63 66 6f 72 67 65 74 70 61  gcat::mcforgetpa
7f30: 63 6b 61 67 65 7d 0a 09 6e 61 6d 65 73 70 61 63  ckage}..namespac
7f40: 65 20 64 65 6c 65 74 65 20 62 61 72 0a 20 20 20  e delete bar.   
7f50: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6f 6f 3a 3a   } -body {..oo::
7f60: 64 65 66 69 6e 65 20 62 61 72 3a 3a 43 6c 61 73  define bar::Clas
7f70: 73 43 75 72 20 6d 73 67 63 61 74 3a 3a 6d 63 20  sCur msgcat::mc 
7f80: 63 6f 6e 32 0a 20 20 20 20 7d 20 2d 72 65 73 75  con2.    } -resu
7f90: 6c 74 20 63 6f 6e 32 62 61 72 0a 0a 20 20 20 20  lt con2bar..    
7fa0: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 35 2e 32  test msgcat-15.2
7fb0: 20 7b 6d 63 20 69 6e 20 63 6c 61 73 73 7d 20 2d   {mc in class} -
7fc0: 73 65 74 75 70 20 7b 0a 09 23 20 66 75 6c 6c 20  setup {..# full 
7fd0: 6e 61 6d 65 73 70 61 63 65 20 69 73 20 3a 3a 6d  namespace is ::m
7fe0: 73 67 63 61 74 3a 3a 74 65 73 74 3a 62 61 72 0a  sgcat::test:bar.
7ff0: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
8000: 62 61 72 20 7b 0a 09 20 20 20 20 3a 3a 6d 73 67  bar {..    ::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 72 0a  AR con2 con2bar.
8030: 09 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63  .    oo::class c
8040: 72 65 61 74 65 20 43 6c 61 73 73 43 75 72 0a 09  reate ClassCur..
8050: 20 20 20 20 6f 6f 3a 3a 64 65 66 69 6e 65 20 43      oo::define C
8060: 6c 61 73 73 43 75 72 20 6d 65 74 68 6f 64 20 6d  lassCur method m
8070: 65 74 68 6f 64 31 20 7b 7d 20 7b 3a 3a 6d 73 67  ethod1 {} {::msg
8080: 63 61 74 3a 3a 6d 63 20 63 6f 6e 32 7d 0a 09 7d  cat::mc con2}..}
8090: 0a 09 23 20 66 75 6c 6c 20 6e 61 6d 65 73 70 61  ..# full namespa
80a0: 63 65 20 69 73 20 3a 3a 6d 73 67 63 61 74 3a 3a  ce is ::msgcat::
80b0: 74 65 73 74 3a 62 61 7a 0a 09 6e 61 6d 65 73 70  test:baz..namesp
80c0: 61 63 65 20 65 76 61 6c 20 62 61 7a 20 7b 0a 09  ace eval baz {..
80d0: 20 20 20 20 73 65 74 20 4f 62 6a 43 75 72 20 5b      set ObjCur [
80e0: 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a 3a  ::msgcat::test::
80f0: 62 61 72 3a 3a 43 6c 61 73 73 43 75 72 20 6e 65  bar::ClassCur ne
8100: 77 5d 0a 09 7d 0a 09 76 61 72 69 61 62 6c 65 20  w]..}..variable 
8110: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
8120: 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f  ]..mclocale foo_
8130: 42 41 52 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e  BAR.    } -clean
8140: 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24  up {..mclocale $
8150: 6c 6f 63 61 6c 65 0a 09 6e 61 6d 65 73 70 61 63  locale..namespac
8160: 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a 6d 73  e eval bar {::ms
8170: 67 63 61 74 3a 3a 6d 63 66 6f 72 67 65 74 70 61  gcat::mcforgetpa
8180: 63 6b 61 67 65 7d 0a 09 6e 61 6d 65 73 70 61 63  ckage}..namespac
8190: 65 20 64 65 6c 65 74 65 20 62 61 72 20 62 61 7a  e delete bar baz
81a0: 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09  .    } -body {..
81b0: 24 62 61 7a 3a 3a 4f 62 6a 43 75 72 20 6d 65 74  $baz::ObjCur met
81c0: 68 6f 64 31 0a 20 20 20 20 7d 20 2d 72 65 73 75  hod1.    } -resu
81d0: 6c 74 20 63 6f 6e 32 62 61 72 0a 0a 20 20 20 20  lt con2bar..    
81e0: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 35 2e 33  test msgcat-15.3
81f0: 20 7b 6d 63 20 69 6e 20 63 6c 61 73 73 6c 65 73   {mc in classles
8200: 73 20 6f 62 6a 65 63 74 7d 20 2d 73 65 74 75 70  s object} -setup
8210: 20 7b 0a 09 23 20 66 75 6c 6c 20 6e 61 6d 65 73   {..# full names
8220: 70 61 63 65 20 69 73 20 3a 3a 6d 73 67 63 61 74  pace is ::msgcat
8230: 3a 3a 74 65 73 74 3a 62 61 72 0a 09 6e 61 6d 65  ::test:bar..name
8240: 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b  space eval bar {
8250: 0a 09 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a  ..    ::msgcat::
8260: 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 20 63 6f  mcset foo_BAR co
8270: 6e 32 20 63 6f 6e 32 62 61 72 0a 09 20 20 20 20  n2 con2bar..    
8280: 6f 6f 3a 3a 6f 62 6a 65 63 74 20 63 72 65 61 74  oo::object creat
8290: 65 20 4f 62 6a 43 75 72 0a 09 20 20 20 20 6f 6f  e ObjCur..    oo
82a0: 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 4f 62 6a 43  ::objdefine ObjC
82b0: 75 72 20 6d 65 74 68 6f 64 20 6d 65 74 68 6f 64  ur method method
82c0: 31 20 7b 7d 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a  1 {} {::msgcat::
82d0: 6d 63 20 63 6f 6e 32 7d 0a 09 7d 0a 09 76 61 72  mc con2}..}..var
82e0: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
82f0: 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c  locale]..mclocal
8300: 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20 7d 20  e foo_BAR.    } 
8310: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f  -cleanup {..mclo
8320: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 6e 61  cale $locale..na
8330: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 72  mespace eval bar
8340: 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 66 6f   {::msgcat::mcfo
8350: 72 67 65 74 70 61 63 6b 61 67 65 7d 0a 09 6e 61  rgetpackage}..na
8360: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 62  mespace delete b
8370: 61 72 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  ar.    } -body {
8380: 0a 09 62 61 72 3a 3a 4f 62 6a 43 75 72 20 6d 65  ..bar::ObjCur me
8390: 74 68 6f 64 31 0a 20 20 20 20 7d 20 2d 72 65 73  thod1.    } -res
83a0: 75 6c 74 20 63 6f 6e 32 62 61 72 0a 0a 20 20 20  ult con2bar..   
83b0: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 35 2e   test msgcat-15.
83c0: 34 20 7b 6d 63 20 69 6e 20 63 6c 61 73 73 6c 65  4 {mc in classle
83d0: 73 73 20 6f 62 6a 65 63 74 20 77 69 74 68 20 65  ss object with e
83e0: 78 70 6c 69 63 69 74 65 20 6e 61 6d 65 73 70 61  xplicite namespa
83f0: 63 65 20 65 76 61 6c 7d 5c 0a 20 20 20 20 2d 73  ce eval}\.    -s
8400: 65 74 75 70 20 7b 0a 09 23 20 66 75 6c 6c 20 6e  etup {..# full n
8410: 61 6d 65 73 70 61 63 65 20 69 73 20 3a 3a 6d 73  amespace is ::ms
8420: 67 63 61 74 3a 3a 74 65 73 74 3a 62 61 72 0a 09  gcat::test:bar..
8430: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62  namespace eval b
8440: 61 72 20 7b 0a 09 20 20 20 20 3a 3a 6d 73 67 63  ar {..    ::msgc
8450: 61 74 3a 3a 6d 63 73 65 74 20 66 6f 6f 5f 42 41  at::mcset foo_BA
8460: 52 20 63 6f 6e 32 20 63 6f 6e 32 62 61 72 0a 09  R con2 con2bar..
8470: 20 20 20 20 6f 6f 3a 3a 6f 62 6a 65 63 74 20 63      oo::object c
8480: 72 65 61 74 65 20 4f 62 6a 43 75 72 0a 09 20 20  reate ObjCur..  
8490: 20 20 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20    oo::objdefine 
84a0: 4f 62 6a 43 75 72 20 6d 65 74 68 6f 64 20 6d 65  ObjCur method me
84b0: 74 68 6f 64 31 20 7b 7d 20 7b 0a 09 09 6e 61 6d  thod1 {} {...nam
84c0: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 6d 73  espace eval ::ms
84d0: 67 63 61 74 3a 3a 74 65 73 74 3a 3a 62 61 7a 20  gcat::test::baz 
84e0: 7b 0a 09 09 20 20 20 20 3a 3a 6d 73 67 63 61 74  {...    ::msgcat
84f0: 3a 3a 6d 63 20 63 6f 6e 32 0a 09 09 7d 0a 09 20  ::mc con2...}.. 
8500: 20 20 20 7d 0a 09 7d 0a 09 6e 61 6d 65 73 70 61     }..}..namespa
8510: 63 65 20 65 76 61 6c 20 62 61 7a 20 7b 0a 09 20  ce eval baz {.. 
8520: 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73     ::msgcat::mcs
8530: 65 74 20 66 6f 6f 5f 42 41 52 20 63 6f 6e 32 20  et foo_BAR con2 
8540: 63 6f 6e 32 62 61 7a 0a 09 7d 0a 09 76 61 72 69  con2baz..}..vari
8550: 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c  able locale [mcl
8560: 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65  ocale]..mclocale
8570: 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20 7d 20 2d   foo_BAR.    } -
8580: 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63  cleanup {..mcloc
8590: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 6e 61 6d  ale $locale..nam
85a0: 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20  espace eval bar 
85b0: 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 66 6f 72  {::msgcat::mcfor
85c0: 67 65 74 70 61 63 6b 61 67 65 7d 0a 09 6e 61 6d  getpackage}..nam
85d0: 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 7a 20  espace eval baz 
85e0: 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 66 6f 72  {::msgcat::mcfor
85f0: 67 65 74 70 61 63 6b 61 67 65 7d 0a 09 6e 61 6d  getpackage}..nam
8600: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 62 61  espace delete ba
8610: 72 20 62 61 7a 0a 20 20 20 20 7d 20 2d 62 6f 64  r baz.    } -bod
8620: 79 20 7b 0a 09 62 61 72 3a 3a 4f 62 6a 43 75 72  y {..bar::ObjCur
8630: 20 6d 65 74 68 6f 64 31 0a 20 20 20 20 7d 20 2d   method1.    } -
8640: 72 65 73 75 6c 74 20 63 6f 6e 32 62 61 7a 0a 0a  result con2baz..
8650: 20 20 20 20 23 20 48 61 4f 20 32 30 32 34 2d 30      # HaO 2024-0
8660: 37 2d 31 35 20 66 69 78 20 6d 65 0a 20 20 20 20  7-15 fix me.    
8670: 23 20 54 69 63 6b 65 74 20 39 31 62 33 61 35 62  # Ticket 91b3a5b
8680: 62 3a 20 49 20 68 61 76 65 20 6e 6f 20 69 64 65  b: I have no ide
8690: 61 20 77 68 61 74 20 74 68 65 20 66 6f 6c 6c 6f  a what the follo
86a0: 77 69 6e 67 20 63 61 73 65 20 73 68 6f 75 6c 64  wing case should
86b0: 20 64 6f 2e 0a 20 20 20 20 23 20 42 75 74 20 63   do..    # But c
86c0: 75 72 72 65 6e 74 6c 79 2c 20 69 74 20 72 61 69  urrently, it rai
86d0: 73 65 73 20 61 6e 20 65 72 72 6f 72 20 61 6e 64  ses an error and
86e0: 20 74 68 61 74 20 73 68 6f 75 6c 64 20 6e 6f 74   that should not
86f0: 20 68 61 70 70 65 6e 2e 0a 20 20 20 20 23 20 54   happen..    # T
8700: 68 65 20 62 61 63 6b 67 72 6f 75 6e 64 20 69 73  he background is
8710: 20 74 68 65 20 74 6b 6c 69 62 20 74 6f 6f 6c 74   the tklib toolt
8720: 69 70 20 70 61 63 6b 61 67 65 2e 0a 20 20 20 20  ip package..    
8730: 23 20 54 68 69 73 20 70 61 63 6b 61 67 65 20 63  # This package c
8740: 61 70 74 75 72 65 73 20 74 68 65 20 63 61 6c 6c  aptures the call
8750: 65 72 20 6e 61 6d 65 73 70 61 63 65 20 74 6f 20  er namespace to 
8760: 6c 61 74 65 72 20 69 6e 76 6f 6b 65 20 6d 73 67  later invoke msg
8770: 63 61 74 20 77 69 74 68 20 63 75 72 72 65 6e 74  cat with current
8780: 20 64 61 74 61 2e 0a 20 20 20 20 23 20 49 66 20   data..    # If 
8790: 74 68 65 20 63 61 6c 6c 65 72 20 6e 61 6d 65 73  the caller names
87a0: 70 61 63 65 20 69 73 20 61 20 6d 65 74 68 6f 64  pace is a method
87b0: 2c 20 69 74 20 63 75 72 72 65 6e 74 6c 79 20 66  , it currently f
87c0: 61 69 6c 73 2e 0a 20 20 20 20 74 65 73 74 20 6d  ails..    test m
87d0: 73 67 63 61 74 2d 31 35 2e 35 20 7b 74 69 63 6b  sgcat-15.5 {tick
87e0: 65 74 20 39 31 62 33 61 35 62 62 3a 20 6d 65 74  et 91b3a5bb: met
87f0: 68 6f 64 20 6e 61 6d 65 73 70 61 63 65 20 72 65  hod namespace re
8800: 63 6f 72 64 65 64 20 61 6e 64 20 65 76 61 6c 75  corded and evalu
8810: 61 74 65 64 20 67 69 76 65 73 20 65 72 72 6f 72  ated gives error
8820: 7d 5c 0a 20 20 20 20 2d 73 65 74 75 70 20 7b 0a  }\.    -setup {.
8830: 09 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74  .oo::class creat
8840: 65 20 41 70 70 20 7b 7d 0a 09 6f 6f 3a 3a 64 65  e App {}..oo::de
8850: 66 69 6e 65 20 41 70 70 20 7b 0a 09 20 20 20 20  fine App {..    
8860: 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b 7d 20 7b  constructor {} {
8870: 20 6d 79 20 61 64 64 5f 6f 6e 65 20 7d 0a 09 20   my add_one }.. 
8880: 20 20 20 6d 65 74 68 6f 64 20 61 64 64 5f 6f 6e     method add_on
8890: 65 20 7b 7d 20 7b 20 72 65 63 6f 72 64 4d 73 67  e {} { recordMsg
88a0: 63 61 74 20 7d 0a 09 7d 0a 09 70 72 6f 63 20 3a  cat }..}..proc :
88b0: 3a 72 65 63 6f 72 64 4d 73 67 63 61 74 20 7b 7d  :recordMsgcat {}
88c0: 20 7b 20 73 65 74 20 3a 3a 6e 73 63 61 6c 6c 65   { set ::nscalle
88d0: 72 20 5b 75 70 6c 65 76 65 6c 20 31 20 7b 6e 61  r [uplevel 1 {na
88e0: 6d 65 73 70 61 63 65 20 63 75 72 72 65 6e 74 7d  mespace current}
88f0: 5d 20 7d 0a 09 73 65 74 20 61 70 70 6c 69 63 61  ] }..set applica
8900: 74 69 6f 6e 20 5b 41 70 70 20 6e 65 77 5d 0a 7d  tion [App new].}
8910: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 24 61 70   -cleanup {..$ap
8920: 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 74 72 6f  plication destro
8930: 79 0a 09 41 70 70 20 64 65 73 74 72 6f 79 0a 09  y..App destroy..
8940: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
8950: 6e 20 3a 3a 6e 73 63 61 6c 6c 65 72 0a 09 72 65  n ::nscaller..re
8960: 6e 61 6d 65 20 3a 3a 72 65 63 6f 72 64 4d 73 67  name ::recordMsg
8970: 63 61 74 20 22 22 0a 20 20 20 20 7d 20 2d 62 6f  cat "".    } -bo
8980: 64 79 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20  dy {..namespace 
8990: 65 76 61 6c 20 24 3a 3a 6e 73 63 61 6c 6c 65 72  eval $::nscaller
89a0: 20 5b 6c 69 73 74 20 3a 3a 6d 73 67 63 61 74 3a   [list ::msgcat:
89b0: 3a 6d 63 20 22 54 65 73 74 22 5d 0a 20 20 20 20  :mc "Test"].    
89c0: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 6f  } -returnCodes o
89d0: 6b 20 2d 72 65 73 75 6c 74 20 54 65 73 74 0a 0a  k -result Test..
89e0: 20 20 20 20 23 20 54 65 73 74 20 6d 73 67 63 61      # Test msgca
89f0: 74 2d 31 36 2e 2a 3a 20 63 6f 6d 6d 61 6e 64 20  t-16.*: command 
8a00: 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65 73 70 61  mcpackagenamespa
8a10: 63 65 67 65 74 0a 0a 20 20 20 20 74 65 73 74 20  ceget..    test 
8a20: 6d 73 67 63 61 74 2d 31 36 2e 31 20 7b 6d 63 70  msgcat-16.1 {mcp
8a30: 61 63 6b 61 67 65 6e 61 6d 65 73 70 61 63 65 67  ackagenamespaceg
8a40: 65 74 20 69 6e 20 6e 61 6d 65 73 70 61 63 65 20  et in namespace 
8a50: 70 72 6f 63 65 64 75 72 65 7d 20 2d 62 6f 64 79  procedure} -body
8a60: 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76   {..namespace ev
8a70: 61 6c 20 62 61 7a 20 7b 6d 73 67 63 61 74 3a 3a  al baz {msgcat::
8a80: 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65 73 70 61  mcpackagenamespa
8a90: 63 65 67 65 74 7d 0a 20 20 20 20 7d 20 2d 72 65  ceget}.    } -re
8aa0: 73 75 6c 74 20 3a 3a 6d 73 67 63 61 74 3a 3a 74  sult ::msgcat::t
8ab0: 65 73 74 3a 3a 62 61 7a 0a 0a 20 20 20 20 74 65  est::baz..    te
8ac0: 73 74 20 6d 73 67 63 61 74 2d 31 36 2e 32 20 7b  st msgcat-16.2 {
8ad0: 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65 73 70 61  mcpackagenamespa
8ae0: 63 65 67 65 74 20 69 6e 20 63 6c 61 73 73 20 73  ceget in class s
8af0: 65 74 75 70 7d 20 2d 73 65 74 75 70 20 7b 0a 09  etup} -setup {..
8b00: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62  namespace eval b
8b10: 61 72 20 7b 0a 09 20 20 20 20 6f 6f 3a 3a 63 6c  ar {..    oo::cl
8b20: 61 73 73 20 63 72 65 61 74 65 20 43 6c 61 73 73  ass create Class
8b30: 43 75 72 0a 09 20 20 20 20 6f 6f 3a 3a 64 65 66  Cur..    oo::def
8b40: 69 6e 65 20 43 6c 61 73 73 43 75 72 20 76 61 72  ine ClassCur var
8b50: 69 61 62 6c 65 20 61 0a 09 7d 0a 20 20 20 20 7d  iable a..}.    }
8b60: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6e 61 6d   -cleanup {..nam
8b70: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 62 61  espace delete ba
8b80: 72 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a  r.    } -body {.
8b90: 09 6f 6f 3a 3a 64 65 66 69 6e 65 20 62 61 72 3a  .oo::define bar:
8ba0: 3a 43 6c 61 73 73 43 75 72 20 6d 73 67 63 61 74  :ClassCur msgcat
8bb0: 3a 3a 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65 73  ::mcpackagenames
8bc0: 70 61 63 65 67 65 74 0a 20 20 20 20 7d 20 2d 72  paceget.    } -r
8bd0: 65 73 75 6c 74 20 3a 3a 6d 73 67 63 61 74 3a 3a  esult ::msgcat::
8be0: 74 65 73 74 3a 3a 62 61 72 0a 0a 20 20 20 20 74  test::bar..    t
8bf0: 65 73 74 20 6d 73 67 63 61 74 2d 31 36 2e 33 20  est msgcat-16.3 
8c00: 7b 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65 73 70  {mcpackagenamesp
8c10: 61 63 65 67 65 74 20 69 6e 20 63 6c 61 73 73 7d  aceget in class}
8c20: 20 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65 73   -setup {..names
8c30: 70 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b 0a  pace eval bar {.
8c40: 09 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63  .    oo::class c
8c50: 72 65 61 74 65 20 43 6c 61 73 73 43 75 72 0a 09  reate ClassCur..
8c60: 20 20 20 20 6f 6f 3a 3a 64 65 66 69 6e 65 20 43      oo::define C
8c70: 6c 61 73 73 43 75 72 20 6d 65 74 68 6f 64 20 6d  lassCur method m
8c80: 65 74 68 6f 64 31 20 7b 7d 20 7b 6d 73 67 63 61  ethod1 {} {msgca
8c90: 74 3a 3a 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65  t::mcpackagename
8ca0: 73 70 61 63 65 67 65 74 7d 0a 09 7d 0a 09 6e 61  spaceget}..}..na
8cb0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 7a  mespace eval baz
8cc0: 20 7b 0a 09 20 20 20 20 73 65 74 20 4f 62 6a 43   {..    set ObjC
8cd0: 75 72 20 5b 3a 3a 6d 73 67 63 61 74 3a 3a 74 65  ur [::msgcat::te
8ce0: 73 74 3a 3a 62 61 72 3a 3a 43 6c 61 73 73 43 75  st::bar::ClassCu
8cf0: 72 20 6e 65 77 5d 0a 09 7d 0a 20 20 20 20 7d 20  r new]..}.    } 
8d00: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6e 61 6d 65  -cleanup {..name
8d10: 73 70 61 63 65 20 64 65 6c 65 74 65 20 62 61 72  space delete bar
8d20: 20 62 61 7a 0a 20 20 20 20 7d 20 2d 62 6f 64 79   baz.    } -body
8d30: 20 7b 0a 09 24 62 61 7a 3a 3a 4f 62 6a 43 75 72   {..$baz::ObjCur
8d40: 20 6d 65 74 68 6f 64 31 0a 20 20 20 20 7d 20 2d   method1.    } -
8d50: 72 65 73 75 6c 74 20 3a 3a 6d 73 67 63 61 74 3a  result ::msgcat:
8d60: 3a 74 65 73 74 3a 3a 62 61 72 0a 0a 20 20 20 20  :test::bar..    
8d70: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 36 2e 34  test msgcat-16.4
8d80: 20 7b 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65 73   {mcpackagenames
8d90: 70 61 63 65 67 65 74 20 69 6e 20 63 6c 61 73 73  paceget in class
8da0: 6c 65 73 73 20 6f 62 6a 65 63 74 7d 20 2d 73 65  less object} -se
8db0: 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65  tup {..namespace
8dc0: 20 65 76 61 6c 20 62 61 72 20 7b 0a 09 20 20 20   eval bar {..   
8dd0: 20 6f 6f 3a 3a 6f 62 6a 65 63 74 20 63 72 65 61   oo::object crea
8de0: 74 65 20 4f 62 6a 43 75 72 0a 09 20 20 20 20 6f  te ObjCur..    o
8df0: 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 4f 62 6a  o::objdefine Obj
8e00: 43 75 72 20 6d 65 74 68 6f 64 20 6d 65 74 68 6f  Cur method metho
8e10: 64 31 20 7b 7d 20 7b 6d 73 67 63 61 74 3a 3a 6d  d1 {} {msgcat::m
8e20: 63 70 61 63 6b 61 67 65 6e 61 6d 65 73 70 61 63  cpackagenamespac
8e30: 65 67 65 74 7d 0a 09 7d 0a 20 20 20 20 7d 20 2d  eget}..}.    } -
8e40: 63 6c 65 61 6e 75 70 20 7b 0a 09 6e 61 6d 65 73  cleanup {..names
8e50: 70 61 63 65 20 64 65 6c 65 74 65 20 62 61 72 0a  pace delete bar.
8e60: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 62      } -body {..b
8e70: 61 72 3a 3a 4f 62 6a 43 75 72 20 6d 65 74 68 6f  ar::ObjCur metho
8e80: 64 31 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74  d1.    } -result
8e90: 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a   ::msgcat::test:
8ea0: 3a 62 61 72 0a 0a 20 20 20 20 74 65 73 74 20 6d  :bar..    test m
8eb0: 73 67 63 61 74 2d 31 36 2e 35 5c 0a 20 20 20 20  sgcat-16.5\.    
8ec0: 7b 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65 73 70  {mcpackagenamesp
8ed0: 61 63 65 67 65 74 20 69 6e 20 63 6c 61 73 73 6c  aceget in classl
8ee0: 65 73 73 20 6f 62 6a 65 63 74 20 77 69 74 68 20  ess object with 
8ef0: 65 78 70 6c 69 63 69 74 65 20 6e 61 6d 65 73 70  explicite namesp
8f00: 61 63 65 20 65 76 61 6c 7d 5c 0a 20 20 20 20 2d  ace eval}\.    -
8f10: 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70 61  setup {..namespa
8f20: 63 65 20 65 76 61 6c 20 62 61 72 20 7b 0a 09 20  ce eval bar {.. 
8f30: 20 20 20 6f 6f 3a 3a 6f 62 6a 65 63 74 20 63 72     oo::object cr
8f40: 65 61 74 65 20 4f 62 6a 43 75 72 0a 09 20 20 20  eate ObjCur..   
8f50: 20 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 4f   oo::objdefine O
8f60: 62 6a 43 75 72 20 6d 65 74 68 6f 64 20 6d 65 74  bjCur method met
8f70: 68 6f 64 31 20 7b 7d 20 7b 0a 09 09 6e 61 6d 65  hod1 {} {...name
8f80: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 6d 73 67  space eval ::msg
8f90: 63 61 74 3a 3a 74 65 73 74 3a 3a 62 61 7a 20 7b  cat::test::baz {
8fa0: 0a 09 09 20 20 20 20 6d 73 67 63 61 74 3a 3a 6d  ...    msgcat::m
8fb0: 63 70 61 63 6b 61 67 65 6e 61 6d 65 73 70 61 63  cpackagenamespac
8fc0: 65 67 65 74 0a 09 09 7d 0a 09 20 20 20 20 7d 0a  eget...}..    }.
8fd0: 09 7d 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75  .}.    } -cleanu
8fe0: 70 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 64  p {..namespace d
8ff0: 65 6c 65 74 65 20 62 61 72 20 62 61 7a 0a 20 20  elete bar baz.  
9000: 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 62 61 72    } -body {..bar
9010: 3a 3a 4f 62 6a 43 75 72 20 6d 65 74 68 6f 64 31  ::ObjCur method1
9020: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 3a  .    } -result :
9030: 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a 3a 62  :msgcat::test::b
9040: 61 7a 0a 0a 0c 0a 20 20 20 20 23 20 54 65 73 74  az....    # Test
9050: 20 6d 73 67 63 61 74 2d 31 37 2e 2a 3a 20 6d 63   msgcat-17.*: mc
9060: 6e 20 63 6f 6d 6d 61 6e 64 0a 0a 20 20 20 20 74  n command..    t
9070: 65 73 74 20 6d 73 67 63 61 74 2d 31 37 2e 31 20  est msgcat-17.1 
9080: 7b 6d 63 6e 20 6e 6f 20 70 61 72 61 6d 65 74 65  {mcn no paramete
9090: 72 73 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 6e  rs} -body {..mcn
90a0: 0a 20 20 20 20 7d 20 2d 72 65 74 75 72 6e 43 6f  .    } -returnCo
90b0: 64 65 73 20 31 5c 0a 20 20 20 20 2d 72 65 73 75  des 1\.    -resu
90c0: 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73  lt {wrong # args
90d0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 6d 63 6e  : should be "mcn
90e0: 20 6e 73 20 73 72 63 20 3f 61 72 67 20 2e 2e 2e   ns src ?arg ...
90f0: 3f 22 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73  ?"}..    test ms
9100: 67 63 61 74 2d 31 37 2e 32 20 7b 6d 63 6e 7d 20  gcat-17.2 {mcn} 
9110: 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70  -setup {..namesp
9120: 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a  ace eval bar {::
9130: 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f  msgcat::mcset fo
9140: 6f 5f 42 41 52 20 63 6f 6e 31 20 63 6f 6e 31 62  o_BAR con1 con1b
9150: 61 72 7d 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f  ar}..variable lo
9160: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
9170: 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41  .mclocale foo_BA
9180: 52 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70  R.    } -cleanup
9190: 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f   {..mclocale $lo
91a0: 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79  cale.    } -body
91b0: 20 7b 0a 09 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63   {..::msgcat::mc
91c0: 6e 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 75 72  n [namespace cur
91d0: 72 65 6e 74 5d 3a 3a 62 61 72 20 63 6f 6e 31 0a  rent]::bar con1.
91e0: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 63 6f      } -result co
91f0: 6e 31 62 61 72 0a 0a 0c 0a 20 20 20 20 69 6e 74  n1bar....    int
9200: 65 72 70 20 62 67 65 72 72 6f 72 20 7b 7d 20 24  erp bgerror {} $
9210: 62 67 65 72 72 6f 72 73 61 76 65 64 0a 0a 20 20  bgerrorsaved..  
9220: 20 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74    # Tests msgcat
9230: 2d 31 38 2e 2a 3a 20 5b 6d 63 75 74 69 6c 5d 0a  -18.*: [mcutil].
9240: 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74  .    test msgcat
9250: 2d 31 38 2e 31 20 7b 6d 63 75 74 69 6c 20 2d 20  -18.1 {mcutil - 
9260: 6e 6f 20 61 72 67 75 6d 65 6e 74 7d 20 2d 62 6f  no argument} -bo
9270: 64 79 20 7b 0a 09 6d 63 75 74 69 6c 0a 20 20 20  dy {..mcutil.   
9280: 20 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20   } -returnCodes 
9290: 31 5c 0a 20 20 20 20 2d 72 65 73 75 6c 74 20 7b  1\.    -result {
92a0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
92b0: 6f 75 6c 64 20 62 65 20 22 6d 63 75 74 69 6c 20  ould be "mcutil 
92c0: 73 75 62 63 6f 6d 6d 61 6e 64 20 3f 61 72 67 20  subcommand ?arg 
92d0: 2e 2e 2e 3f 22 7d 0a 0a 20 20 20 20 74 65 73 74  ...?"}..    test
92e0: 20 6d 73 67 63 61 74 2d 31 38 2e 32 20 7b 6d 63   msgcat-18.2 {mc
92f0: 75 74 69 6c 20 2d 20 77 72 6f 6e 67 20 61 72 67  util - wrong arg
9300: 75 6d 65 6e 74 7d 20 2d 62 6f 64 79 20 7b 0a 09  ument} -body {..
9310: 6d 63 75 74 69 6c 20 6a 75 6e 6b 0a 20 20 20 20  mcutil junk.    
9320: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31  } -returnCodes 1
9330: 5c 0a 20 20 20 20 2d 72 65 73 75 6c 74 20 7b 75  \.    -result {u
9340: 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e  nknown subcomman
9350: 64 20 22 6a 75 6e 6b 22 3a 20 6d 75 73 74 20 62  d "junk": must b
9360: 65 20 67 65 74 70 72 65 66 65 72 65 6e 63 65 73  e getpreferences
9370: 2c 20 6f 72 20 67 65 74 73 79 73 74 65 6d 6c 6f  , or getsystemlo
9380: 63 61 6c 65 7d 0a 0a 20 20 20 20 74 65 73 74 20  cale}..    test 
9390: 6d 73 67 63 61 74 2d 31 38 2e 33 20 7b 6d 63 75  msgcat-18.3 {mcu
93a0: 74 69 6c 20 2d 20 70 61 72 74 69 61 6c 20 61 72  til - partial ar
93b0: 67 75 6d 65 6e 74 7d 20 2d 62 6f 64 79 20 7b 0a  gument} -body {.
93c0: 09 6d 63 75 74 69 6c 20 67 65 74 73 79 73 74 65  .mcutil getsyste
93d0: 6d 0a 20 20 20 20 7d 20 2d 72 65 74 75 72 6e 43  m.    } -returnC
93e0: 6f 64 65 73 20 31 5c 0a 20 20 20 20 2d 72 65 73  odes 1\.    -res
93f0: 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 73 75 62  ult {unknown sub
9400: 63 6f 6d 6d 61 6e 64 20 22 67 65 74 73 79 73 74  command "getsyst
9410: 65 6d 22 3a 20 6d 75 73 74 20 62 65 20 67 65 74  em": must be get
9420: 70 72 65 66 65 72 65 6e 63 65 73 2c 20 6f 72 20  preferences, or 
9430: 67 65 74 73 79 73 74 65 6d 6c 6f 63 61 6c 65 7d  getsystemlocale}
9440: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
9450: 74 2d 31 38 2e 34 20 7b 6d 63 75 74 69 6c 20 67  t-18.4 {mcutil g
9460: 65 74 70 72 65 66 65 72 65 6e 63 65 73 20 2d 20  etpreferences - 
9470: 6e 6f 20 61 72 67 75 6d 65 6e 74 7d 20 2d 62 6f  no argument} -bo
9480: 64 79 20 7b 0a 09 6d 63 75 74 69 6c 20 67 65 74  dy {..mcutil get
9490: 70 72 65 66 65 72 65 6e 63 65 73 0a 20 20 20 20  preferences.    
94a0: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31  } -returnCodes 1
94b0: 5c 0a 20 20 20 20 2d 72 65 73 75 6c 74 20 7b 77  \.    -result {w
94c0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
94d0: 75 6c 64 20 62 65 20 22 6d 63 75 74 69 6c 20 67  uld be "mcutil g
94e0: 65 74 70 72 65 66 65 72 65 6e 63 65 73 20 6c 6f  etpreferences lo
94f0: 63 61 6c 65 22 7d 0a 0a 20 20 20 20 74 65 73 74  cale"}..    test
9500: 20 6d 73 67 63 61 74 2d 31 38 2e 35 20 7b 6d 63   msgcat-18.5 {mc
9510: 75 74 69 6c 20 67 65 74 70 72 65 66 65 72 65 6e  util getpreferen
9520: 63 65 73 20 2d 20 44 45 5f 64 65 7d 20 2d 62 6f  ces - DE_de} -bo
9530: 64 79 20 7b 0a 09 6d 63 75 74 69 6c 20 67 65 74  dy {..mcutil get
9540: 70 72 65 66 65 72 65 6e 63 65 73 20 44 45 5f 64  preferences DE_d
9550: 65 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20  e.    } -result 
9560: 7b 64 65 5f 64 65 20 64 65 20 7b 7d 7d 0a 0a 20  {de_de de {}}.. 
9570: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31     test msgcat-1
9580: 38 2e 36 20 7b 6d 63 75 74 69 6c 20 67 65 74 73  8.6 {mcutil gets
9590: 79 73 74 65 6d 6c 6f 63 61 6c 65 20 2d 20 77 72  ystemlocale - wr
95a0: 6f 6e 67 20 61 72 67 75 6d 65 6e 74 7d 20 2d 62  ong argument} -b
95b0: 6f 64 79 20 7b 0a 09 6d 63 75 74 69 6c 20 67 65  ody {..mcutil ge
95c0: 74 73 79 73 74 65 6d 6c 6f 63 61 6c 65 20 44 45  tsystemlocale DE
95d0: 5f 64 65 0a 20 20 20 20 7d 20 2d 72 65 74 75 72  _de.    } -retur
95e0: 6e 43 6f 64 65 73 20 31 5c 0a 20 20 20 20 2d 72  nCodes 1\.    -r
95f0: 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61  esult {wrong # a
9600: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22  rgs: should be "
9610: 6d 63 75 74 69 6c 20 67 65 74 73 79 73 74 65 6d  mcutil getsystem
9620: 6c 6f 63 61 6c 65 22 7d 0a 0a 20 20 20 20 23 20  locale"}..    # 
9630: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 73 79  The result is sy
9640: 73 74 65 6d 20 64 65 70 65 6e 64 65 6e 74 0a 20  stem dependent. 
9650: 20 20 20 23 20 53 6f 20 6a 75 73 74 20 74 65 73     # So just tes
9660: 74 20 69 66 20 69 74 20 72 75 6e 73 0a 20 20 20  t if it runs.   
9670: 20 23 20 54 68 65 20 65 6e 76 69 72 6f 6e 6d 65   # The environme
9680: 6e 74 20 76 61 72 69 61 62 6c 65 20 76 65 72 73  nt variable vers
9690: 69 6f 6e 20 77 61 73 20 74 65 73 74 20 77 69 74  ion was test wit
96a0: 68 20 74 65 73 74 20 30 2e 78 0a 20 20 20 20 74  h test 0.x.    t
96b0: 65 73 74 20 6d 73 67 63 61 74 2d 31 38 2e 37 20  est msgcat-18.7 
96c0: 7b 6d 63 75 74 69 6c 20 67 65 74 73 79 73 74 65  {mcutil getsyste
96d0: 6d 6c 6f 63 61 6c 65 7d 20 2d 62 6f 64 79 20 7b  mlocale} -body {
96e0: 0a 09 6d 63 75 74 69 6c 20 67 65 74 73 79 73 74  ..mcutil getsyst
96f0: 65 6d 6c 6f 63 61 6c 65 0a 09 73 65 74 20 6f 6b  emlocale..set ok
9700: 20 6f 6b 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c   ok.    } -resul
9710: 74 20 7b 6f 6b 7d 0a 0a 0a 20 20 20 20 63 6c 65  t {ok}...    cle
9720: 61 6e 75 70 54 65 73 74 73 0a 7d 0a 6e 61 6d 65  anupTests.}.name
9730: 73 70 61 63 65 20 64 65 6c 65 74 65 20 3a 3a 6d  space delete ::m
9740: 73 67 63 61 74 3a 3a 74 65 73 74 0a 72 65 74 75  sgcat::test.retu
9750: 72 6e 0a 0a 23 20 4c 6f 63 61 6c 20 56 61 72 69  rn..# Local Vari
9760: 61 62 6c 65 73 3a 0a 23 20 6d 6f 64 65 3a 20 74  ables:.# mode: t
9770: 63 6c 0a 23 20 45 6e 64 3a 0a                    cl.# End:.