Tcl Source Code

Hex Artifact Content
Login

Artifact 2bffc64e205ff136bc0446bde5c6f93140e986709bb54bdb908f4ad0f4705fbb:


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 28 63 29 20 31 39 39 38  pyright (c) 1998
00d0: 20 4d 61 72 6b 20 48 61 72 72 69 73 6f 6e 2e 0a   Mark Harrison..
00e0: 23 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20  # Copyright (c) 
00f0: 31 39 39 38 2d 31 39 39 39 20 62 79 20 53 63 72  1998-1999 by Scr
0100: 69 70 74 69 63 73 20 43 6f 72 70 6f 72 61 74 69  iptics Corporati
0110: 6f 6e 2e 0a 23 20 43 6f 6e 74 72 69 62 75 74 69  on..# Contributi
0120: 6f 6e 73 20 66 72 6f 6d 20 44 6f 6e 20 50 6f 72  ons from Don Por
0130: 74 65 72 2c 20 4e 49 53 54 2c 20 32 30 30 32 2e  ter, NIST, 2002.
0140: 20 20 28 6e 6f 74 20 73 75 62 6a 65 63 74 20 74    (not subject t
0150: 6f 20 55 53 20 63 6f 70 79 72 69 67 68 74 29 0a  o US copyright).
0160: 23 0a 23 20 53 65 65 20 74 68 65 20 66 69 6c 65  #.# See the file
0170: 20 22 6c 69 63 65 6e 73 65 2e 74 65 72 6d 73 22   "license.terms"
0180: 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   for information
0190: 20 6f 6e 20 75 73 61 67 65 20 61 6e 64 20 72 65   on usage and re
01a0: 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 23 20 6f  distribution.# o
01b0: 66 20 74 68 69 73 20 66 69 6c 65 2c 20 61 6e 64  f this file, and
01c0: 20 66 6f 72 20 61 20 44 49 53 43 4c 41 49 4d 45   for a DISCLAIME
01d0: 52 20 4f 46 20 41 4c 4c 20 57 41 52 52 41 4e 54  R OF ALL WARRANT
01e0: 49 45 53 2e 0a 23 0a 23 20 4e 6f 74 65 20 74 68  IES..#.# Note th
01f0: 61 74 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67  at after running
0200: 20 74 68 65 73 65 20 74 65 73 74 73 2c 20 65 6e   these tests, en
0210: 74 72 69 65 73 20 77 69 6c 6c 20 62 65 20 6c 65  tries will be le
0220: 66 74 20 62 65 68 69 6e 64 20 69 6e 20 74 68 65  ft behind in the
0230: 0a 23 20 6d 65 73 73 61 67 65 20 63 61 74 61 6c  .# message catal
0240: 6f 67 73 20 66 6f 72 20 6c 6f 63 61 6c 65 73 20  ogs for locales 
0250: 66 6f 6f 2c 20 66 6f 6f 5f 42 41 52 2c 20 61 6e  foo, foo_BAR, an
0260: 64 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 2e 0a 0a  d foo_BAR_baz...
0270: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0280: 54 63 6c 20 38 2e 35 2d 0a 69 66 20 7b 5b 63 61  Tcl 8.5-.if {[ca
0290: 74 63 68 20 7b 70 61 63 6b 61 67 65 20 72 65 71  tch {package req
02a0: 75 69 72 65 20 74 63 6c 74 65 73 74 20 32 7d 5d  uire tcltest 2}]
02b0: 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 73 74 64  } {.    puts std
02c0: 65 72 72 20 22 53 6b 69 70 70 69 6e 67 20 74 65  err "Skipping te
02d0: 73 74 73 20 69 6e 20 5b 69 6e 66 6f 20 73 63 72  sts in [info scr
02e0: 69 70 74 5d 2e 20 20 74 63 6c 74 65 73 74 20 32  ipt].  tcltest 2
02f0: 20 72 65 71 75 69 72 65 64 2e 22 0a 20 20 20 20   required.".    
0300: 72 65 74 75 72 6e 0a 7d 0a 69 66 20 7b 5b 63 61  return.}.if {[ca
0310: 74 63 68 20 7b 70 61 63 6b 61 67 65 20 72 65 71  tch {package req
0320: 75 69 72 65 20 6d 73 67 63 61 74 20 31 2e 36 7d  uire msgcat 1.6}
0330: 5d 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 73 74  ]} {.    puts st
0340: 64 65 72 72 20 22 53 6b 69 70 70 69 6e 67 20 74  derr "Skipping t
0350: 65 73 74 73 20 69 6e 20 5b 69 6e 66 6f 20 73 63  ests in [info sc
0360: 72 69 70 74 5d 2e 20 20 4e 6f 20 6d 73 67 63 61  ript].  No msgca
0370: 74 20 31 2e 36 20 66 6f 75 6e 64 20 74 6f 20 74  t 1.6 found to t
0380: 65 73 74 2e 22 0a 20 20 20 20 72 65 74 75 72 6e  est.".    return
0390: 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76  .}..namespace ev
03a0: 61 6c 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73  al ::msgcat::tes
03b0: 74 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  t {.    namespac
03c0: 65 20 69 6d 70 6f 72 74 20 3a 3a 6d 73 67 63 61  e import ::msgca
03d0: 74 3a 3a 2a 0a 20 20 20 20 6e 61 6d 65 73 70 61  t::*.    namespa
03e0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 74 63 6c 74  ce import ::tclt
03f0: 65 73 74 3a 3a 74 65 73 74 0a 20 20 20 20 6e 61  est::test.    na
0400: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
0410: 3a 74 63 6c 74 65 73 74 3a 3a 63 6c 65 61 6e 75  :tcltest::cleanu
0420: 70 54 65 73 74 73 0a 20 20 20 20 6e 61 6d 65 73  pTests.    names
0430: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 74 63  pace import ::tc
0440: 6c 74 65 73 74 3a 3a 74 65 6d 70 6f 72 61 72 79  ltest::temporary
0450: 44 69 72 65 63 74 6f 72 79 0a 20 20 20 20 6e 61  Directory.    na
0460: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
0470: 3a 74 63 6c 74 65 73 74 3a 3a 6d 61 6b 65 2a 0a  :tcltest::make*.
0480: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d      namespace im
0490: 70 6f 72 74 20 3a 3a 74 63 6c 74 65 73 74 3a 3a  port ::tcltest::
04a0: 72 65 6d 6f 76 65 2a 0a 0a 20 20 20 20 23 20 54  remove*..    # T
04b0: 65 73 74 73 20 6d 73 67 63 61 74 2d 30 2e 2a 3a  ests msgcat-0.*:
04c0: 20 6c 6f 63 61 6c 65 20 69 6e 69 74 69 61 6c 69   locale initiali
04d0: 7a 61 74 69 6f 6e 0a 0a 20 20 20 20 23 20 43 61  zation..    # Ca
04e0: 6c 63 75 6c 61 74 65 20 73 65 74 20 6f 66 20 61  lculate set of a
04f0: 6c 6c 20 70 65 72 6d 75 74 61 74 69 6f 6e 73 20  ll permutations 
0500: 6f 66 20 61 20 6c 69 73 74 0a 20 20 20 20 23 20  of a list.    # 
0510: 50 6f 77 65 72 53 65 74 20 7b 31 20 32 20 33 7d  PowerSet {1 2 3}
0520: 20 2d 3e 20 7b 31 20 32 20 33 7d 20 7b 32 20 33   -> {1 2 3} {2 3
0530: 7d 20 7b 31 20 33 7d 20 33 20 7b 31 20 32 7d 20  } {1 3} 3 {1 2} 
0540: 32 20 31 20 7b 7d 0a 20 20 20 20 70 72 6f 63 20  2 1 {}.    proc 
0550: 50 6f 77 65 72 53 65 74 20 7b 6c 7d 20 7b 0a 09  PowerSet {l} {..
0560: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6c 5d  if {[llength $l]
0570: 20 3d 3d 20 30 7d 20 7b 72 65 74 75 72 6e 20 5b   == 0} {return [
0580: 6c 69 73 74 20 5b 6c 69 73 74 5d 5d 7d 0a 09 73  list [list]]}..s
0590: 65 74 20 65 6c 65 6d 65 6e 74 20 5b 6c 69 6e 64  et element [lind
05a0: 65 78 20 24 6c 20 30 5d 0a 09 73 65 74 20 72 65  ex $l 0]..set re
05b0: 73 74 20 5b 6c 72 61 6e 67 65 20 24 6c 20 31 20  st [lrange $l 1 
05c0: 65 6e 64 5d 0a 09 73 65 74 20 72 65 73 75 6c 74  end]..set result
05d0: 20 5b 6c 69 73 74 5d 0a 09 66 6f 72 65 61 63 68   [list]..foreach
05e0: 20 78 20 5b 50 6f 77 65 72 53 65 74 20 24 72 65   x [PowerSet $re
05f0: 73 74 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65  st] {..    lappe
0600: 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 6e 73 65  nd result [linse
0610: 72 74 20 24 78 20 30 20 24 65 6c 65 6d 65 6e 74  rt $x 0 $element
0620: 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  ]..    lappend r
0630: 65 73 75 6c 74 20 24 78 0a 09 7d 0a 09 72 65 74  esult $x..}..ret
0640: 75 72 6e 20 24 72 65 73 75 6c 74 0a 20 20 20 20  urn $result.    
0650: 7d 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  }..    variable 
0660: 65 6e 76 56 61 72 73 20 7b 4c 43 5f 41 4c 4c 20  envVars {LC_ALL 
0670: 4c 43 5f 4d 45 53 53 41 47 45 53 20 4c 41 4e 47  LC_MESSAGES LANG
0680: 7d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 63  }.    variable c
0690: 6f 75 6e 74 20 30 0a 20 20 20 20 76 61 72 69 61  ount 0.    varia
06a0: 62 6c 65 20 62 6f 64 79 0a 20 20 20 20 76 61 72  ble body.    var
06b0: 69 61 62 6c 65 20 72 65 73 75 6c 74 0a 20 20 20  iable result.   
06c0: 20 76 61 72 69 61 62 6c 65 20 73 65 74 56 61 72   variable setVar
06d0: 73 0a 20 20 20 20 66 6f 72 65 61 63 68 20 73 65  s.    foreach se
06e0: 74 56 61 72 73 20 5b 50 6f 77 65 72 53 65 74 20  tVars [PowerSet 
06f0: 24 65 6e 76 56 61 72 73 5d 20 7b 0a 09 73 65 74  $envVars] {..set
0700: 20 72 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20   result [string 
0710: 74 6f 6c 6f 77 65 72 20 5b 6c 69 6e 64 65 78 20  tolower [lindex 
0720: 24 73 65 74 56 61 72 73 20 30 5d 5d 0a 09 69 66  $setVars 0]]..if
0730: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
0740: 20 24 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20   $result] == 0} 
0750: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  {..    if {[info
0760: 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 3a 3a 6d   exists ::tcl::m
0770: 61 63 3a 3a 6c 6f 63 61 6c 65 5d 7d 20 7b 0a 69  ac::locale]} {.i
0780: 66 20 7b 5b 70 61 63 6b 61 67 65 20 76 73 61 74  f {[package vsat
0790: 69 73 66 69 65 73 20 5b 70 61 63 6b 61 67 65 20  isfies [package 
07a0: 70 72 6f 76 69 64 65 20 6d 73 67 63 61 74 5d 20  provide msgcat] 
07b0: 31 2e 37 5d 7d 20 7b 0a 09 09 73 65 74 20 72 65  1.7]} {...set re
07c0: 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 74 6f 6c  sult [string tol
07d0: 6f 77 65 72 20 5c 0a 09 09 09 5b 6d 73 67 63 61  ower \....[msgca
07e0: 74 3a 3a 6d 63 75 74 69 6c 3a 3a 43 6f 6e 76 65  t::mcutil::Conve
07f0: 72 74 4c 6f 63 61 6c 65 20 24 3a 3a 74 63 6c 3a  rtLocale $::tcl:
0800: 3a 6d 61 63 3a 3a 6c 6f 63 61 6c 65 5d 5d 0a 7d  :mac::locale]].}
0810: 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 72 65   else {...set re
0820: 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 74 6f 6c  sult [string tol
0830: 6f 77 65 72 20 5c 0a 09 09 09 5b 6d 73 67 63 61  ower \....[msgca
0840: 74 3a 3a 43 6f 6e 76 65 72 74 4c 6f 63 61 6c 65  t::ConvertLocale
0850: 20 24 3a 3a 74 63 6c 3a 3a 6d 61 63 3a 3a 6c 6f   $::tcl::mac::lo
0860: 63 61 6c 65 5d 5d 0a 7d 0a 09 20 20 20 20 7d 20  cale]].}..    } 
0870: 65 6c 73 65 20 7b 0a 09 09 69 66 20 7b 28 5b 69  else {...if {([i
0880: 6e 66 6f 20 73 68 61 72 65 64 6c 69 62 65 78 74  nfo sharedlibext
0890: 65 6e 73 69 6f 6e 5d 20 65 71 20 22 2e 64 6c 6c  ension] eq ".dll
08a0: 22 29 0a 09 09 09 26 26 20 21 5b 63 61 74 63 68  ")....&& ![catch
08b0: 20 7b 70 61 63 6b 61 67 65 20 72 65 71 75 69 72   {package requir
08c0: 65 20 72 65 67 69 73 74 72 79 7d 5d 7d 20 7b 0a  e registry}]} {.
08d0: 09 09 20 20 20 20 23 20 57 69 6e 64 6f 77 73 20  ..    # Windows 
08e0: 61 6e 64 20 43 79 67 77 69 6e 20 68 61 76 65 20  and Cygwin have 
08f0: 6f 74 68 65 72 20 77 61 79 73 20 74 6f 20 64 65  other ways to de
0900: 74 65 72 6d 69 6e 65 20 74 68 65 0a 09 09 20 20  termine the...  
0910: 20 20 23 20 6c 6f 63 61 6c 65 20 77 68 65 6e 20    # locale when 
0920: 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  the environment 
0930: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6d 69  variables are mi
0940: 73 73 69 6e 67 0a 09 09 20 20 20 20 23 20 61 6e  ssing...    # an
0950: 64 20 74 68 65 20 72 65 67 69 73 74 72 79 20 70  d the registry p
0960: 61 63 6b 61 67 65 20 69 73 20 70 72 65 73 65 6e  ackage is presen
0970: 74 0a 09 09 20 20 20 20 63 6f 6e 74 69 6e 75 65  t...    continue
0980: 0a 09 09 7d 0a 09 09 73 65 74 20 72 65 73 75 6c  ...}...set resul
0990: 74 20 63 0a 09 20 20 20 20 7d 0a 09 7d 0a 0c 0a  t c..    }..}...
09a0: 09 74 65 73 74 20 6d 73 67 63 61 74 2d 30 2e 24  .test msgcat-0.$
09b0: 63 6f 75 6e 74 20 5b 6c 69 73 74 20 5c 0a 09 20  count [list \.. 
09c0: 20 20 20 6c 6f 63 61 6c 65 20 69 6e 69 74 69 61     locale initia
09d0: 6c 69 7a 61 74 69 6f 6e 20 66 72 6f 6d 20 65 6e  lization from en
09e0: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
09f0: 6c 65 73 20 24 73 65 74 56 61 72 73 20 5c 0a 09  les $setVars \..
0a00: 5d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20  ] -setup {..    
0a10: 76 61 72 69 61 62 6c 65 20 76 61 72 0a 09 20 20  variable var..  
0a20: 20 20 66 6f 72 65 61 63 68 20 76 61 72 20 24 65    foreach var $e
0a30: 6e 76 56 61 72 73 20 7b 0a 09 09 63 61 74 63 68  nvVars {...catch
0a40: 20 7b 76 61 72 69 61 62 6c 65 20 24 76 61 72 20   {variable $var 
0a50: 24 3a 3a 65 6e 76 28 24 76 61 72 29 7d 0a 09 09  $::env($var)}...
0a60: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
0a70: 6e 20 3a 3a 65 6e 76 28 24 76 61 72 29 0a 09 20  n ::env($var).. 
0a80: 20 20 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 63     }..    foreac
0a90: 68 20 76 61 72 20 24 73 65 74 56 61 72 73 20 7b  h var $setVars {
0aa0: 0a 09 09 73 65 74 20 3a 3a 65 6e 76 28 24 76 61  ...set ::env($va
0ab0: 72 29 20 24 76 61 72 0a 09 20 20 20 20 7d 0a 09  r) $var..    }..
0ac0: 20 20 20 20 69 6e 74 65 72 70 20 63 72 65 61 74      interp creat
0ad0: 65 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 75 72  e [namespace cur
0ae0: 72 65 6e 74 5d 3a 3a 69 0a 09 20 20 20 20 69 20  rent]::i..    i 
0af0: 65 76 61 6c 20 5b 6c 69 73 74 20 70 61 63 6b 61  eval [list packa
0b00: 67 65 20 69 66 6e 65 65 64 65 64 20 6d 73 67 63  ge ifneeded msgc
0b10: 61 74 20 5b 70 61 63 6b 61 67 65 20 70 72 6f 76  at [package prov
0b20: 69 64 65 20 6d 73 67 63 61 74 5d 20 5c 0a 09 09  ide msgcat] \...
0b30: 20 20 20 20 5b 70 61 63 6b 61 67 65 20 69 66 6e      [package ifn
0b40: 65 65 64 65 64 20 6d 73 67 63 61 74 20 5b 70 61  eeded msgcat [pa
0b50: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 6d 73  ckage provide ms
0b60: 67 63 61 74 5d 5d 5d 0a 09 20 20 20 20 69 20 65  gcat]]]..    i e
0b70: 76 61 6c 20 70 61 63 6b 61 67 65 20 72 65 71 75  val package requ
0b80: 69 72 65 20 6d 73 67 63 61 74 0a 09 7d 20 2d 63  ire msgcat..} -c
0b90: 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 69 6e  leanup {..    in
0ba0: 74 65 72 70 20 64 65 6c 65 74 65 20 5b 6e 61 6d  terp delete [nam
0bb0: 65 73 70 61 63 65 20 63 75 72 72 65 6e 74 5d 3a  espace current]:
0bc0: 3a 69 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20  :i..    foreach 
0bd0: 76 61 72 20 24 65 6e 76 56 61 72 73 20 7b 0a 09  var $envVars {..
0be0: 09 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61  .unset -nocompla
0bf0: 69 6e 20 3a 3a 65 6e 76 28 24 76 61 72 29 0a 09  in ::env($var)..
0c00: 09 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 65 6e  .catch {set ::en
0c10: 76 28 24 76 61 72 29 20 5b 73 65 74 20 5b 6e 61  v($var) [set [na
0c20: 6d 65 73 70 61 63 65 20 63 75 72 72 65 6e 74 5d  mespace current]
0c30: 3a 3a 24 76 61 72 5d 7d 0a 09 20 20 20 20 7d 0a  ::$var]}..    }.
0c40: 09 7d 20 2d 62 6f 64 79 20 7b 69 20 65 76 61 6c  .} -body {i eval
0c50: 20 6d 73 67 63 61 74 3a 3a 6d 63 6c 6f 63 61 6c   msgcat::mclocal
0c60: 65 7d 20 2d 72 65 73 75 6c 74 20 24 72 65 73 75  e} -result $resu
0c70: 6c 74 0a 09 69 6e 63 72 20 63 6f 75 6e 74 0a 20  lt..incr count. 
0c80: 20 20 20 7d 0a 20 20 20 20 75 6e 73 65 74 20 2d     }.    unset -
0c90: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
0ca0: 74 0a 0a 20 20 20 20 23 20 43 6f 75 6c 64 20 61  t..    # Could a
0cb0: 64 64 20 74 65 73 74 73 20 6f 66 20 69 6e 69 74  dd tests of init
0cc0: 69 61 6c 69 7a 61 74 69 6f 6e 20 66 72 6f 6d 20  ialization from 
0cd0: 57 69 6e 64 6f 77 73 20 72 65 67 69 73 74 72 79  Windows registry
0ce0: 20 68 65 72 65 2e 0a 20 20 20 20 23 20 55 73 65   here..    # Use
0cf0: 20 61 20 66 61 6b 65 20 72 65 67 69 73 74 72 79   a fake registry
0d00: 20 70 61 63 6b 61 67 65 2e 0a 0a 20 20 20 20 23   package...    #
0d10: 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d 31 2e   Tests msgcat-1.
0d20: 2a 3a 20 5b 6d 63 6c 6f 63 61 6c 65 5d 2c 20 5b  *: [mclocale], [
0d30: 6d 63 70 72 65 66 65 72 65 6e 63 65 73 5d 0a 0a  mcpreferences]..
0d40: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
0d50: 31 2e 33 20 7b 6d 63 6c 6f 63 61 6c 65 20 73 65  1.3 {mclocale se
0d60: 74 2c 20 73 69 6e 67 6c 65 20 65 6c 65 6d 65 6e  t, single elemen
0d70: 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 76 61 72  t} -setup {..var
0d80: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
0d90: 6c 6f 63 61 6c 65 5d 0a 20 20 20 20 7d 20 2d 63  locale].    } -c
0da0: 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61  leanup {..mcloca
0db0: 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d  le $locale.    }
0dc0: 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63 61   -body {..mcloca
0dd0: 6c 65 20 65 6e 0a 20 20 20 20 7d 20 2d 72 65 73  le en.    } -res
0de0: 75 6c 74 20 65 6e 0a 0a 20 20 20 20 74 65 73 74  ult en..    test
0df0: 20 6d 73 67 63 61 74 2d 31 2e 34 20 7b 6d 63 6c   msgcat-1.4 {mcl
0e00: 6f 63 61 6c 65 20 67 65 74 2c 20 73 69 6e 67 6c  ocale get, singl
0e10: 65 20 65 6c 65 6d 65 6e 74 7d 20 2d 73 65 74 75  e element} -setu
0e20: 70 20 7b 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f  p {..variable lo
0e30: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
0e40: 09 6d 63 6c 6f 63 61 6c 65 20 65 6e 0a 20 20 20  .mclocale en.   
0e50: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
0e60: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
0e70: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d      } -body {..m
0e80: 63 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 72  clocale.    } -r
0e90: 65 73 75 6c 74 20 65 6e 0a 0a 20 20 20 20 74 65  esult en..    te
0ea0: 73 74 20 6d 73 67 63 61 74 2d 31 2e 35 20 7b 6d  st msgcat-1.5 {m
0eb0: 63 70 72 65 66 65 72 65 6e 63 65 73 2c 20 73 69  cpreferences, si
0ec0: 6e 67 6c 65 20 65 6c 65 6d 65 6e 74 7d 20 2d 73  ngle element} -s
0ed0: 65 74 75 70 20 7b 0a 09 76 61 72 69 61 62 6c 65  etup {..variable
0ee0: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
0ef0: 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 65 6e 0a  e]..mclocale en.
0f00: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
0f10: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
0f20: 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  le.    } -body {
0f30: 0a 09 6d 63 70 72 65 66 65 72 65 6e 63 65 73 0a  ..mcpreferences.
0f40: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 65      } -result {e
0f50: 6e 20 7b 7d 7d 0a 0a 20 20 20 20 74 65 73 74 20  n {}}..    test 
0f60: 6d 73 67 63 61 74 2d 31 2e 36 20 7b 6d 63 6c 6f  msgcat-1.6 {mclo
0f70: 63 61 6c 65 20 73 65 74 2c 20 74 77 6f 20 65 6c  cale set, two el
0f80: 65 6d 65 6e 74 73 7d 20 2d 73 65 74 75 70 20 7b  ements} -setup {
0f90: 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c  ..variable local
0fa0: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 20 20 20  e [mclocale].   
0fb0: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d   } -cleanup {..m
0fc0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
0fd0: 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d      } -body {..m
0fe0: 63 6c 6f 63 61 6c 65 20 65 6e 5f 55 53 0a 20 20  clocale en_US.  
0ff0: 20 20 7d 20 2d 72 65 73 75 6c 74 20 65 6e 5f 75    } -result en_u
1000: 73 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  s..    test msgc
1010: 61 74 2d 31 2e 37 20 7b 6d 63 6c 6f 63 61 6c 65  at-1.7 {mclocale
1020: 20 67 65 74 2c 20 74 77 6f 20 65 6c 65 6d 65 6e   get, two elemen
1030: 74 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09 76 61  ts} -setup {..va
1040: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
1050: 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61  clocale]..mcloca
1060: 6c 65 20 65 6e 5f 55 53 0a 20 20 20 20 7d 20 2d  le en_US.    } -
1070: 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63  cleanup {..mcloc
1080: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20  ale $locale.    
1090: 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63  } -body {..mcloc
10a0: 61 6c 65 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  ale.    } -resul
10b0: 74 20 65 6e 5f 75 73 0a 0a 20 20 20 20 74 65 73  t en_us..    tes
10c0: 74 20 6d 73 67 63 61 74 2d 31 2e 38 20 7b 6d 63  t msgcat-1.8 {mc
10d0: 70 72 65 66 65 72 65 6e 63 65 73 2c 20 74 77 6f  preferences, two
10e0: 20 65 6c 65 6d 65 6e 74 73 7d 20 2d 73 65 74 75   elements} -setu
10f0: 70 20 7b 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f  p {..variable lo
1100: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
1110: 09 6d 63 6c 6f 63 61 6c 65 20 65 6e 5f 55 53 0a  .mclocale en_US.
1120: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
1130: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
1140: 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  le.    } -body {
1150: 0a 09 6d 63 70 72 65 66 65 72 65 6e 63 65 73 0a  ..mcpreferences.
1160: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 65      } -result {e
1170: 6e 5f 75 73 20 65 6e 20 7b 7d 7d 0a 0a 20 20 20  n_us en {}}..   
1180: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 2e 39   test msgcat-1.9
1190: 20 7b 6d 63 6c 6f 63 61 6c 65 20 73 65 74 2c 20   {mclocale set, 
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 20 20 20 20 7d 20 2d 63 6c 65 61  ale].    } -clea
11e0: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
11f0: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
1200: 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  ody {..mclocale 
1210: 65 6e 5f 55 53 5f 66 75 6e 6b 79 0a 20 20 20 20  en_US_funky.    
1220: 7d 20 2d 72 65 73 75 6c 74 20 65 6e 5f 75 73 5f  } -result en_us_
1230: 66 75 6e 6b 79 0a 0a 20 20 20 20 74 65 73 74 20  funky..    test 
1240: 6d 73 67 63 61 74 2d 31 2e 31 30 20 7b 6d 63 6c  msgcat-1.10 {mcl
1250: 6f 63 61 6c 65 20 67 65 74 2c 20 74 68 72 65 65  ocale get, three
1260: 20 65 6c 65 6d 65 6e 74 73 7d 20 2d 73 65 74 75   elements} -setu
1270: 70 20 7b 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f  p {..variable lo
1280: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
1290: 09 6d 63 6c 6f 63 61 6c 65 20 65 6e 5f 55 53 5f  .mclocale en_US_
12a0: 66 75 6e 6b 79 0a 20 20 20 20 7d 20 2d 63 6c 65  funky.    } -cle
12b0: 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65  anup {..mclocale
12c0: 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d   $locale.    } -
12d0: 62 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65  body {..mclocale
12e0: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 65  .    } -result e
12f0: 6e 5f 75 73 5f 66 75 6e 6b 79 0a 0a 20 20 20 20  n_us_funky..    
1300: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 2e 31 31  test msgcat-1.11
1310: 20 7b 6d 63 70 72 65 66 65 72 65 6e 63 65 73 2c   {mcpreferences,
1320: 20 74 68 72 65 65 20 65 6c 65 6d 65 6e 74 73 7d   three elements}
1330: 20 2d 73 65 74 75 70 20 7b 0a 09 76 61 72 69 61   -setup {..varia
1340: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
1350: 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20  cale]..mclocale 
1360: 65 6e 5f 55 53 5f 66 75 6e 6b 79 0a 20 20 20 20  en_US_funky.    
1370: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63  } -cleanup {..mc
1380: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20  locale $locale. 
1390: 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63     } -body {..mc
13a0: 70 72 65 66 65 72 65 6e 63 65 73 0a 20 20 20 20  preferences.    
13b0: 7d 20 2d 72 65 73 75 6c 74 20 7b 65 6e 5f 75 73  } -result {en_us
13c0: 5f 66 75 6e 6b 79 20 65 6e 5f 75 73 20 65 6e 20  _funky en_us en 
13d0: 7b 7d 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73  {}}..    test ms
13e0: 67 63 61 74 2d 31 2e 31 32 20 7b 6d 63 6c 6f 63  gcat-1.12 {mcloc
13f0: 61 6c 65 20 73 65 74 2c 20 72 65 6a 65 63 74 20  ale set, reject 
1400: 65 76 69 6c 20 69 6e 70 75 74 7d 20 2d 73 65 74  evil input} -set
1410: 75 70 20 7b 0a 09 76 61 72 69 61 62 6c 65 20 6c  up {..variable l
1420: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
1430: 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20  .    } -cleanup 
1440: 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63  {..mclocale $loc
1450: 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20  ale.    } -body 
1460: 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 2f 70 61 74  {..mclocale /pat
1470: 68 2f 74 6f 2f 65 76 69 6c 2f 63 6f 64 65 0a 20  h/to/evil/code. 
1480: 20 20 20 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65     } -returnCode
1490: 73 20 65 72 72 6f 72 20 2d 6d 61 74 63 68 20 67  s error -match g
14a0: 6c 6f 62 20 2d 72 65 73 75 6c 74 20 7b 69 6e 76  lob -result {inv
14b0: 61 6c 69 64 20 6e 65 77 4c 6f 63 61 6c 65 20 76  alid newLocale v
14c0: 61 6c 75 65 20 2a 7d 0a 0a 20 20 20 20 74 65 73  alue *}..    tes
14d0: 74 20 6d 73 67 63 61 74 2d 31 2e 31 33 20 7b 6d  t msgcat-1.13 {m
14e0: 63 6c 6f 63 61 6c 65 20 73 65 74 2c 20 72 65 6a  clocale set, rej
14f0: 65 63 74 20 65 76 69 6c 20 69 6e 70 75 74 7d 20  ect evil input} 
1500: 2d 73 65 74 75 70 20 7b 0a 09 76 61 72 69 61 62  -setup {..variab
1510: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
1520: 61 6c 65 5d 0a 20 20 20 20 7d 20 2d 63 6c 65 61  ale].    } -clea
1530: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
1540: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
1550: 6f 64 79 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  ody {..mclocale 
1560: 6c 6f 6f 6b 73 2f 6f 6b 2f 2e 2e 2f 2e 2e 2f 2e  looks/ok/../../.
1570: 2e 2f 2e 2e 2f 62 75 74 2f 69 73 2f 70 61 74 68  ./../but/is/path
1580: 2f 74 6f 2f 65 76 69 6c 2f 63 6f 64 65 0a 20 20  /to/evil/code.  
1590: 20 20 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73    } -returnCodes
15a0: 20 65 72 72 6f 72 20 2d 6d 61 74 63 68 20 67 6c   error -match gl
15b0: 6f 62 20 2d 72 65 73 75 6c 74 20 7b 69 6e 76 61  ob -result {inva
15c0: 6c 69 64 20 6e 65 77 4c 6f 63 61 6c 65 20 76 61  lid newLocale va
15d0: 6c 75 65 20 2a 7d 0a 0a 20 20 20 20 74 65 73 74  lue *}..    test
15e0: 20 6d 73 67 63 61 74 2d 31 2e 31 34 20 7b 6d 63   msgcat-1.14 {mc
15f0: 70 72 65 66 65 72 65 6e 63 65 73 2c 20 63 75 73  preferences, cus
1600: 74 6f 6d 20 6c 6f 63 61 6c 65 20 70 72 65 66 65  tom locale prefe
1610: 72 65 6e 63 65 73 7d 20 2d 73 65 74 75 70 20 7b  rences} -setup {
1620: 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c  ..variable local
1630: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63  e [mclocale]..mc
1640: 6c 6f 63 61 6c 65 20 65 6e 0a 09 6d 63 70 72 65  locale en..mcpre
1650: 66 65 72 65 6e 63 65 73 20 66 72 20 65 6e 20 7b  ferences fr en {
1660: 7d 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70  }.    } -cleanup
1670: 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f   {..mclocale $lo
1680: 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79  cale.    } -body
1690: 20 7b 0a 09 6d 63 70 72 65 66 65 72 65 6e 63 65   {..mcpreference
16a0: 73 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20  s.    } -result 
16b0: 7b 66 72 20 65 6e 20 7b 7d 7d 0a 0a 20 20 20 20  {fr en {}}..    
16c0: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 2e 31 35  test msgcat-1.15
16d0: 20 7b 6d 63 70 72 65 66 65 72 65 6e 63 65 73 2c   {mcpreferences,
16e0: 20 6f 76 65 72 77 72 69 74 65 20 63 75 73 74 6f   overwrite custo
16f0: 6d 20 6c 6f 63 61 6c 65 20 70 72 65 66 65 72 65  m locale prefere
1700: 6e 63 65 73 7d 5c 0a 20 20 20 20 2d 73 65 74 75  nces}\.    -setu
1710: 70 20 7b 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f  p {..variable lo
1720: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
1730: 09 6d 63 70 72 65 66 65 72 65 6e 63 65 73 20 66  .mcpreferences f
1740: 72 20 65 6e 20 7b 7d 0a 09 6d 63 6c 6f 63 61 6c  r en {}..mclocal
1750: 65 20 65 6e 0a 20 20 20 20 7d 20 2d 63 6c 65 61  e en.    } -clea
1760: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
1770: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
1780: 6f 64 79 20 7b 0a 09 6d 63 70 72 65 66 65 72 65  ody {..mcprefere
1790: 6e 63 65 73 0a 20 20 20 20 7d 20 2d 72 65 73 75  nces.    } -resu
17a0: 6c 74 20 7b 65 6e 20 7b 7d 7d 0a 0a 0a 20 20 20  lt {en {}}...   
17b0: 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d   # Tests msgcat-
17c0: 32 2e 2a 3a 20 5b 6d 63 73 65 74 5d 2c 20 5b 6d  2.*: [mcset], [m
17d0: 63 6d 73 65 74 5d 2c 20 6e 61 6d 65 73 70 61 63  cmset], namespac
17e0: 65 20 70 61 72 74 69 74 69 6f 6e 69 6e 67 0a 0a  e partitioning..
17f0: 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d      test msgcat-
1800: 32 2e 31 20 7b 6d 63 73 65 74 2c 20 67 6c 6f 62  2.1 {mcset, glob
1810: 61 6c 20 73 63 6f 70 65 7d 20 7b 0a 09 6e 61 6d  al scope} {..nam
1820: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 20 3a  espace eval :: :
1830: 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 20  :msgcat::mcset  
1840: 66 6f 6f 5f 42 41 52 20 74 65 78 74 31 20 74 65  foo_BAR text1 te
1850: 78 74 32 0a 20 20 20 20 7d 20 7b 74 65 78 74 32  xt2.    } {text2
1860: 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  }..    test msgc
1870: 61 74 2d 32 2e 32 20 7b 6d 63 73 65 74 2c 20 67  at-2.2 {mcset, g
1880: 6c 6f 62 61 6c 20 73 63 6f 70 65 2c 20 64 65 66  lobal scope, def
1890: 61 75 6c 74 7d 20 7b 0a 09 6e 61 6d 65 73 70 61  ault} {..namespa
18a0: 63 65 20 65 76 61 6c 20 3a 3a 20 3a 3a 6d 73 67  ce eval :: ::msg
18b0: 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f 6f 5f 42  cat::mcset foo_B
18c0: 41 52 20 74 65 78 74 33 0a 20 20 20 20 7d 20 7b  AR text3.    } {
18d0: 74 65 78 74 33 7d 0a 0a 20 20 20 20 74 65 73 74  text3}..    test
18e0: 20 6d 73 67 63 61 74 2d 32 2e 32 2e 31 20 7b 6d   msgcat-2.2.1 {m
18f0: 63 73 65 74 2c 20 6e 61 6d 65 73 70 61 63 65 20  cset, namespace 
1900: 6f 76 65 72 6c 61 70 7d 20 7b 0a 09 6e 61 6d 65  overlap} {..name
1910: 73 70 61 63 65 20 65 76 61 6c 20 62 61 7a 20 7b  space eval baz {
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 7a 7d 0a 20 20 20 20 7d 20 7b 63 6f  n1baz}.    } {co
1950: 6e 31 62 61 7a 7d 0a 0a 20 20 20 20 74 65 73 74  n1baz}..    test
1960: 20 6d 73 67 63 61 74 2d 32 2e 33 20 7b 6d 63 73   msgcat-2.3 {mcs
1970: 65 74 2c 20 6e 61 6d 65 73 70 61 63 65 20 6f 76  et, namespace ov
1980: 65 72 6c 61 70 7d 20 2d 73 65 74 75 70 20 7b 0a  erlap} -setup {.
1990: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
19a0: 62 61 72 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d  bar {::msgcat::m
19b0: 63 73 65 74 20 20 66 6f 6f 5f 42 41 52 20 63 6f  cset  foo_BAR co
19c0: 6e 31 20 63 6f 6e 31 62 61 72 7d 0a 09 6e 61 6d  n1 con1bar}..nam
19d0: 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 7a 20  espace eval baz 
19e0: 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74  {::msgcat::mcset
19f0: 20 20 66 6f 6f 5f 42 41 52 20 63 6f 6e 31 20 63    foo_BAR con1 c
1a00: 6f 6e 31 62 61 7a 7d 0a 09 76 61 72 69 61 62 6c  on1baz}..variabl
1a10: 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  e locale [mcloca
1a20: 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f  le]..mclocale fo
1a30: 6f 5f 42 41 52 0a 20 20 20 20 7d 20 2d 63 6c 65  o_BAR.    } -cle
1a40: 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65  anup {..mclocale
1a50: 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d   $locale.    } -
1a60: 62 6f 64 79 20 7b 0a 09 6e 61 6d 65 73 70 61 63  body {..namespac
1a70: 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a 6d 73  e eval bar {::ms
1a80: 67 63 61 74 3a 3a 6d 63 20 63 6f 6e 31 7d 0a 20  gcat::mc con1}. 
1a90: 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 63 6f 6e     } -result con
1aa0: 31 62 61 72 0a 0a 20 20 20 20 74 65 73 74 20 6d  1bar..    test m
1ab0: 73 67 63 61 74 2d 32 2e 34 20 7b 6d 63 73 65 74  sgcat-2.4 {mcset
1ac0: 2c 20 6e 61 6d 65 73 70 61 63 65 20 6f 76 65 72  , namespace over
1ad0: 6c 61 70 7d 20 2d 73 65 74 75 70 20 7b 0a 09 6e  lap} -setup {..n
1ae0: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61  amespace eval ba
1af0: 72 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73  r {::msgcat::mcs
1b00: 65 74 20 20 66 6f 6f 5f 42 41 52 20 63 6f 6e 31  et  foo_BAR con1
1b10: 20 63 6f 6e 31 62 61 72 7d 0a 09 6e 61 6d 65 73   con1bar}..names
1b20: 70 61 63 65 20 65 76 61 6c 20 62 61 7a 20 7b 3a  pace eval baz {:
1b30: 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 20  :msgcat::mcset  
1b40: 66 6f 6f 5f 42 41 52 20 63 6f 6e 31 20 63 6f 6e  foo_BAR con1 con
1b50: 31 62 61 7a 7d 0a 09 76 61 72 69 61 62 6c 65 20  1baz}..variable 
1b60: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
1b70: 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f  ]..mclocale foo_
1b80: 42 41 52 0a 20 20 20 20 7d 20 2d 63 6c 65 61 6e  BAR.    } -clean
1b90: 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20 24  up {..mclocale $
1ba0: 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62 6f  locale.    } -bo
1bb0: 64 79 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20  dy {..namespace 
1bc0: 65 76 61 6c 20 62 61 7a 20 7b 3a 3a 6d 73 67 63  eval baz {::msgc
1bd0: 61 74 3a 3a 6d 63 20 63 6f 6e 31 7d 0a 20 20 20  at::mc con1}.   
1be0: 20 7d 20 2d 72 65 73 75 6c 74 20 63 6f 6e 31 62   } -result con1b
1bf0: 61 7a 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67  az..    test msg
1c00: 63 61 74 2d 32 2e 35 20 7b 6d 63 6d 73 65 74 2c  cat-2.5 {mcmset,
1c10: 20 67 6c 6f 62 61 6c 20 73 63 6f 70 65 7d 20 2d   global scope} -
1c20: 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70 61  setup {..namespa
1c30: 63 65 20 65 76 61 6c 20 3a 3a 20 7b 0a 09 20 20  ce eval :: {..  
1c40: 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 6d 73    ::msgcat::mcms
1c50: 65 74 20 20 66 6f 6f 5f 42 41 52 20 7b 0a 09 20  et  foo_BAR {.. 
1c60: 20 20 20 20 20 20 20 73 72 63 31 20 74 72 61 6e         src1 tran
1c70: 73 31 0a 09 20 20 20 20 20 20 20 20 73 72 63 32  s1..        src2
1c80: 20 74 72 61 6e 73 32 0a 09 20 20 20 20 7d 0a 09   trans2..    }..
1c90: 7d 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61  }..variable loca
1ca0: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d  le [mclocale]..m
1cb0: 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52 0a  clocale foo_BAR.
1cc0: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
1cd0: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
1ce0: 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  le.    } -body {
1cf0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
1d00: 20 3a 3a 20 7b 0a 09 20 20 20 20 3a 3a 6d 73 67   :: {..    ::msg
1d10: 63 61 74 3a 3a 6d 63 20 73 72 63 31 0a 09 7d 0a  cat::mc src1..}.
1d20: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 74 72      } -result tr
1d30: 61 6e 73 31 0a 0a 20 20 20 20 74 65 73 74 20 6d  ans1..    test m
1d40: 73 67 63 61 74 2d 32 2e 36 20 7b 6d 63 6d 73 65  sgcat-2.6 {mcmse
1d50: 74 2c 20 6e 61 6d 65 73 70 61 63 65 20 6f 76 65  t, namespace ove
1d60: 72 6c 61 70 7d 20 2d 73 65 74 75 70 20 7b 0a 09  rlap} -setup {..
1d70: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62  namespace eval b
1d80: 61 72 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  ar {::msgcat::mc
1d90: 6d 73 65 74 20 20 66 6f 6f 5f 42 41 52 20 7b 63  mset  foo_BAR {c
1da0: 6f 6e 32 20 63 6f 6e 32 62 61 72 7d 7d 0a 09 6e  on2 con2bar}}..n
1db0: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61  amespace eval ba
1dc0: 7a 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 6d  z {::msgcat::mcm
1dd0: 73 65 74 20 20 66 6f 6f 5f 42 41 52 20 7b 63 6f  set  foo_BAR {co
1de0: 6e 32 20 63 6f 6e 32 62 61 7a 7d 7d 0a 09 76 61  n2 con2baz}}..va
1df0: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
1e00: 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61  clocale]..mcloca
1e10: 6c 65 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20 7d  le foo_BAR.    }
1e20: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c   -cleanup {..mcl
1e30: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20  ocale $locale.  
1e40: 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6e 61 6d    } -body {..nam
1e50: 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20  espace eval bar 
1e60: 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 20 63 6f  {::msgcat::mc co
1e70: 6e 32 7d 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  n2}.    } -resul
1e80: 74 20 63 6f 6e 32 62 61 72 0a 0a 20 20 20 20 74  t con2bar..    t
1e90: 65 73 74 20 6d 73 67 63 61 74 2d 32 2e 37 20 7b  est msgcat-2.7 {
1ea0: 6d 63 6d 73 65 74 2c 20 6e 61 6d 65 73 70 61 63  mcmset, namespac
1eb0: 65 20 6f 76 65 72 6c 61 70 7d 20 2d 73 65 74 75  e overlap} -setu
1ec0: 70 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 65  p {..namespace e
1ed0: 76 61 6c 20 62 61 72 20 7b 3a 3a 6d 73 67 63 61  val bar {::msgca
1ee0: 74 3a 3a 6d 63 6d 73 65 74 20 20 66 6f 6f 5f 42  t::mcmset  foo_B
1ef0: 41 52 20 7b 63 6f 6e 32 20 63 6f 6e 32 62 61 72  AR {con2 con2bar
1f00: 7d 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76  }}..namespace ev
1f10: 61 6c 20 62 61 7a 20 7b 3a 3a 6d 73 67 63 61 74  al baz {::msgcat
1f20: 3a 3a 6d 63 6d 73 65 74 20 20 66 6f 6f 5f 42 41  ::mcmset  foo_BA
1f30: 52 20 7b 63 6f 6e 32 20 63 6f 6e 32 62 61 7a 7d  R {con2 con2baz}
1f40: 7d 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61  }..variable loca
1f50: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d  le [mclocale]..m
1f60: 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52 0a  clocale foo_BAR.
1f70: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
1f80: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
1f90: 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  le.    } -body {
1fa0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
1fb0: 20 62 61 7a 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a   baz {::msgcat::
1fc0: 6d 63 20 63 6f 6e 32 7d 0a 20 20 20 20 7d 20 2d  mc con2}.    } -
1fd0: 72 65 73 75 6c 74 20 63 6f 6e 32 62 61 7a 0a 0a  result con2baz..
1fe0: 20 20 20 20 23 20 54 65 73 74 73 20 6d 73 67 63      # Tests msgc
1ff0: 61 74 2d 33 2e 2a 3a 20 5b 6d 63 73 65 74 5d 2c  at-3.*: [mcset],
2000: 20 5b 6d 63 5d 2c 20 63 61 74 61 6c 6f 67 20 22   [mc], catalog "
2010: 69 6e 68 65 72 69 74 61 6e 63 65 22 0a 20 20 20  inheritance".   
2020: 20 23 0a 20 20 20 20 23 20 54 65 73 74 20 6d 63   #.    # Test mc
2030: 73 65 74 20 61 6e 64 20 6d 63 2c 20 65 6e 73 75  set and mc, ensu
2040: 72 69 6e 67 20 74 68 61 74 20 6d 6f 72 65 20 73  ring that more s
2050: 70 65 63 69 66 69 63 20 6c 6f 63 61 6c 65 73 0a  pecific locales.
2060: 20 20 20 20 23 20 28 65 2e 67 2e 20 65 6e 5f 55      # (e.g. en_U
2070: 4b 29 20 77 69 6c 6c 20 73 65 61 72 63 68 20 6c  K) will search l
2080: 65 73 73 20 73 70 65 63 69 66 69 63 20 6c 6f 63  ess specific loc
2090: 61 6c 65 73 0a 20 20 20 20 23 20 28 65 2e 67 2e  ales.    # (e.g.
20a0: 20 65 6e 29 20 66 6f 72 20 74 72 61 6e 73 6c 61   en) for transla
20b0: 74 69 6f 6e 20 73 74 72 69 6e 67 73 2e 0a 20 20  tion strings..  
20c0: 20 20 23 0a 20 20 20 20 23 20 44 6f 20 74 68 69    #.    # Do thi
20d0: 73 20 66 6f 72 20 74 68 65 20 31 35 20 70 65 72  s for the 15 per
20e0: 6d 75 74 61 74 69 6f 6e 73 20 6f 66 0a 20 20 20  mutations of.   
20f0: 20 23 20 20 20 20 20 6c 6f 63 61 6c 65 73 3a 20   #     locales: 
2100: 7b 66 6f 6f 20 66 6f 6f 5f 42 41 52 20 66 6f 6f  {foo foo_BAR foo
2110: 5f 42 41 52 5f 62 61 7a 7d 0a 20 20 20 20 23 20  _BAR_baz}.    # 
2120: 20 20 20 20 73 74 72 69 6e 67 73 3a 20 7b 6f 76      strings: {ov
2130: 30 20 6f 76 31 20 6f 76 32 20 6f 76 33 20 6f 76  0 ov1 ov2 ov3 ov
2140: 34 7d 0a 20 20 20 20 23 09 20 20 6c 6f 63 61 6c  4}.    #.  local
2150: 65 20 52 4f 4f 54 20 20 20 20 20 20 20 20 64 65  e ROOT        de
2160: 66 69 6e 65 73 20 6f 76 30 2c 20 6f 76 31 2c 20  fines ov0, ov1, 
2170: 6f 76 32 2c 20 6f 76 33 0a 20 20 20 20 23 20 20  ov2, ov3.    #  
2180: 20 20 20 6c 6f 63 61 6c 65 20 66 6f 6f 20 20 20     locale foo   
2190: 20 20 20 20 20 20 64 65 66 69 6e 65 73 20 20 20        defines   
21a0: 20 20 20 6f 76 31 2c 20 6f 76 32 2c 20 6f 76 33     ov1, ov2, ov3
21b0: 0a 20 20 20 20 23 20 20 20 20 20 6c 6f 63 61 6c  .    #     local
21c0: 65 20 66 6f 6f 5f 42 41 52 20 20 20 20 20 64 65  e foo_BAR     de
21d0: 66 69 6e 65 73 20 20 20 20 20 20 20 20 20 20 20  fines           
21e0: 6f 76 32 2c 20 6f 76 33 0a 20 20 20 20 23 20 20  ov2, ov3.    #  
21f0: 20 20 20 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41     locale foo_BA
2200: 52 5f 42 41 5a 20 64 65 66 69 6e 65 73 20 20 20  R_BAZ defines   
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 76 33               ov3
2220: 0a 20 20 20 20 23 20 20 20 20 20 28 6f 76 34 20  .    #     (ov4 
2230: 69 73 20 64 65 66 69 6e 65 64 20 69 6e 20 6e 6f  is defined in no
2240: 6e 65 29 0a 20 20 20 20 23 20 53 6f 2c 0a 20 20  ne).    # So,.  
2250: 20 20 23 20 20 20 20 20 6f 76 33 20 73 68 6f 75    #     ov3 shou
2260: 6c 64 20 62 65 20 72 65 73 6f 6c 76 65 64 20 69  ld be resolved i
2270: 6e 20 66 6f 6f 2c 20 66 6f 6f 5f 42 41 52 2c 20  n foo, foo_BAR, 
2280: 66 6f 6f 5f 42 41 52 5f 62 61 7a 0a 20 20 20 20  foo_BAR_baz.    
2290: 23 20 20 20 20 20 6f 76 32 20 73 68 6f 75 6c 64  #     ov2 should
22a0: 20 62 65 20 72 65 73 6f 6c 76 65 64 20 69 6e 20   be resolved in 
22b0: 66 6f 6f 2c 20 66 6f 6f 5f 42 41 52 0a 20 20 20  foo, foo_BAR.   
22c0: 20 23 20 20 20 20 20 6f 76 32 20 73 68 6f 75 6c   #     ov2 shoul
22d0: 64 20 72 65 73 6f 6c 76 65 20 74 6f 20 66 6f 6f  d resolve to foo
22e0: 5f 42 41 52 20 69 6e 20 66 6f 6f 5f 42 41 52 5f  _BAR in foo_BAR_
22f0: 62 61 7a 0a 20 20 20 20 23 20 20 20 20 20 6f 76  baz.    #     ov
2300: 31 20 73 68 6f 75 6c 64 20 62 65 20 72 65 73 6f  1 should be reso
2310: 6c 76 65 64 20 69 6e 20 66 6f 6f 0a 20 20 20 20  lved in foo.    
2320: 23 20 20 20 20 20 6f 76 31 20 73 68 6f 75 6c 64  #     ov1 should
2330: 20 72 65 73 6f 6c 76 65 20 74 6f 20 66 6f 6f 20   resolve to foo 
2340: 69 6e 20 66 6f 6f 5f 42 41 52 2c 20 66 6f 6f 5f  in foo_BAR, foo_
2350: 42 41 52 5f 62 61 7a 0a 20 20 20 20 23 20 20 20  BAR_baz.    #   
2360: 20 20 6f 76 34 20 73 68 6f 75 6c 64 20 62 65 20    ov4 should be 
2370: 72 65 73 6f 6c 76 65 64 20 69 6e 20 6e 6f 6e 65  resolved in none
2380: 2c 20 61 6e 64 20 63 61 6c 6c 20 6d 63 75 6e 6b  , and call mcunk
2390: 6e 6f 77 6e 0a 20 20 20 20 23 0a 20 20 20 20 76  nown.    #.    v
23a0: 61 72 69 61 62 6c 65 20 63 6f 75 6e 74 20 32 0a  ariable count 2.
23b0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 72 65 73      variable res
23c0: 75 6c 74 0a 20 20 20 20 61 72 72 61 79 20 73 65  ult.    array se
23d0: 74 20 72 65 73 75 6c 74 20 7b 0a 09 66 6f 6f 2c  t result {..foo,
23e0: 6f 76 30 20 6f 76 30 5f 52 4f 4f 54 20 66 6f 6f  ov0 ov0_ROOT foo
23f0: 2c 6f 76 31 20 6f 76 31 5f 66 6f 6f 20 66 6f 6f  ,ov1 ov1_foo foo
2400: 2c 6f 76 32 20 6f 76 32 5f 66 6f 6f 0a 20 20 20  ,ov2 ov2_foo.   
2410: 20 20 20 20 20 66 6f 6f 2c 6f 76 33 20 6f 76 33       foo,ov3 ov3
2420: 5f 66 6f 6f 20 66 6f 6f 2c 6f 76 34 20 6f 76 34  _foo foo,ov4 ov4
2430: 0a 09 66 6f 6f 5f 42 41 52 2c 6f 76 30 20 6f 76  ..foo_BAR,ov0 ov
2440: 30 5f 52 4f 4f 54 20 66 6f 6f 5f 42 41 52 2c 6f  0_ROOT foo_BAR,o
2450: 76 31 20 6f 76 31 5f 66 6f 6f 20 66 6f 6f 5f 42  v1 ov1_foo foo_B
2460: 41 52 2c 6f 76 32 20 6f 76 32 5f 66 6f 6f 5f 42  AR,ov2 ov2_foo_B
2470: 41 52 0a 20 20 20 20 20 20 20 20 66 6f 6f 5f 42  AR.        foo_B
2480: 41 52 2c 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f 42  AR,ov3 ov3_foo_B
2490: 41 52 09 66 6f 6f 5f 42 41 52 2c 6f 76 34 20 6f  AR.foo_BAR,ov4 o
24a0: 76 34 0a 20 20 20 20 20 20 20 20 66 6f 6f 5f 42  v4.        foo_B
24b0: 41 52 5f 62 61 7a 2c 6f 76 30 20 6f 76 30 5f 52  AR_baz,ov0 ov0_R
24c0: 4f 4f 54 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 2c  OOT foo_BAR_baz,
24d0: 6f 76 31 20 6f 76 31 5f 66 6f 6f 0a 20 20 20 20  ov1 ov1_foo.    
24e0: 20 20 20 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 2c      foo_BAR_baz,
24f0: 6f 76 32 20 6f 76 32 5f 66 6f 6f 5f 42 41 52 0a  ov2 ov2_foo_BAR.
2500: 09 66 6f 6f 5f 42 41 52 5f 62 61 7a 2c 6f 76 33  .foo_BAR_baz,ov3
2510: 20 6f 76 33 5f 66 6f 6f 5f 42 41 52 5f 62 61 7a   ov3_foo_BAR_baz
2520: 20 66 6f 6f 5f 42 41 52 5f 62 61 7a 2c 6f 76 34   foo_BAR_baz,ov4
2530: 20 6f 76 34 0a 20 20 20 20 7d 0a 20 20 20 20 76   ov4.    }.    v
2540: 61 72 69 61 62 6c 65 20 6c 6f 63 0a 20 20 20 20  ariable loc.    
2550: 76 61 72 69 61 62 6c 65 20 73 74 72 69 6e 67 0a  variable string.
2560: 20 20 20 20 66 6f 72 65 61 63 68 20 6c 6f 63 20      foreach loc 
2570: 7b 66 6f 6f 20 66 6f 6f 5f 42 41 52 20 66 6f 6f  {foo foo_BAR foo
2580: 5f 42 41 52 5f 62 61 7a 7d 20 7b 0a 09 66 6f 72  _BAR_baz} {..for
2590: 65 61 63 68 20 73 74 72 69 6e 67 20 7b 6f 76 30  each string {ov0
25a0: 20 6f 76 31 20 6f 76 32 20 6f 76 33 20 6f 76 34   ov1 ov2 ov3 ov4
25b0: 7d 20 7b 0a 09 20 20 20 20 74 65 73 74 20 6d 73  } {..    test ms
25c0: 67 63 61 74 2d 33 2e 24 63 6f 75 6e 74 20 7b 6d  gcat-3.$count {m
25d0: 63 73 65 74 2c 20 6f 76 65 72 6c 61 70 7d 20 2d  cset, overlap} -
25e0: 73 65 74 75 70 20 7b 0a 09 09 6d 63 73 65 74 20  setup {...mcset 
25f0: 7b 7d 20 6f 76 30 20 6f 76 30 5f 52 4f 4f 54 0a  {} ov0 ov0_ROOT.
2600: 09 09 6d 63 73 65 74 20 7b 7d 20 6f 76 31 20 6f  ..mcset {} ov1 o
2610: 76 31 5f 52 4f 4f 54 0a 09 09 6d 63 73 65 74 20  v1_ROOT...mcset 
2620: 7b 7d 20 6f 76 32 20 6f 76 32 5f 52 4f 4f 54 0a  {} ov2 ov2_ROOT.
2630: 09 09 6d 63 73 65 74 20 7b 7d 20 6f 76 33 20 6f  ..mcset {} ov3 o
2640: 76 33 5f 52 4f 4f 54 0a 09 09 6d 63 73 65 74 20  v3_ROOT...mcset 
2650: 66 6f 6f 20 6f 76 31 20 6f 76 31 5f 66 6f 6f 0a  foo ov1 ov1_foo.
2660: 09 09 6d 63 73 65 74 20 66 6f 6f 20 6f 76 32 20  ..mcset foo ov2 
2670: 6f 76 32 5f 66 6f 6f 0a 09 09 6d 63 73 65 74 20  ov2_foo...mcset 
2680: 66 6f 6f 20 6f 76 33 20 6f 76 33 5f 66 6f 6f 0a  foo ov3 ov3_foo.
2690: 09 09 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 20  ..mcset foo_BAR 
26a0: 6f 76 32 20 6f 76 32 5f 66 6f 6f 5f 42 41 52 0a  ov2 ov2_foo_BAR.
26b0: 09 09 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 20  ..mcset foo_BAR 
26c0: 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f 42 41 52 0a  ov3 ov3_foo_BAR.
26d0: 09 09 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 5f  ..mcset foo_BAR_
26e0: 62 61 7a 20 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f  baz ov3 ov3_foo_
26f0: 42 41 52 5f 62 61 7a 0a 09 09 76 61 72 69 61 62  BAR_baz...variab
2700: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
2710: 61 6c 65 5d 0a 09 09 6d 63 6c 6f 63 61 6c 65 20  ale]...mclocale 
2720: 24 6c 6f 63 0a 09 20 20 20 20 7d 20 2d 63 6c 65  $loc..    } -cle
2730: 61 6e 75 70 20 7b 0a 09 09 6d 63 6c 6f 63 61 6c  anup {...mclocal
2740: 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 7d  e $locale..    }
2750: 20 2d 62 6f 64 79 20 7b 0a 09 09 6d 63 20 24 73   -body {...mc $s
2760: 74 72 69 6e 67 0a 09 20 20 20 20 7d 20 2d 72 65  tring..    } -re
2770: 73 75 6c 74 20 24 72 65 73 75 6c 74 28 24 6c 6f  sult $result($lo
2780: 63 2c 24 73 74 72 69 6e 67 29 0a 09 20 20 20 20  c,$string)..    
2790: 69 6e 63 72 20 63 6f 75 6e 74 0a 09 7d 0a 20 20  incr count..}.  
27a0: 20 20 7d 0a 20 20 20 20 75 6e 73 65 74 20 2d 6e    }.    unset -n
27b0: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
27c0: 0a 0a 20 20 20 20 23 20 54 65 73 74 73 20 6d 73  ..    # Tests ms
27d0: 67 63 61 74 2d 34 2e 2a 3a 20 5b 6d 63 75 6e 6b  gcat-4.*: [mcunk
27e0: 6e 6f 77 6e 5d 0a 0a 20 20 20 20 74 65 73 74 20  nown]..    test 
27f0: 6d 73 67 63 61 74 2d 34 2e 32 20 7b 6d 63 75 6e  msgcat-4.2 {mcun
2800: 6b 6e 6f 77 6e 2c 20 64 65 66 61 75 6c 74 7d 20  known, default} 
2810: 2d 73 65 74 75 70 20 7b 0a 09 6d 63 73 65 74 20  -setup {..mcset 
2820: 66 6f 6f 20 75 6e 6b 31 20 22 75 6e 6b 6e 6f 77  foo unk1 "unknow
2830: 6e 20 31 22 0a 09 76 61 72 69 61 62 6c 65 20 6c  n 1"..variable l
2840: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
2850: 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 20  ..mclocale foo. 
2860: 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a     } -cleanup {.
2870: 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c  .mclocale $local
2880: 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a  e.    } -body {.
2890: 09 6d 63 20 75 6e 6b 31 0a 20 20 20 20 7d 20 2d  .mc unk1.    } -
28a0: 72 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20  result {unknown 
28b0: 31 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67  1}..    test msg
28c0: 63 61 74 2d 34 2e 33 20 7b 6d 63 75 6e 6b 6e 6f  cat-4.3 {mcunkno
28d0: 77 6e 2c 20 64 65 66 61 75 6c 74 7d 20 2d 73 65  wn, default} -se
28e0: 74 75 70 20 7b 0a 09 6d 63 73 65 74 20 66 6f 6f  tup {..mcset foo
28f0: 20 75 6e 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20 31   unk1 "unknown 1
2900: 22 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61  "..variable loca
2910: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d  le [mclocale]..m
2920: 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20  clocale foo.    
2930: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63  } -cleanup {..mc
2940: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20  locale $locale. 
2950: 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63     } -body {..mc
2960: 20 75 6e 6b 32 0a 20 20 20 20 7d 20 2d 72 65 73   unk2.    } -res
2970: 75 6c 74 20 75 6e 6b 32 0a 0a 20 20 20 20 74 65  ult unk2..    te
2980: 73 74 20 6d 73 67 63 61 74 2d 34 2e 34 20 7b 6d  st msgcat-4.4 {m
2990: 63 75 6e 6b 6e 6f 77 6e 2c 20 6f 76 65 72 72 69  cunknown, overri
29a0: 64 64 65 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 09  dden} -setup {..
29b0: 72 65 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a  rename ::msgcat:
29c0: 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 53 61 76 65 64  :mcunknown Saved
29d0: 4d 63 75 6e 6b 6e 6f 77 6e 0a 09 70 72 6f 63 20  Mcunknown..proc 
29e0: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e  ::msgcat::mcunkn
29f0: 6f 77 6e 20 7b 64 6f 6d 20 73 7d 20 7b 0a 20 20  own {dom s} {.  
2a00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a10: 20 75 6e 6b 6e 6f 77 6e 3a 24 64 6f 6d 3a 24 73   unknown:$dom:$s
2a20: 0a 09 7d 0a 09 6d 63 73 65 74 20 66 6f 6f 20 75  ..}..mcset foo u
2a30: 6e 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20 31 22 0a  nk1 "unknown 1".
2a40: 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65  .variable locale
2a50: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c   [mclocale]..mcl
2a60: 6f 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20  ocale foo.    } 
2a70: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f  -cleanup {..mclo
2a80: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 72 65  cale $locale..re
2a90: 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d  name ::msgcat::m
2aa0: 63 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 09 72 65 6e  cunknown {}..ren
2ab0: 61 6d 65 20 53 61 76 65 64 4d 63 75 6e 6b 6e 6f  ame SavedMcunkno
2ac0: 77 6e 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75  wn ::msgcat::mcu
2ad0: 6e 6b 6e 6f 77 6e 0a 20 20 20 20 7d 20 2d 62 6f  nknown.    } -bo
2ae0: 64 79 20 7b 0a 09 6d 63 20 75 6e 6b 31 0a 20 20  dy {..mc unk1.  
2af0: 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 75 6e 6b    } -result {unk
2b00: 6e 6f 77 6e 20 31 7d 0a 0a 20 20 20 20 74 65 73  nown 1}..    tes
2b10: 74 20 6d 73 67 63 61 74 2d 34 2e 35 20 7b 6d 63  t msgcat-4.5 {mc
2b20: 75 6e 6b 6e 6f 77 6e 2c 20 6f 76 65 72 72 69 64  unknown, overrid
2b30: 64 65 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 09 72  den} -setup {..r
2b40: 65 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a  ename ::msgcat::
2b50: 6d 63 75 6e 6b 6e 6f 77 6e 20 53 61 76 65 64 4d  mcunknown SavedM
2b60: 63 75 6e 6b 6e 6f 77 6e 0a 09 70 72 6f 63 20 3a  cunknown..proc :
2b70: 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f  :msgcat::mcunkno
2b80: 77 6e 20 7b 64 6f 6d 20 73 7d 20 7b 0a 20 20 20  wn {dom s} {.   
2b90: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ba0: 75 6e 6b 6e 6f 77 6e 3a 24 64 6f 6d 3a 24 73 0a  unknown:$dom:$s.
2bb0: 09 7d 0a 09 6d 63 73 65 74 20 66 6f 6f 20 75 6e  .}..mcset foo un
2bc0: 6b 31 20 22 75 6e 6b 6e 6f 77 6e 20 31 22 0a 09  k1 "unknown 1"..
2bd0: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
2be0: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f  [mclocale]..mclo
2bf0: 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20 2d  cale foo.    } -
2c00: 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63  cleanup {..mcloc
2c10: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 72 65 6e  ale $locale..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 7b 7d 0a 09 72 65 6e 61  unknown {}..rena
2c40: 6d 65 20 53 61 76 65 64 4d 63 75 6e 6b 6e 6f 77  me SavedMcunknow
2c50: 6e 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e  n ::msgcat::mcun
2c60: 6b 6e 6f 77 6e 0a 20 20 20 20 7d 20 2d 62 6f 64  known.    } -bod
2c70: 79 20 7b 0a 09 6d 63 20 75 6e 6b 32 0a 20 20 20  y {..mc unk2.   
2c80: 20 7d 20 2d 72 65 73 75 6c 74 20 7b 75 6e 6b 6e   } -result {unkn
2c90: 6f 77 6e 3a 66 6f 6f 3a 75 6e 6b 32 7d 0a 0a 20  own:foo:unk2}.. 
2ca0: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 34     test msgcat-4
2cb0: 2e 36 20 7b 6d 63 75 6e 6b 6e 6f 77 6e 2c 20 75  .6 {mcunknown, u
2cc0: 70 6c 65 76 65 6c 20 63 6f 6e 74 65 78 74 7d 20  plevel context} 
2cd0: 2d 73 65 74 75 70 20 7b 0a 09 72 65 6e 61 6d 65  -setup {..rename
2ce0: 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b   ::msgcat::mcunk
2cf0: 6e 6f 77 6e 20 53 61 76 65 64 4d 63 75 6e 6b 6e  nown SavedMcunkn
2d00: 6f 77 6e 0a 09 70 72 6f 63 20 3a 3a 6d 73 67 63  own..proc ::msgc
2d10: 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 7b 64  at::mcunknown {d
2d20: 6f 6d 20 73 7d 20 7b 0a 20 20 20 20 20 20 20 20  om s} {.        
2d30: 20 20 20 20 72 65 74 75 72 6e 20 22 75 6e 6b 6e      return "unkn
2d40: 6f 77 6e 3a 24 64 6f 6d 3a 24 73 3a 5b 65 78 70  own:$dom:$s:[exp
2d50: 72 20 7b 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 20  r {[info level] 
2d60: 2d 20 31 7d 5d 22 0a 09 7d 0a 09 6d 63 73 65 74  - 1}]"..}..mcset
2d70: 20 66 6f 6f 20 75 6e 6b 31 20 22 75 6e 6b 6e 6f   foo unk1 "unkno
2d80: 77 6e 20 31 22 0a 09 76 61 72 69 61 62 6c 65 20  wn 1"..variable 
2d90: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
2da0: 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a  ]..mclocale foo.
2db0: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
2dc0: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
2dd0: 6c 65 0a 09 72 65 6e 61 6d 65 20 3a 3a 6d 73 67  le..rename ::msg
2de0: 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 7b  cat::mcunknown {
2df0: 7d 0a 09 72 65 6e 61 6d 65 20 53 61 76 65 64 4d  }..rename SavedM
2e00: 63 75 6e 6b 6e 6f 77 6e 20 3a 3a 6d 73 67 63 61  cunknown ::msgca
2e10: 74 3a 3a 6d 63 75 6e 6b 6e 6f 77 6e 0a 20 20 20  t::mcunknown.   
2e20: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 20 75   } -body {..mc u
2e30: 6e 6b 32 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  nk2.    } -resul
2e40: 74 20 75 6e 6b 6e 6f 77 6e 3a 66 6f 6f 3a 75 6e  t unknown:foo:un
2e50: 6b 32 3a 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 0a  k2:[info level].
2e60: 0a 20 20 20 20 23 20 54 65 73 74 73 20 6d 73 67  .    # Tests msg
2e70: 63 61 74 2d 35 2e 2a 3a 20 5b 6d 63 6c 6f 61 64  cat-5.*: [mcload
2e80: 5d 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  ]..    variable 
2e90: 6c 6f 63 61 6c 65 73 20 7b 7b 7d 20 66 6f 6f 20  locales {{} foo 
2ea0: 66 6f 6f 5f 42 41 52 20 66 6f 6f 5f 42 41 52 5f  foo_BAR foo_BAR_
2eb0: 62 61 7a 7d 0a 20 20 20 20 73 65 74 20 6d 73 67  baz}.    set msg
2ec0: 64 69 72 20 5b 6d 61 6b 65 44 69 72 65 63 74 6f  dir [makeDirecto
2ed0: 72 79 20 6d 73 67 64 69 72 5d 0a 20 20 20 20 66  ry msgdir].    f
2ee0: 6f 72 65 61 63 68 20 6c 6f 63 20 24 6c 6f 63 61  oreach loc $loca
2ef0: 6c 65 73 20 7b 0a 09 69 66 20 7b 20 24 6c 6f 63  les {..if { $loc
2f00: 20 65 71 20 7b 7d 20 7d 20 7b 0a 09 20 20 20 20   eq {} } {..    
2f10: 73 65 74 20 6d 73 67 20 52 4f 4f 54 0a 20 20 20  set msg ROOT.   
2f20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
2f30: 20 20 20 73 65 74 20 6d 73 67 20 5b 73 74 72 69     set msg [stri
2f40: 6e 67 20 74 6f 6c 6f 77 65 72 20 24 6c 6f 63 5d  ng tolower $loc]
2f50: 0a 09 7d 0a 09 6d 61 6b 65 46 69 6c 65 20 5b 6c  ..}..makeFile [l
2f60: 69 73 74 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  ist ::msgcat::mc
2f70: 73 65 74 20 24 6c 6f 63 20 61 62 63 20 61 62 63  set $loc abc abc
2f80: 2d 24 6c 6f 63 5d 20 24 6d 73 67 2e 6d 73 67 20  -$loc] $msg.msg 
2f90: 24 6d 73 67 64 69 72 0a 20 20 20 20 7d 0a 20 20  $msgdir.    }.  
2fa0: 20 20 76 61 72 69 61 62 6c 65 20 63 6f 75 6e 74    variable count
2fb0: 20 31 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6c   1.    foreach l
2fc0: 6f 63 20 7b 66 6f 6f 20 66 6f 6f 5f 42 41 52 20  oc {foo foo_BAR 
2fd0: 66 6f 6f 5f 42 41 52 5f 62 61 7a 7d 20 7b 0a 09  foo_BAR_baz} {..
2fe0: 74 65 73 74 20 6d 73 67 63 61 74 2d 35 2e 24 63  test msgcat-5.$c
2ff0: 6f 75 6e 74 20 7b 6d 63 6c 6f 61 64 7d 20 2d 73  ount {mcload} -s
3000: 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69  etup {..    vari
3010: 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c  able locale [mcl
3020: 6f 63 61 6c 65 5d 0a 09 20 20 20 20 3a 3a 6d 73  ocale]..    ::ms
3030: 67 63 61 74 3a 3a 6d 63 6c 6f 63 61 6c 65 20 22  gcat::mclocale "
3040: 22 0a 09 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a  "..    ::msgcat:
3050: 3a 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73  :mcloadedlocales
3060: 20 63 6c 65 61 72 0a 09 20 20 20 20 3a 3a 6d 73   clear..    ::ms
3070: 67 63 61 74 3a 3a 6d 63 70 61 63 6b 61 67 65 63  gcat::mcpackagec
3080: 6f 6e 66 69 67 20 75 6e 73 65 74 20 6d 63 66 6f  onfig unset mcfo
3090: 6c 64 65 72 0a 09 20 20 20 20 6d 63 6c 6f 63 61  lder..    mcloca
30a0: 6c 65 20 24 6c 6f 63 0a 09 7d 20 2d 63 6c 65 61  le $loc..} -clea
30b0: 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63  nup {..    mcloc
30c0: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20  ale $locale..   
30d0: 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 6c 6f 61   ::msgcat::mcloa
30e0: 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72  dedlocales clear
30f0: 0a 09 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a  ..    ::msgcat::
3100: 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20  mcpackageconfig 
3110: 75 6e 73 65 74 20 6d 63 66 6f 6c 64 65 72 0a 09  unset mcfolder..
3120: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
3130: 63 6c 6f 61 64 20 24 6d 73 67 64 69 72 0a 09 7d  cload $msgdir..}
3140: 20 2d 72 65 73 75 6c 74 20 5b 65 78 70 72 20 7b   -result [expr {
3150: 20 24 63 6f 75 6e 74 2b 31 20 7d 5d 0a 09 69 6e   $count+1 }]..in
3160: 63 72 20 63 6f 75 6e 74 0a 20 20 20 20 7d 0a 0a  cr count.    }..
3170: 20 20 20 20 23 20 45 76 65 6e 20 74 68 6f 75 67      # Even thoug
3180: 68 20 66 6f 6f 5f 42 41 52 5f 6e 6f 74 65 78 69  h foo_BAR_notexi
3190: 73 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  st does not exis
31a0: 74 2c 0a 20 20 20 20 23 20 66 6f 6f 5f 42 41 52  t,.    # foo_BAR
31b0: 2c 20 66 6f 6f 20 61 6e 64 20 74 68 65 20 72 6f  , foo and the ro
31c0: 6f 74 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 61  ot should be loa
31d0: 64 65 64 2e 0a 09 74 65 73 74 20 6d 73 67 63 61  ded...test msgca
31e0: 74 2d 35 2e 34 20 7b 6d 63 6c 6f 61 64 7d 20 2d  t-5.4 {mcload} -
31f0: 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72  setup {..    var
3200: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
3210: 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d 63 6c  locale]..    mcl
3220: 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52 5f 6e 6f  ocale foo_BAR_no
3230: 74 65 78 69 73 74 0a 09 7d 20 2d 63 6c 65 61 6e  texist..} -clean
3240: 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61  up {..    mcloca
3250: 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20  le $locale..    
3260: 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20  mcloadedlocales 
3270: 63 6c 65 61 72 0a 09 20 20 20 20 6d 63 70 61 63  clear..    mcpac
3280: 6b 61 67 65 63 6f 6e 66 69 67 20 75 6e 73 65 74  kageconfig unset
3290: 20 6d 63 66 6f 6c 64 65 72 0a 09 7d 20 2d 62 6f   mcfolder..} -bo
32a0: 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 61 64  dy {..    mcload
32b0: 20 24 6d 73 67 64 69 72 0a 09 7d 20 2d 72 65 73   $msgdir..} -res
32c0: 75 6c 74 20 33 0a 0a 09 74 65 73 74 20 6d 73 67  ult 3...test msg
32d0: 63 61 74 2d 35 2e 35 20 7b 6d 63 6c 6f 61 64 7d  cat-5.5 {mcload}
32e0: 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76   -setup {..    v
32f0: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
3300: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d  mclocale]..    m
3310: 63 6c 6f 63 61 6c 65 20 6e 6f 5f 46 49 5f 6e 6f  clocale no_FI_no
3320: 74 65 78 69 73 74 0a 09 7d 20 2d 63 6c 65 61 6e  texist..} -clean
3330: 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61  up {..    mcloca
3340: 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20  le $locale..    
3350: 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20  mcloadedlocales 
3360: 63 6c 65 61 72 0a 09 20 20 20 20 6d 63 70 61 63  clear..    mcpac
3370: 6b 61 67 65 63 6f 6e 66 69 67 20 75 6e 73 65 74  kageconfig unset
3380: 20 6d 63 66 6f 6c 64 65 72 0a 09 7d 20 2d 62 6f   mcfolder..} -bo
3390: 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 61 64  dy {..    mcload
33a0: 20 24 6d 73 67 64 69 72 0a 09 7d 20 2d 72 65 73   $msgdir..} -res
33b0: 75 6c 74 20 31 0a 0a 09 74 65 73 74 20 6d 73 67  ult 1...test msg
33c0: 63 61 74 2d 35 2e 36 20 7b 6d 63 6c 6f 61 64 7d  cat-5.6 {mcload}
33d0: 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76   -setup {..    v
33e0: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
33f0: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d  mclocale]..    m
3400: 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20  clocale foo..   
3410: 20 6d 63 6c 6f 61 64 20 24 6d 73 67 64 69 72 0a   mcload $msgdir.
3420: 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20  .} -cleanup {.. 
3430: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63     mclocale $loc
3440: 61 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09  ale..} -body {..
3450: 20 20 20 20 6d 63 20 61 62 63 0a 09 7d 20 2d 72      mc abc..} -r
3460: 65 73 75 6c 74 20 61 62 63 2d 66 6f 6f 0a 0a 09  esult abc-foo...
3470: 74 65 73 74 20 6d 73 67 63 61 74 2d 35 2e 37 20  test msgcat-5.7 
3480: 7b 6d 63 6c 6f 61 64 7d 20 2d 73 65 74 75 70 20  {mcload} -setup 
3490: 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20  {..    variable 
34a0: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
34b0: 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  ]..    mclocale 
34c0: 66 6f 6f 5f 42 41 52 0a 09 20 20 20 20 6d 63 6c  foo_BAR..    mcl
34d0: 6f 61 64 20 24 6d 73 67 64 69 72 0a 09 7d 20 2d  oad $msgdir..} -
34e0: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
34f0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
3500: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
3510: 6d 63 20 61 62 63 0a 09 7d 20 2d 72 65 73 75 6c  mc abc..} -resul
3520: 74 20 61 62 63 2d 66 6f 6f 5f 42 41 52 0a 0a 09  t abc-foo_BAR...
3530: 74 65 73 74 20 6d 73 67 63 61 74 2d 35 2e 38 20  test msgcat-5.8 
3540: 7b 6d 63 6c 6f 61 64 7d 20 2d 73 65 74 75 70 20  {mcload} -setup 
3550: 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20  {..    variable 
3560: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
3570: 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  ]..    mclocale 
3580: 66 6f 6f 5f 42 41 52 5f 62 61 7a 0a 09 20 20 20  foo_BAR_baz..   
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 66 6f 6f 5f 42 41  esult abc-foo_BA
35f0: 52 5f 62 61 7a 0a 0a 09 74 65 73 74 20 6d 73 67  R_baz...test msg
3600: 63 61 74 2d 35 2e 39 20 7b 6d 63 6c 6f 61 64 7d  cat-5.9 {mcload}
3610: 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76   -setup {..    v
3620: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
3630: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20 6d  mclocale]..    m
3640: 63 6c 6f 63 61 6c 65 20 6e 6f 5f 46 49 5f 6e 6f  clocale no_FI_no
3650: 74 65 78 69 73 74 0a 09 20 20 20 20 6d 63 6c 6f  texist..    mclo
3660: 61 64 20 24 6d 73 67 64 69 72 0a 09 7d 20 2d 63  ad $msgdir..} -c
3670: 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63  leanup {..    mc
3680: 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09  locale $locale..
3690: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
36a0: 63 20 61 62 63 0a 09 7d 20 2d 72 65 73 75 6c 74  c abc..} -result
36b0: 20 61 62 63 2d 0a 0a 09 74 65 73 74 20 6d 73 67   abc-...test msg
36c0: 63 61 74 2d 35 2e 31 30 20 7b 6d 63 6c 6f 61 64  cat-5.10 {mcload
36d0: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20  } -setup {..    
36e0: 72 65 6e 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a  rename ::msgcat:
36f0: 3a 6d 63 75 6e 6b 6e 6f 77 6e 20 53 61 76 65 64  :mcunknown Saved
3700: 4d 63 75 6e 6b 6e 6f 77 6e 0a 09 20 20 20 20 70  Mcunknown..    p
3710: 72 6f 63 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  roc ::msgcat::mc
3720: 75 6e 6b 6e 6f 77 6e 20 7b 64 6f 6d 20 73 7d 20  unknown {dom s} 
3730: 7b 0a 09 09 72 65 74 75 72 6e 20 75 6e 6b 6e 6f  {...return unkno
3740: 77 6e 3a 24 64 6f 6d 3a 24 73 0a 09 20 20 20 20  wn:$dom:$s..    
3750: 7d 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20  }..    variable 
3760: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
3770: 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  ]..    mclocale 
3780: 6e 6f 5f 46 49 5f 6e 6f 74 65 78 69 73 74 0a 09  no_FI_notexist..
3790: 20 20 20 20 6d 63 6c 6f 61 64 20 24 6d 73 67 64      mcload $msgd
37a0: 69 72 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  ir..} -cleanup {
37b0: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24  ..    mclocale $
37c0: 6c 6f 63 61 6c 65 0a 09 20 20 20 20 72 65 6e 61  locale..    rena
37d0: 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75  me ::msgcat::mcu
37e0: 6e 6b 6e 6f 77 6e 20 7b 7d 0a 09 20 20 20 20 72  nknown {}..    r
37f0: 65 6e 61 6d 65 20 53 61 76 65 64 4d 63 75 6e 6b  ename SavedMcunk
3800: 6e 6f 77 6e 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d  nown ::msgcat::m
3810: 63 75 6e 6b 6e 6f 77 6e 0a 09 7d 20 2d 62 6f 64  cunknown..} -bod
3820: 79 20 7b 0a 09 20 20 20 20 6d 63 20 64 65 66 0a  y {..    mc def.
3830: 09 7d 20 2d 72 65 73 75 6c 74 20 75 6e 6b 6e 6f  .} -result unkno
3840: 77 6e 3a 6e 6f 5f 66 69 5f 6e 6f 74 65 78 69 73  wn:no_fi_notexis
3850: 74 3a 64 65 66 0a 0a 09 74 65 73 74 20 6d 73 67  t:def...test msg
3860: 63 61 74 2d 35 2e 31 31 20 7b 6d 63 70 61 63 6b  cat-5.11 {mcpack
3870: 61 67 65 63 6f 6e 66 69 67 20 6d 63 66 6f 6c 64  ageconfig mcfold
3880: 65 72 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20  er} -setup {..  
3890: 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c    variable local
38a0: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20  e [mclocale]..  
38b0: 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a 09 20    mclocale "".. 
38c0: 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c     mcloadedlocal
38d0: 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20 6d 63  es clear..    mc
38e0: 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 75 6e  packageconfig un
38f0: 73 65 74 20 6d 63 66 6f 6c 64 65 72 0a 09 7d 20  set mcfolder..} 
3900: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20  -cleanup {..    
3910: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
3920: 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f  ..    mcloadedlo
3930: 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20  cales clear..   
3940: 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67   mcpackageconfig
3950: 20 75 6e 73 65 74 20 6d 63 66 6f 6c 64 65 72 0a   unset mcfolder.
3960: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
3970: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20  mclocale foo..  
3980: 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69    mcpackageconfi
3990: 67 20 73 65 74 20 6d 63 66 6f 6c 64 65 72 20 24  g set mcfolder $
39a0: 6d 73 67 64 69 72 0a 09 7d 20 2d 72 65 73 75 6c  msgdir..} -resul
39b0: 74 20 32 0a 0a 20 20 20 20 66 6f 72 65 61 63 68  t 2..    foreach
39c0: 20 6c 6f 63 20 24 6c 6f 63 61 6c 65 73 20 7b 0a   loc $locales {.
39d0: 09 69 66 20 7b 20 24 6c 6f 63 20 65 71 20 7b 7d  .if { $loc eq {}
39e0: 20 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 73   } {..    set ms
39f0: 67 20 52 4f 4f 54 0a 20 20 20 20 20 20 20 20 7d  g ROOT.        }
3a00: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74   else {..    set
3a10: 20 6d 73 67 20 5b 73 74 72 69 6e 67 20 74 6f 6c   msg [string tol
3a20: 6f 77 65 72 20 24 6c 6f 63 5d 0a 09 7d 0a 09 72  ower $loc]..}..r
3a30: 65 6d 6f 76 65 46 69 6c 65 20 24 6d 73 67 2e 6d  emoveFile $msg.m
3a40: 73 67 20 24 6d 73 67 64 69 72 0a 20 20 20 20 7d  sg $msgdir.    }
3a50: 0a 20 20 20 20 72 65 6d 6f 76 65 44 69 72 65 63  .    removeDirec
3a60: 74 6f 72 79 20 6d 73 67 64 69 72 0a 0a 20 20 20  tory msgdir..   
3a70: 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74 2d   # Tests msgcat-
3a80: 36 2e 2a 3a 20 5b 6d 63 73 65 74 5d 2c 20 5b 6d  6.*: [mcset], [m
3a90: 63 5d 20 6e 61 6d 65 73 70 61 63 65 20 69 6e 68  c] namespace inh
3aa0: 65 72 69 74 61 6e 63 65 0a 23 0a 23 20 54 65 73  eritance.#.# Tes
3ab0: 74 20 6d 63 73 65 74 20 61 6e 64 20 6d 63 2c 20  t mcset and mc, 
3ac0: 65 6e 73 75 72 69 6e 67 20 74 68 61 74 20 72 65  ensuring that re
3ad0: 73 6f 6c 75 74 69 6f 6e 20 66 6f 72 20 6d 65 73  solution for mes
3ae0: 73 61 67 65 73 0a 23 20 70 72 6f 63 65 65 64 73  sages.# proceeds
3af0: 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
3b00: 74 20 6e 73 20 74 6f 20 69 74 73 20 70 61 72 65  t ns to its pare
3b10: 6e 74 20 61 6e 64 20 73 6f 20 6f 6e 20 74 6f 20  nt and so on to 
3b20: 74 68 65 0a 23 20 67 6c 6f 62 61 6c 20 6e 73 2e  the.# global ns.
3b30: 0a 23 0a 23 20 44 6f 20 74 68 69 73 20 66 6f 72  .#.# Do this for
3b40: 20 74 68 65 20 31 32 20 70 65 72 6d 75 74 61 74   the 12 permutat
3b50: 69 6f 6e 73 20 6f 66 0a 23 20 20 20 20 20 6c 6f  ions of.#     lo
3b60: 63 61 6c 65 73 3a 20 66 6f 6f 0a 23 20 20 20 20  cales: foo.#    
3b70: 20 6e 61 6d 65 73 70 61 63 65 73 3a 20 66 6f 6f   namespaces: foo
3b80: 20 66 6f 6f 3a 3a 62 61 72 20 66 6f 6f 3a 3a 62   foo::bar foo::b
3b90: 61 72 3a 3a 62 61 7a 0a 23 20 20 20 20 20 73 74  ar::baz.#     st
3ba0: 72 69 6e 67 73 3a 20 7b 6f 76 31 20 6f 76 32 20  rings: {ov1 ov2 
3bb0: 6f 76 33 20 6f 76 34 7d 0a 23 20 20 20 20 20 6e  ov3 ov4}.#     n
3bc0: 61 6d 65 73 70 61 63 65 20 3a 3a 66 6f 6f 20 20  amespace ::foo  
3bd0: 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65            define
3be0: 73 20 6f 76 31 2c 20 6f 76 32 2c 20 6f 76 33 0a  s ov1, ov2, ov3.
3bf0: 23 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  #     namespace 
3c00: 3a 3a 66 6f 6f 3a 3a 62 61 72 20 20 20 20 20 20  ::foo::bar      
3c10: 20 64 65 66 69 6e 65 73 20 20 20 20 20 20 6f 76   defines      ov
3c20: 32 2c 20 6f 76 33 0a 23 20 20 20 20 20 6e 61 6d  2, ov3.#     nam
3c30: 65 73 70 61 63 65 20 3a 3a 66 6f 6f 3a 3a 62 61  espace ::foo::ba
3c40: 72 3a 3a 62 61 7a 20 20 64 65 66 69 6e 65 73 20  r::baz  defines 
3c50: 20 20 20 20 20 20 20 20 20 20 6f 76 33 0a 23 0a            ov3.#.
3c60: 23 20 20 20 20 20 6f 76 34 20 69 73 20 6e 6f 74  #     ov4 is not
3c70: 20 64 65 66 69 6e 65 64 20 69 6e 20 61 6e 79 20   defined in any 
3c80: 6e 61 6d 65 73 70 61 63 65 2e 0a 23 0a 23 20 53  namespace..#.# S
3c90: 6f 2c 0a 23 20 20 20 20 20 6f 76 33 20 73 68 6f  o,.#     ov3 sho
3ca0: 75 6c 64 20 62 65 20 72 65 73 6f 6c 76 65 64 20  uld be resolved 
3cb0: 69 6e 20 3a 3a 66 6f 6f 3a 3a 62 61 72 3a 3a 62  in ::foo::bar::b
3cc0: 61 7a 2c 20 3a 3a 66 6f 6f 3a 3a 62 61 72 2c 20  az, ::foo::bar, 
3cd0: 3a 3a 66 6f 6f 3b 0a 23 20 20 20 20 20 6f 76 32  ::foo;.#     ov2
3ce0: 20 73 68 6f 75 6c 64 20 62 65 20 72 65 73 6f 6c   should be resol
3cf0: 76 65 64 20 69 6e 20 3a 3a 66 6f 6f 2c 20 3a 3a  ved in ::foo, ::
3d00: 66 6f 6f 3a 3a 62 61 72 0a 23 20 20 20 20 20 6f  foo::bar.#     o
3d10: 76 31 20 73 68 6f 75 6c 64 20 62 65 20 72 65 73  v1 should be res
3d20: 6f 6c 76 65 64 20 69 6e 20 3a 3a 66 6f 6f 0a 23  olved in ::foo.#
3d30: 20 20 20 20 20 6f 76 34 20 73 68 6f 75 6c 64 20       ov4 should 
3d40: 62 65 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 6e  be resolved in n
3d50: 6f 6e 65 2c 20 61 6e 64 20 63 61 6c 6c 20 6d 63  one, and call mc
3d60: 75 6e 6b 6e 6f 77 6e 0a 23 0a 0a 20 20 20 20 76  unknown.#..    v
3d70: 61 72 69 61 62 6c 65 20 72 65 73 75 6c 74 0a 20  ariable result. 
3d80: 20 20 20 61 72 72 61 79 20 73 65 74 20 72 65 73     array set res
3d90: 75 6c 74 20 7b 0a 09 66 6f 6f 2c 6f 76 31 20 6f  ult {..foo,ov1 o
3da0: 76 31 5f 66 6f 6f 20 66 6f 6f 2c 6f 76 32 20 6f  v1_foo foo,ov2 o
3db0: 76 32 5f 66 6f 6f 20 66 6f 6f 2c 6f 76 33 20 6f  v2_foo foo,ov3 o
3dc0: 76 33 5f 66 6f 6f 20 66 6f 6f 2c 6f 76 34 20 6f  v3_foo foo,ov4 o
3dd0: 76 34 0a 09 66 6f 6f 3a 3a 62 61 72 2c 6f 76 31  v4..foo::bar,ov1
3de0: 20 6f 76 31 5f 66 6f 6f 20 66 6f 6f 3a 3a 62 61   ov1_foo foo::ba
3df0: 72 2c 6f 76 32 20 6f 76 32 5f 66 6f 6f 5f 62 61  r,ov2 ov2_foo_ba
3e00: 72 0a 09 66 6f 6f 3a 3a 62 61 72 2c 6f 76 33 20  r..foo::bar,ov3 
3e10: 6f 76 33 5f 66 6f 6f 5f 62 61 72 20 66 6f 6f 3a  ov3_foo_bar foo:
3e20: 3a 62 61 72 2c 6f 76 34 20 6f 76 34 20 66 6f 6f  :bar,ov4 ov4 foo
3e30: 3a 3a 62 61 72 3a 3a 62 61 7a 2c 6f 76 31 20 6f  ::bar::baz,ov1 o
3e40: 76 31 5f 66 6f 6f 0a 09 66 6f 6f 3a 3a 62 61 72  v1_foo..foo::bar
3e50: 3a 3a 62 61 7a 2c 6f 76 32 20 6f 76 32 5f 66 6f  ::baz,ov2 ov2_fo
3e60: 6f 5f 62 61 72 20 66 6f 6f 3a 3a 62 61 72 3a 3a  o_bar foo::bar::
3e70: 62 61 7a 2c 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f  baz,ov3 ov3_foo_
3e80: 62 61 72 5f 62 61 7a 0a 09 66 6f 6f 3a 3a 62 61  bar_baz..foo::ba
3e90: 72 3a 3a 62 61 7a 2c 6f 76 34 20 6f 76 34 0a 20  r::baz,ov4 ov4. 
3ea0: 20 20 20 7d 0a 20 20 20 20 76 61 72 69 61 62 6c     }.    variabl
3eb0: 65 20 63 6f 75 6e 74 20 31 0a 20 20 20 20 76 61  e count 1.    va
3ec0: 72 69 61 62 6c 65 20 6e 73 0a 20 20 20 20 66 6f  riable ns.    fo
3ed0: 72 65 61 63 68 20 6e 73 20 7b 66 6f 6f 20 66 6f  reach ns {foo fo
3ee0: 6f 3a 3a 62 61 72 20 66 6f 6f 3a 3a 62 61 72 3a  o::bar foo::bar:
3ef0: 3a 62 61 7a 7d 20 7b 0a 09 66 6f 72 65 61 63 68  :baz} {..foreach
3f00: 20 73 74 72 69 6e 67 20 7b 6f 76 31 20 6f 76 32   string {ov1 ov2
3f10: 20 6f 76 33 20 6f 76 34 7d 20 7b 0a 09 20 20 20   ov3 ov4} {..   
3f20: 20 74 65 73 74 20 6d 73 67 63 61 74 2d 36 2e 24   test msgcat-6.$
3f30: 63 6f 75 6e 74 20 7b 6d 63 73 65 74 2c 20 6f 76  count {mcset, ov
3f40: 65 72 6c 61 70 7d 20 2d 73 65 74 75 70 20 7b 0a  erlap} -setup {.
3f50: 09 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
3f60: 20 66 6f 6f 20 7b 0a 09 09 20 20 20 20 3a 3a 6d   foo {...    ::m
3f70: 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f 6f  sgcat::mcset foo
3f80: 20 6f 76 31 20 6f 76 31 5f 66 6f 6f 0a 09 09 20   ov1 ov1_foo... 
3f90: 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73     ::msgcat::mcs
3fa0: 65 74 20 66 6f 6f 20 6f 76 32 20 6f 76 32 5f 66  et foo ov2 ov2_f
3fb0: 6f 6f 0a 09 09 20 20 20 20 3a 3a 6d 73 67 63 61  oo...    ::msgca
3fc0: 74 3a 3a 6d 63 73 65 74 20 66 6f 6f 20 6f 76 33  t::mcset foo ov3
3fd0: 20 6f 76 33 5f 66 6f 6f 0a 09 09 20 20 20 20 6e   ov3_foo...    n
3fe0: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61  amespace eval ba
3ff0: 72 20 7b 0a 09 09 09 3a 3a 6d 73 67 63 61 74 3a  r {....::msgcat:
4000: 3a 6d 63 73 65 74 20 66 6f 6f 20 6f 76 32 20 6f  :mcset foo ov2 o
4010: 76 32 5f 66 6f 6f 5f 62 61 72 0a 09 09 09 3a 3a  v2_foo_bar....::
4020: 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 66 6f  msgcat::mcset fo
4030: 6f 20 6f 76 33 20 6f 76 33 5f 66 6f 6f 5f 62 61  o ov3 ov3_foo_ba
4040: 72 0a 09 09 09 6e 61 6d 65 73 70 61 63 65 20 65  r....namespace e
4050: 76 61 6c 20 62 61 7a 20 7b 0a 09 09 09 20 20 20  val baz {....   
4060: 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74   ::msgcat::mcset
4070: 20 66 6f 6f 20 6f 76 33 20 22 6f 76 33 5f 66 6f   foo ov3 "ov3_fo
4080: 6f 5f 62 61 72 5f 62 61 7a 22 0a 09 09 09 7d 0a  o_bar_baz"....}.
4090: 09 09 20 20 20 20 7d 0a 0a 09 09 7d 0a 09 09 76  ..    }....}...v
40a0: 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b  ariable locale [
40b0: 6d 63 6c 6f 63 61 6c 65 5d 0a 09 09 6d 63 6c 6f  mclocale]...mclo
40c0: 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20 7d 20  cale foo..    } 
40d0: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 09 6d 63 6c  -cleanup {...mcl
40e0: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 09  ocale $locale...
40f0: 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65  namespace delete
4100: 20 66 6f 6f 0a 09 20 20 20 20 7d 20 2d 62 6f 64   foo..    } -bod
4110: 79 20 7b 0a 09 09 6e 61 6d 65 73 70 61 63 65 20  y {...namespace 
4120: 65 76 61 6c 20 24 6e 73 20 5b 6c 69 73 74 20 3a  eval $ns [list :
4130: 3a 6d 73 67 63 61 74 3a 3a 6d 63 20 24 73 74 72  :msgcat::mc $str
4140: 69 6e 67 5d 0a 09 20 20 20 20 7d 20 2d 72 65 73  ing]..    } -res
4150: 75 6c 74 20 24 72 65 73 75 6c 74 28 24 6e 73 2c  ult $result($ns,
4160: 24 73 74 72 69 6e 67 29 0a 09 20 20 20 20 69 6e  $string)..    in
4170: 63 72 20 63 6f 75 6e 74 0a 09 7d 0a 20 20 20 20  cr count..}.    
4180: 7d 0a 0a 20 20 20 20 23 20 54 65 73 74 73 20 6d  }..    # Tests m
4190: 73 67 63 61 74 2d 37 2e 2a 3a 20 5b 6d 63 5d 20  sgcat-7.*: [mc] 
41a0: 65 78 74 72 61 20 61 72 67 73 20 70 72 6f 63 65  extra args proce
41b0: 73 73 65 64 20 62 79 20 5b 66 6f 72 6d 61 74 5d  ssed by [format]
41c0: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
41d0: 74 2d 37 2e 31 20 7b 6d 63 20 65 78 74 72 61 20  t-7.1 {mc extra 
41e0: 61 72 67 73 20 67 6f 20 74 68 72 6f 75 67 68 20  args go through 
41f0: 74 6f 20 66 6f 72 6d 61 74 7d 20 2d 73 65 74 75  to format} -setu
4200: 70 20 7b 0a 09 6d 63 73 65 74 20 66 6f 6f 20 66  p {..mcset foo f
4210: 6f 72 6d 61 74 31 20 22 74 68 69 73 20 69 73 20  ormat1 "this is 
4220: 61 20 74 65 73 74 22 0a 09 6d 63 73 65 74 20 66  a test"..mcset f
4230: 6f 6f 20 66 6f 72 6d 61 74 32 20 22 74 68 69 73  oo format2 "this
4240: 20 69 73 20 61 20 25 73 22 0a 09 6d 63 73 65 74   is a %s"..mcset
4250: 20 66 6f 6f 20 66 6f 72 6d 61 74 33 20 22 74 68   foo format3 "th
4260: 69 73 20 69 73 20 61 20 25 73 20 25 73 22 0a 09  is is a %s %s"..
4270: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
4280: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f  [mclocale]..mclo
4290: 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20 2d  cale foo.    } -
42a0: 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63  cleanup {..mcloc
42b0: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20  ale $locale.    
42c0: 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 20 66 6f  } -body {..mc fo
42d0: 72 6d 61 74 31 20 22 67 6f 6f 64 20 74 65 73 74  rmat1 "good test
42e0: 22 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20  ".    } -result 
42f0: 22 74 68 69 73 20 69 73 20 61 20 74 65 73 74 22  "this is a test"
4300: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
4310: 74 2d 37 2e 32 20 7b 6d 63 20 65 78 74 72 61 20  t-7.2 {mc extra 
4320: 61 72 67 73 20 67 6f 20 74 68 72 6f 75 67 68 20  args go through 
4330: 74 6f 20 66 6f 72 6d 61 74 7d 20 2d 73 65 74 75  to format} -setu
4340: 70 20 7b 0a 09 6d 63 73 65 74 20 66 6f 6f 20 66  p {..mcset foo f
4350: 6f 72 6d 61 74 31 20 22 74 68 69 73 20 69 73 20  ormat1 "this is 
4360: 61 20 74 65 73 74 22 0a 09 6d 63 73 65 74 20 66  a test"..mcset f
4370: 6f 6f 20 66 6f 72 6d 61 74 32 20 22 74 68 69 73  oo format2 "this
4380: 20 69 73 20 61 20 25 73 22 0a 09 6d 63 73 65 74   is a %s"..mcset
4390: 20 66 6f 6f 20 66 6f 72 6d 61 74 33 20 22 74 68   foo format3 "th
43a0: 69 73 20 69 73 20 61 20 25 73 20 25 73 22 0a 09  is is a %s %s"..
43b0: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
43c0: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f  [mclocale]..mclo
43d0: 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20 2d  cale foo.    } -
43e0: 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63  cleanup {..mcloc
43f0: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20 20  ale $locale.    
4400: 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 20 66 6f  } -body {..mc fo
4410: 72 6d 61 74 32 20 22 67 6f 6f 64 20 74 65 73 74  rmat2 "good test
4420: 22 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20  ".    } -result 
4430: 22 74 68 69 73 20 69 73 20 61 20 67 6f 6f 64 20  "this is a good 
4440: 74 65 73 74 22 0a 0a 20 20 20 20 74 65 73 74 20  test"..    test 
4450: 6d 73 67 63 61 74 2d 37 2e 33 20 7b 6d 63 20 65  msgcat-7.3 {mc e
4460: 72 72 6f 72 73 20 66 72 6f 6d 20 66 6f 72 6d 61  rrors from forma
4470: 74 20 61 72 65 20 70 72 6f 70 61 67 61 74 65 64  t are propagated
4480: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 6d 63 73 65  } -setup {..mcse
4490: 74 20 66 6f 6f 20 66 6f 72 6d 61 74 31 20 22 74  t foo format1 "t
44a0: 68 69 73 20 69 73 20 61 20 74 65 73 74 22 0a 09  his is a test"..
44b0: 6d 63 73 65 74 20 66 6f 6f 20 66 6f 72 6d 61 74  mcset foo format
44c0: 32 20 22 74 68 69 73 20 69 73 20 61 20 25 73 22  2 "this is a %s"
44d0: 0a 09 6d 63 73 65 74 20 66 6f 6f 20 66 6f 72 6d  ..mcset foo form
44e0: 61 74 33 20 22 74 68 69 73 20 69 73 20 61 20 25  at3 "this is a %
44f0: 73 20 25 73 22 0a 09 76 61 72 69 61 62 6c 65 20  s %s"..variable 
4500: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
4510: 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a  ]..mclocale foo.
4520: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
4530: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
4540: 6c 65 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  le.    } -body {
4550: 0a 09 63 61 74 63 68 20 7b 6d 63 20 66 6f 72 6d  ..catch {mc form
4560: 61 74 33 20 22 67 6f 6f 64 20 74 65 73 74 22 7d  at3 "good test"}
4570: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 31  .    } -result 1
4580: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
4590: 74 2d 37 2e 34 20 7b 6d 63 2c 20 65 78 74 72 61  t-7.4 {mc, extra
45a0: 20 61 72 67 73 20 61 72 65 20 67 69 76 65 6e 20   args are given 
45b0: 74 6f 20 75 6e 6b 6e 6f 77 6e 7d 20 2d 73 65 74  to unknown} -set
45c0: 75 70 20 7b 0a 09 6d 63 73 65 74 20 66 6f 6f 20  up {..mcset foo 
45d0: 66 6f 72 6d 61 74 31 20 22 74 68 69 73 20 69 73  format1 "this is
45e0: 20 61 20 74 65 73 74 22 0a 09 6d 63 73 65 74 20   a test"..mcset 
45f0: 66 6f 6f 20 66 6f 72 6d 61 74 32 20 22 74 68 69  foo format2 "thi
4600: 73 20 69 73 20 61 20 25 73 22 0a 09 6d 63 73 65  s is a %s"..mcse
4610: 74 20 66 6f 6f 20 66 6f 72 6d 61 74 33 20 22 74  t foo format3 "t
4620: 68 69 73 20 69 73 20 61 20 25 73 20 25 73 22 0a  his is a %s %s".
4630: 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65  .variable locale
4640: 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d 63 6c   [mclocale]..mcl
4650: 6f 63 61 6c 65 20 66 6f 6f 0a 20 20 20 20 7d 20  ocale foo.    } 
4660: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f  -cleanup {..mclo
4670: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 20 20 20  cale $locale.   
4680: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 20 22   } -body {..mc "
4690: 74 68 69 73 20 69 73 20 61 20 25 73 22 20 22 67  this is a %s" "g
46a0: 6f 6f 64 20 74 65 73 74 22 0a 20 20 20 20 7d 20  ood test".    } 
46b0: 2d 72 65 73 75 6c 74 20 22 74 68 69 73 20 69 73  -result "this is
46c0: 20 61 20 67 6f 6f 64 20 74 65 73 74 22 0a 0a 20   a good test".. 
46d0: 20 20 20 23 20 54 65 73 74 73 20 6d 73 67 63 61     # Tests msgca
46e0: 74 2d 38 2e 2a 3a 20 5b 6d 63 66 6c 73 65 74 5d  t-8.*: [mcflset]
46f0: 0a 0a 20 20 20 20 73 65 74 20 6d 73 67 64 69 72  ..    set msgdir
4700: 31 20 5b 6d 61 6b 65 44 69 72 65 63 74 6f 72 79  1 [makeDirectory
4710: 20 6d 73 67 64 69 72 31 5d 0a 20 20 20 20 6d 61   msgdir1].    ma
4720: 6b 65 46 69 6c 65 20 7b 3a 3a 6d 73 67 63 61 74  keFile {::msgcat
4730: 3a 3a 6d 63 66 6c 73 65 74 20 6b 31 20 76 31 7d  ::mcflset k1 v1}
4740: 20 6c 31 2e 6d 73 67 20 24 6d 73 67 64 69 72 31   l1.msg $msgdir1
4750: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 38  ...test msgcat-8
4760: 2e 31 20 7b 6d 63 66 6c 73 65 74 7d 20 2d 73 65  .1 {mcflset} -se
4770: 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61  tup {..    varia
4780: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
4790: 63 61 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63  cale]..    mcloc
47a0: 61 6c 65 20 6c 31 0a 09 20 20 20 20 6d 63 6c 6f  ale l1..    mclo
47b0: 61 64 20 24 6d 73 67 64 69 72 31 0a 09 7d 20 2d  ad $msgdir1..} -
47c0: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
47d0: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
47e0: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
47f0: 6d 63 20 6b 31 0a 09 7d 20 2d 72 65 73 75 6c 74  mc k1..} -result
4800: 20 76 31 0a 0a 20 20 20 20 72 65 6d 6f 76 65 46   v1..    removeF
4810: 69 6c 65 20 6c 31 2e 6d 73 67 20 24 6d 73 67 64  ile l1.msg $msgd
4820: 69 72 31 0a 20 20 20 20 72 65 6d 6f 76 65 44 69  ir1.    removeDi
4830: 72 65 63 74 6f 72 79 20 6d 73 67 64 69 72 31 0a  rectory msgdir1.
4840: 0a 20 20 20 20 73 65 74 20 6d 73 67 64 69 72 32  .    set msgdir2
4850: 20 5b 6d 61 6b 65 44 69 72 65 63 74 6f 72 79 20   [makeDirectory 
4860: 6d 73 67 64 69 72 32 5d 0a 20 20 20 20 73 65 74  msgdir2].    set
4870: 20 6d 73 67 64 69 72 33 20 5b 6d 61 6b 65 44 69   msgdir3 [makeDi
4880: 72 65 63 74 6f 72 79 20 6d 73 67 64 69 72 33 5d  rectory msgdir3]
4890: 0a 20 20 20 20 6d 61 6b 65 46 69 6c 65 20 22 3a  .    makeFile ":
48a0: 3a 6d 73 67 63 61 74 3a 3a 6d 63 66 6c 73 65 74  :msgcat::mcflset
48b0: 20 6b 32 20 76 32 20 3b 20 3a 3a 6d 73 67 63 61   k2 v2 ; ::msgca
48c0: 74 3a 3a 6d 63 6c 6f 61 64 20 5b 6c 69 73 74 20  t::mcload [list 
48d0: 24 6d 73 67 64 69 72 33 5d 22 5c 0a 09 20 20 20  $msgdir3]"\..   
48e0: 20 6c 32 2e 6d 73 67 20 24 6d 73 67 64 69 72 32   l2.msg $msgdir2
48f0: 0a 20 20 20 20 6d 61 6b 65 46 69 6c 65 20 7b 3a  .    makeFile {:
4900: 3a 6d 73 67 63 61 74 3a 3a 6d 63 66 6c 73 65 74  :msgcat::mcflset
4910: 20 6b 33 20 76 33 20 3b 20 3a 3a 6d 73 67 63 61   k3 v3 ; ::msgca
4920: 74 3a 3a 6d 63 66 6c 6d 73 65 74 20 7b 6b 34 20  t::mcflmset {k4 
4930: 76 34 20 6b 35 20 76 35 7d 7d 20 6c 32 2e 6d 73  v4 k5 v5}} l2.ms
4940: 67 20 24 6d 73 67 64 69 72 33 0a 0a 09 23 20 63  g $msgdir3...# c
4950: 68 61 69 6e 65 64 20 6d 63 6c 6f 61 64 0a 09 74  hained mcload..t
4960: 65 73 74 20 6d 73 67 63 61 74 2d 38 2e 32 20 7b  est msgcat-8.2 {
4970: 6d 63 66 6c 73 65 74 2f 6d 63 66 6c 6d 73 65 74  mcflset/mcflmset
4980: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20  } -setup {..    
4990: 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20  variable locale 
49a0: 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20 20 20  [mclocale]..    
49b0: 6d 63 6c 6f 63 61 6c 65 20 6c 32 0a 09 20 20 20  mclocale l2..   
49c0: 20 6d 63 6c 6f 61 64 20 24 6d 73 67 64 69 72 32   mcload $msgdir2
49d0: 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09  ..} -cleanup {..
49e0: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f      mclocale $lo
49f0: 63 61 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  cale..} -body {.
4a00: 09 20 20 20 20 72 65 74 75 72 6e 20 5b 6d 63 20  .    return [mc 
4a10: 6b 32 5d 5b 6d 63 20 6b 33 5d 2d 2d 5b 6d 63 20  k2][mc k3]--[mc 
4a20: 6b 34 5d 5b 6d 63 20 6b 35 5d 0a 09 7d 20 2d 72  k4][mc k5]..} -r
4a30: 65 73 75 6c 74 20 76 32 76 33 2d 2d 76 34 76 35  esult v2v3--v4v5
4a40: 0a 0a 20 20 20 20 72 65 6d 6f 76 65 46 69 6c 65  ..    removeFile
4a50: 20 6c 32 2e 6d 73 67 20 24 6d 73 67 64 69 72 32   l2.msg $msgdir2
4a60: 0a 20 20 20 20 72 65 6d 6f 76 65 44 69 72 65 63  .    removeDirec
4a70: 74 6f 72 79 20 6d 73 67 64 69 72 32 0a 20 20 20  tory msgdir2.   
4a80: 20 72 65 6d 6f 76 65 44 69 72 65 63 74 6f 72 79   removeDirectory
4a90: 20 6d 73 67 64 69 72 33 0a 0a 20 20 20 20 23 20   msgdir3..    # 
4aa0: 54 65 73 74 73 20 6d 73 67 63 61 74 2d 39 2e 2a  Tests msgcat-9.*
4ab0: 3a 20 5b 6d 63 65 78 69 73 74 73 5d 0a 0a 09 74  : [mcexists]...t
4ac0: 65 73 74 20 6d 73 67 63 61 74 2d 39 2e 31 20 7b  est msgcat-9.1 {
4ad0: 6d 63 65 78 69 73 74 73 20 6e 6f 20 70 61 72 61  mcexists no para
4ae0: 6d 65 74 65 72 7d 20 2d 62 6f 64 79 20 7b 0a 09  meter} -body {..
4af0: 20 20 20 20 6d 63 65 78 69 73 74 73 0a 09 7d 20      mcexists..} 
4b00: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a  -returnCodes 1\.
4b10: 09 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20  .-result {wrong 
4b20: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
4b30: 65 20 22 6d 63 65 78 69 73 74 73 20 3f 2d 65 78  e "mcexists ?-ex
4b40: 61 63 74 6e 61 6d 65 73 70 61 63 65 3f 20 3f 2d  actnamespace? ?-
4b50: 65 78 61 63 74 6c 6f 63 61 6c 65 3f 20 3f 2d 6e  exactlocale? ?-n
4b60: 61 6d 65 73 70 61 63 65 20 6e 73 3f 20 73 72 63  amespace ns? src
4b70: 22 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74  "}...test msgcat
4b80: 2d 39 2e 32 20 7b 6d 63 65 78 69 73 74 73 20 75  -9.2 {mcexists u
4b90: 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 7d 20 2d  nknown option} -
4ba0: 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 65 78  body {..    mcex
4bb0: 69 73 74 73 20 2d 75 6e 6b 6e 6f 77 6e 20 73 72  ists -unknown sr
4bc0: 63 0a 09 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  c..} -returnCode
4bd0: 73 20 31 5c 0a 09 2d 72 65 73 75 6c 74 20 7b 75  s 1\..-result {u
4be0: 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 20 22 2d  nknown option "-
4bf0: 75 6e 6b 6e 6f 77 6e 22 7d 0a 0a 09 74 65 73 74  unknown"}...test
4c00: 20 6d 73 67 63 61 74 2d 39 2e 33 20 7b 6d 63 65   msgcat-9.3 {mce
4c10: 78 69 73 74 73 7d 20 2d 73 65 74 75 70 20 7b 0a  xists} -setup {.
4c20: 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63  .    mcforgetpac
4c30: 6b 61 67 65 0a 09 20 20 20 20 76 61 72 69 61 62  kage..    variab
4c40: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
4c50: 61 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61  ale]..    mcloca
4c60: 6c 65 20 66 6f 6f 0a 09 20 20 20 20 6d 63 73 65  le foo..    mcse
4c70: 74 20 66 6f 6f 20 6b 31 20 76 31 0a 09 7d 20 2d  t foo k1 v1..} -
4c80: 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d  cleanup {..    m
4c90: 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a  clocale $locale.
4ca0: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
4cb0: 6c 69 73 74 20 5b 6d 63 65 78 69 73 74 73 20 6b  list [mcexists k
4cc0: 31 5d 20 5b 6d 63 65 78 69 73 74 73 20 6b 32 5d  1] [mcexists k2]
4cd0: 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20 30  ..} -result {1 0
4ce0: 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d  }...test msgcat-
4cf0: 39 2e 34 20 7b 6d 63 65 78 69 73 74 73 20 64 65  9.4 {mcexists de
4d00: 73 63 65 6e 64 65 6e 74 20 70 72 65 66 65 72 65  scendent prefere
4d10: 6e 63 65 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  nce} -setup {.. 
4d20: 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61     mcforgetpacka
4d30: 67 65 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65  ge..    variable
4d40: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
4d50: 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65  e]..    mclocale
4d60: 20 66 6f 6f 5f 62 61 72 0a 09 20 20 20 20 6d 63   foo_bar..    mc
4d70: 73 65 74 20 66 6f 6f 20 6b 31 20 76 31 0a 09 7d  set foo k1 v1..}
4d80: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20   -cleanup {..   
4d90: 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c   mclocale $local
4da0: 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  e..} -body {..  
4db0: 20 20 6c 69 73 74 20 5b 6d 63 65 78 69 73 74 73    list [mcexists
4dc0: 20 6b 31 5d 20 5b 6d 63 65 78 69 73 74 73 20 2d   k1] [mcexists -
4dd0: 65 78 61 63 74 6c 6f 63 61 6c 65 20 6b 31 5d 0a  exactlocale k1].
4de0: 09 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20 30 7d  .} -result {1 0}
4df0: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 39  ...test msgcat-9
4e00: 2e 35 20 7b 6d 63 65 78 69 73 74 73 20 70 61 72  .5 {mcexists par
4e10: 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 7d 20 2d  ent namespace} -
4e20: 73 65 74 75 70 20 7b 0a 09 20 20 20 20 6d 63 66  setup {..    mcf
4e30: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20  orgetpackage..  
4e40: 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c    variable local
4e50: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 20 20  e [mclocale]..  
4e60: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62    mclocale foo_b
4e70: 61 72 0a 09 20 20 20 20 6d 63 73 65 74 20 66 6f  ar..    mcset fo
4e80: 6f 20 6b 31 20 76 31 0a 09 7d 20 2d 63 6c 65 61  o k1 v1..} -clea
4e90: 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63  nup {..    mcloc
4ea0: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20  ale $locale..   
4eb0: 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74   namespace delet
4ec0: 65 20 3a 3a 66 6f 6f 0a 09 7d 20 2d 62 6f 64 79  e ::foo..} -body
4ed0: 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63   {..    namespac
4ee0: 65 20 65 76 61 6c 20 3a 3a 66 6f 6f 20 7b 0a 09  e eval ::foo {..
4ef0: 09 6c 69 73 74 20 5b 3a 3a 6d 73 67 63 61 74 3a  .list [::msgcat:
4f00: 3a 6d 63 65 78 69 73 74 73 20 6b 31 5d 5c 0a 09  :mcexists k1]\..
4f10: 09 09 5b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 65  ..[::msgcat::mce
4f20: 78 69 73 74 73 20 2d 6e 61 6d 65 73 70 61 63 65  xists -namespace
4f30: 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 20   ::msgcat::test 
4f40: 6b 31 5d 0a 09 20 20 20 20 7d 0a 09 7d 20 2d 72  k1]..    }..} -r
4f50: 65 73 75 6c 74 20 7b 30 20 31 7d 0a 0a 09 74 65  esult {0 1}...te
4f60: 73 74 20 6d 73 67 63 61 74 2d 39 2e 36 20 7b 6d  st msgcat-9.6 {m
4f70: 63 65 78 69 73 74 73 20 2d 6e 61 6d 65 73 70 61  cexists -namespa
4f80: 63 65 20 6e 73 20 70 61 72 61 6d 65 74 65 72 7d  ce ns parameter}
4f90: 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 6d   -setup {..    m
4fa0: 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09  cforgetpackage..
4fb0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63      variable loc
4fc0: 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09  ale [mclocale]..
4fd0: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f      mclocale foo
4fe0: 5f 62 61 72 0a 09 20 20 20 20 6d 63 73 65 74 20  _bar..    mcset 
4ff0: 66 6f 6f 20 6b 31 20 76 31 0a 09 7d 20 2d 63 6c  foo k1 v1..} -cl
5000: 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c  eanup {..    mcl
5010: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20  ocale $locale.. 
5020: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65 6c     namespace del
5030: 65 74 65 20 3a 3a 66 6f 6f 0a 09 7d 20 2d 62 6f  ete ::foo..} -bo
5040: 64 79 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70  dy {..    namesp
5050: 61 63 65 20 65 76 61 6c 20 3a 3a 66 6f 6f 20 7b  ace eval ::foo {
5060: 0a 09 09 6c 69 73 74 20 5b 3a 3a 6d 73 67 63 61  ...list [::msgca
5070: 74 3a 3a 6d 63 65 78 69 73 74 73 20 6b 31 5d 5c  t::mcexists k1]\
5080: 0a 09 09 09 5b 3a 3a 6d 73 67 63 61 74 3a 3a 6d  ....[::msgcat::m
5090: 63 65 78 69 73 74 73 20 2d 6e 61 6d 65 73 70 61  cexists -namespa
50a0: 63 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73  ce ::msgcat::tes
50b0: 74 20 6b 31 5d 0a 09 20 20 20 20 7d 0a 09 7d 20  t k1]..    }..} 
50c0: 2d 72 65 73 75 6c 74 20 7b 30 20 31 7d 0a 0a 09  -result {0 1}...
50d0: 74 65 73 74 20 6d 73 67 63 61 74 2d 39 2e 37 20  test msgcat-9.7 
50e0: 7b 6d 63 65 78 69 73 74 73 20 2d 6e 61 6d 65 73  {mcexists -names
50f0: 70 61 63 65 20 2d 20 6e 73 20 61 72 67 75 6d 65  pace - ns argume
5100: 6e 74 20 6d 69 73 73 69 6e 67 7d 20 2d 62 6f 64  nt missing} -bod
5110: 79 20 7b 0a 09 20 20 20 20 6d 63 65 78 69 73 74  y {..    mcexist
5120: 73 20 2d 6e 61 6d 65 73 70 61 63 65 20 73 72 63  s -namespace src
5130: 0a 09 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73  ..} -returnCodes
5140: 20 31 5c 0a 09 2d 72 65 73 75 6c 74 20 7b 41 72   1\..-result {Ar
5150: 67 75 6d 65 6e 74 20 6d 69 73 73 69 6e 67 20 66  gument missing f
5160: 6f 72 20 73 77 69 74 63 68 20 22 2d 6e 61 6d 65  or switch "-name
5170: 73 70 61 63 65 22 7d 0a 0a 0a 20 20 20 20 23 20  space"}...    # 
5180: 54 65 73 74 73 20 6d 73 67 63 61 74 2d 31 30 2e  Tests msgcat-10.
5190: 2a 3a 20 5b 6d 63 6c 6f 61 64 65 64 6c 6f 63 61  *: [mcloadedloca
51a0: 6c 65 73 5d 0a 0a 09 74 65 73 74 20 6d 73 67 63  les]...test msgc
51b0: 61 74 2d 31 30 2e 31 20 7b 6d 63 6c 6f 61 64 65  at-10.1 {mcloade
51c0: 64 6c 6f 63 61 6c 65 73 20 6e 6f 20 61 72 67 7d  dlocales no arg}
51d0: 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63   -body {..    mc
51e0: 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 0a 09 7d  loadedlocales..}
51f0: 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c   -returnCodes 1\
5200: 0a 09 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67  ..-result {wrong
5210: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
5220: 62 65 20 22 6d 63 6c 6f 61 64 65 64 6c 6f 63 61  be "mcloadedloca
5230: 6c 65 73 20 73 75 62 63 6f 6d 6d 61 6e 64 22 7d  les subcommand"}
5240: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31  ...test msgcat-1
5250: 30 2e 32 20 7b 6d 63 6c 6f 61 64 65 64 6c 6f 63  0.2 {mcloadedloc
5260: 61 6c 65 73 20 77 72 6f 6e 67 20 73 75 62 63 6f  ales wrong subco
5270: 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 09  mmand} -body {..
5280: 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61      mcloadedloca
5290: 6c 65 73 20 6a 75 6e 6b 0a 09 7d 20 2d 72 65 74  les junk..} -ret
52a0: 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72 65  urnCodes 1\..-re
52b0: 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 73 75  sult {unknown su
52c0: 62 63 6f 6d 6d 61 6e 64 20 22 6a 75 6e 6b 22 3a  bcommand "junk":
52d0: 20 6d 75 73 74 20 62 65 20 63 6c 65 61 72 2c 20   must be clear, 
52e0: 6f 72 20 6c 6f 61 64 65 64 7d 0a 0a 09 74 65 73  or loaded}...tes
52f0: 74 20 6d 73 67 63 61 74 2d 31 30 2e 33 20 7b 6d  t msgcat-10.3 {m
5300: 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 6c  cloadedlocales l
5310: 6f 61 64 65 64 7d 20 2d 73 65 74 75 70 20 7b 0a  oaded} -setup {.
5320: 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63  .    mcforgetpac
5330: 6b 61 67 65 0a 09 20 20 20 20 76 61 72 69 61 62  kage..    variab
5340: 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63  le locale [mcloc
5350: 61 6c 65 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61  ale]..    mcloca
5360: 6c 65 20 7b 7d 0a 09 20 20 20 20 6d 63 6c 6f 61  le {}..    mcloa
5370: 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72  dedlocales clear
5380: 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09  ..} -cleanup {..
5390: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f      mclocale $lo
53a0: 63 61 6c 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a  cale..} -body {.
53b0: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f  .    mclocale fo
53c0: 6f 5f 62 61 72 0a 09 20 20 20 20 23 20 54 68 65  o_bar..    # The
53d0: 20 72 65 73 75 6c 74 20 69 73 20 70 6f 73 69 74   result is posit
53e0: 69 6f 6e 20 69 6e 64 65 70 65 6e 64 65 6e 74 20  ion independent 
53f0: 73 6f 20 73 6f 72 74 0a 09 20 20 20 20 73 65 74  so sort..    set
5400: 20 72 65 73 75 6c 74 6c 69 73 74 20 5b 6c 73 6f   resultlist [lso
5410: 72 74 20 5b 6d 63 6c 6f 61 64 65 64 6c 6f 63 61  rt [mcloadedloca
5420: 6c 65 73 20 6c 6f 61 64 65 64 5d 5d 0a 09 7d 20  les loaded]]..} 
5430: 2d 72 65 73 75 6c 74 20 7b 7b 7d 20 66 6f 6f 20  -result {{} foo 
5440: 66 6f 6f 5f 62 61 72 7d 0a 0a 09 74 65 73 74 20  foo_bar}...test 
5450: 6d 73 67 63 61 74 2d 31 30 2e 34 20 7b 6d 63 6c  msgcat-10.4 {mcl
5460: 6f 61 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65  oadedlocales cle
5470: 61 72 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20  ar} -setup {..  
5480: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
5490: 65 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20  e..    variable 
54a0: 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65  locale [mclocale
54b0: 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  ]..    mclocale 
54c0: 7b 7d 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64  {}..    mcloaded
54d0: 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 7d  locales clear..}
54e0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20   -cleanup {..   
54f0: 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c   mclocale $local
5500: 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  e..} -body {..  
5510: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09    mclocale foo..
5520: 20 20 20 20 6d 63 73 65 74 20 66 6f 6f 20 6b 31      mcset foo k1
5530: 20 76 31 0a 09 20 20 20 20 73 65 74 20 72 65 73   v1..    set res
5540: 20 5b 6d 63 65 78 69 73 74 73 20 6b 31 5d 0a 09   [mcexists k1]..
5550: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a      mclocale "".
5560: 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63  .    mcloadedloc
5570: 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20  ales clear..    
5580: 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20  mclocale foo..  
5590: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6d    lappend res [m
55a0: 63 65 78 69 73 74 73 20 6b 31 5d 0a 09 7d 20 2d  cexists k1]..} -
55b0: 72 65 73 75 6c 74 20 7b 31 20 30 7d 0a 0a 20 20  result {1 0}..  
55c0: 20 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74    # Tests msgcat
55d0: 2d 31 31 2e 2a 3a 20 5b 6d 63 66 6f 72 67 65 74  -11.*: [mcforget
55e0: 70 61 63 6b 61 67 65 5d 0a 0a 09 74 65 73 74 20  package]...test 
55f0: 6d 73 67 63 61 74 2d 31 31 2e 31 20 7b 6d 63 66  msgcat-11.1 {mcf
5600: 6f 72 67 65 74 70 61 63 6b 61 67 65 20 74 72 61  orgetpackage tra
5610: 6e 73 6c 61 74 69 6f 6e 7d 20 2d 73 65 74 75 70  nslation} -setup
5620: 20 7b 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65   {..    variable
5630: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
5640: 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  e]..} -cleanup {
5650: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24  ..    mclocale $
5660: 6c 6f 63 61 6c 65 0a 09 7d 20 2d 62 6f 64 79 20  locale..} -body 
5670: 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  {..    mclocale 
5680: 66 6f 6f 0a 09 20 20 20 20 6d 63 73 65 74 20 66  foo..    mcset f
5690: 6f 6f 20 6b 31 20 76 31 0a 09 20 20 20 20 73 65  oo k1 v1..    se
56a0: 74 20 72 65 73 20 5b 6d 63 65 78 69 73 74 73 20  t res [mcexists 
56b0: 6b 31 5d 0a 09 20 20 20 20 6d 63 66 6f 72 67 65  k1]..    mcforge
56c0: 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20 6c 61  tpackage..    la
56d0: 70 70 65 6e 64 20 72 65 73 20 5b 6d 63 65 78 69  ppend res [mcexi
56e0: 73 74 73 20 6b 31 5d 0a 09 7d 20 2d 72 65 73 75  sts k1]..} -resu
56f0: 6c 74 20 7b 31 20 30 7d 0a 0a 09 74 65 73 74 20  lt {1 0}...test 
5700: 6d 73 67 63 61 74 2d 31 31 2e 32 20 7b 6d 63 66  msgcat-11.2 {mcf
5710: 6f 72 67 65 74 70 61 63 6b 61 67 65 20 6c 6f 63  orgetpackage loc
5720: 61 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  ale} -setup {.. 
5730: 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61     variable loca
5740: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d  le [mclocale]..}
5750: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20   -cleanup {..   
5760: 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c   mclocale $local
5770: 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  e..} -body {..  
5780: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09    mclocale foo..
5790: 20 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63      mcpackageloc
57a0: 61 6c 65 20 73 65 74 20 62 61 72 0a 09 20 20 20  ale set bar..   
57b0: 20 73 65 74 20 72 65 73 20 5b 6d 63 70 61 63 6b   set res [mcpack
57c0: 61 67 65 6c 6f 63 61 6c 65 20 67 65 74 5d 0a 09  agelocale get]..
57d0: 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b      mcforgetpack
57e0: 61 67 65 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  age..    lappend
57f0: 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c   res [mcpackagel
5800: 6f 63 61 6c 65 20 67 65 74 5d 0a 09 7d 20 2d 72  ocale get]..} -r
5810: 65 73 75 6c 74 20 7b 62 61 72 20 66 6f 6f 7d 0a  esult {bar foo}.
5820: 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 31  ..test msgcat-11
5830: 2e 33 20 7b 6d 63 66 6f 72 67 65 74 70 61 63 6b  .3 {mcforgetpack
5840: 61 67 65 20 6f 70 74 69 6f 6e 73 7d 20 2d 62 6f  age options} -bo
5850: 64 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b  dy {..    mcpack
5860: 61 67 65 63 6f 6e 66 69 67 20 73 65 74 20 6c 6f  ageconfig set lo
5870: 61 64 63 6d 64 20 22 22 0a 09 20 20 20 20 73 65  adcmd ""..    se
5880: 74 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65  t res [mcpackage
5890: 63 6f 6e 66 69 67 20 69 73 73 65 74 20 6c 6f 61  config isset loa
58a0: 64 63 6d 64 5d 0a 09 20 20 20 20 6d 63 66 6f 72  dcmd]..    mcfor
58b0: 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20 20 20  getpackage..    
58c0: 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6d 63 70  lappend res [mcp
58d0: 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 69 73 73  ackageconfig iss
58e0: 65 74 20 6c 6f 61 64 63 6d 64 5d 0a 09 7d 20 2d  et loadcmd]..} -
58f0: 72 65 73 75 6c 74 20 7b 31 20 30 7d 0a 0a 20 20  result {1 0}..  
5900: 20 20 23 20 54 65 73 74 73 20 6d 73 67 63 61 74    # Tests msgcat
5910: 2d 31 32 2e 2a 3a 20 5b 6d 63 70 61 63 6b 61 67  -12.*: [mcpackag
5920: 65 6c 6f 63 61 6c 65 5d 0a 0a 09 74 65 73 74 20  elocale]...test 
5930: 6d 73 67 63 61 74 2d 31 32 2e 31 20 7b 6d 63 70  msgcat-12.1 {mcp
5940: 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 6e 6f 20  ackagelocale no 
5950: 73 75 62 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64  subcommand} -bod
5960: 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61  y {..    mcpacka
5970: 67 65 6c 6f 63 61 6c 65 0a 09 7d 20 2d 72 65 74  gelocale..} -ret
5980: 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72 65  urnCodes 1\..-re
5990: 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61 72  sult {wrong # ar
59a0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 6d  gs: should be "m
59b0: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73  cpackagelocale s
59c0: 75 62 63 6f 6d 6d 61 6e 64 20 3f 61 72 67 20 2e  ubcommand ?arg .
59d0: 2e 2e 3f 22 7d 0a 0a 09 74 65 73 74 20 6d 73 67  ..?"}...test msg
59e0: 63 61 74 2d 31 32 2e 32 20 7b 6d 63 6c 70 61 63  cat-12.2 {mclpac
59f0: 6b 61 67 65 6c 6f 63 61 6c 65 20 77 72 6f 6e 67  kagelocale wrong
5a00: 20 73 75 62 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f   subcommand} -bo
5a10: 64 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b  dy {..    mcpack
5a20: 61 67 65 6c 6f 63 61 6c 65 20 6a 75 6e 6b 0a 09  agelocale junk..
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 75 6e 6b 6e  \..-result {unkn
5a50: 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22  own subcommand "
5a60: 6a 75 6e 6b 22 3a 20 6d 75 73 74 20 62 65 20 63  junk": must be c
5a70: 6c 65 61 72 2c 20 67 65 74 2c 20 69 73 73 65 74  lear, get, isset
5a80: 2c 20 6c 6f 61 64 65 64 2c 20 70 72 65 73 65 6e  , loaded, presen
5a90: 74 2c 20 73 65 74 2c 20 6f 72 20 75 6e 73 65 74  t, set, or unset
5aa0: 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d  }...test msgcat-
5ab0: 31 32 2e 32 2e 31 20 7b 6d 63 6c 70 61 63 6b 61  12.2.1 {mclpacka
5ac0: 67 65 6c 6f 63 61 6c 65 20 73 65 74 20 6d 75 6c  gelocale set mul
5ad0: 74 69 70 6c 65 20 61 72 67 73 7d 20 2d 62 6f 64  tiple args} -bod
5ae0: 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61  y {..    mcpacka
5af0: 67 65 6c 6f 63 61 6c 65 20 73 65 74 20 61 20 62  gelocale set a b
5b00: 0a 09 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73  ..} -returnCodes
5b10: 20 31 5c 0a 09 2d 72 65 73 75 6c 74 20 7b 77 72   1\..-result {wr
5b20: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
5b30: 6c 64 20 62 65 20 22 6d 63 70 61 63 6b 61 67 65  ld be "mcpackage
5b40: 6c 6f 63 61 6c 65 20 73 65 74 20 3f 6c 6f 63 61  locale set ?loca
5b50: 6c 65 3f 22 7d 0a 0a 09 74 65 73 74 20 6d 73 67  le?"}...test msg
5b60: 63 61 74 2d 31 32 2e 33 20 7b 6d 63 70 61 63 6b  cat-12.3 {mcpack
5b70: 61 67 65 6c 6f 63 61 6c 65 20 73 65 74 7d 20 2d  agelocale set} -
5b80: 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72  setup {..    var
5b90: 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63  iable locale [mc
5ba0: 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61  locale]..} -clea
5bb0: 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63  nup {..    mcloc
5bc0: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20  ale $locale..   
5bd0: 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65   mcforgetpackage
5be0: 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20  ..} -body {..   
5bf0: 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20   mclocale foo.. 
5c00: 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61     mcpackageloca
5c10: 6c 65 20 73 65 74 20 62 61 72 0a 09 20 20 20 20  le set bar..    
5c20: 6c 69 73 74 20 5b 6d 63 70 61 63 6b 61 67 65 6c  list [mcpackagel
5c30: 6f 63 61 6c 65 20 67 65 74 5d 20 5b 6d 63 6c 6f  ocale get] [mclo
5c40: 63 61 6c 65 5d 0a 09 7d 20 2d 72 65 73 75 6c 74  cale]..} -result
5c50: 20 7b 62 61 72 20 66 6f 6f 7d 0a 0a 09 74 65 73   {bar foo}...tes
5c60: 74 20 6d 73 67 63 61 74 2d 31 32 2e 34 20 7b 6d  t msgcat-12.4 {m
5c70: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 67  cpackagelocale g
5c80: 65 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20  et} -setup {..  
5c90: 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61 6c    variable local
5ca0: 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20  e [mclocale]..} 
5cb0: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20  -cleanup {..    
5cc0: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
5cd0: 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61  ..    mcforgetpa
5ce0: 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b  ckage..} -body {
5cf0: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66  ..    mclocale f
5d00: 6f 6f 0a 09 20 20 20 20 73 65 74 20 72 65 73 20  oo..    set res 
5d10: 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  [mcpackagelocale
5d20: 20 67 65 74 5d 0a 09 20 20 20 20 6d 63 70 61 63   get]..    mcpac
5d30: 6b 61 67 65 6c 6f 63 61 6c 65 20 73 65 74 20 62  kagelocale set b
5d40: 61 72 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  ar..    lappend 
5d50: 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f  res [mcpackagelo
5d60: 63 61 6c 65 20 67 65 74 5d 0a 09 7d 20 2d 72 65  cale get]..} -re
5d70: 73 75 6c 74 20 7b 66 6f 6f 20 62 61 72 7d 0a 0a  sult {foo bar}..
5d80: 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e  .test msgcat-12.
5d90: 35 20 7b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61  5 {mcpackageloca
5da0: 6c 65 20 70 72 65 66 65 72 65 6e 63 65 73 7d 20  le preferences} 
5db0: 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61  -setup {..    va
5dc0: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d  riable locale [m
5dd0: 63 6c 6f 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65  clocale]..} -cle
5de0: 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f  anup {..    mclo
5df0: 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20  cale $locale..  
5e00: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
5e10: 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  e..} -body {..  
5e20: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09    mclocale foo..
5e30: 20 20 20 20 73 65 74 20 72 65 73 20 5b 6c 69 73      set res [lis
5e40: 74 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61  t [mcpackageloca
5e50: 6c 65 20 70 72 65 66 65 72 65 6e 63 65 73 5d 5d  le preferences]]
5e60: 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 6c  ..    mcpackagel
5e70: 6f 63 61 6c 65 20 73 65 74 20 62 61 72 0a 09 20  ocale set bar.. 
5e80: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b     lappend res [
5e90: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
5ea0: 70 72 65 66 65 72 65 6e 63 65 73 5d 0a 09 7d 20  preferences]..} 
5eb0: 2d 72 65 73 75 6c 74 20 7b 7b 66 6f 6f 20 7b 7d  -result {{foo {}
5ec0: 7d 20 7b 62 61 72 20 7b 7d 7d 7d 0a 0a 09 74 65  } {bar {}}}...te
5ed0: 73 74 20 6d 73 67 63 61 74 2d 31 32 2e 36 20 7b  st msgcat-12.6 {
5ee0: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
5ef0: 6c 6f 61 64 65 64 7d 20 2d 73 65 74 75 70 20 7b  loaded} -setup {
5f00: 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  ..    variable l
5f10: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
5f20: 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09  ..} -cleanup {..
5f30: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f      mclocale $lo
5f40: 63 61 6c 65 0a 09 20 20 20 20 6d 63 66 6f 72 67  cale..    mcforg
5f50: 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f  etpackage..} -bo
5f60: 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61  dy {..    mcloca
5f70: 6c 65 20 22 22 0a 09 20 20 20 20 6d 63 6c 6f 61  le ""..    mcloa
5f80: 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72  dedlocales clear
5f90: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66  ..    mclocale f
5fa0: 6f 6f 0a 09 20 20 20 20 23 20 54 68 65 20 72 65  oo..    # The re
5fb0: 73 75 6c 74 20 69 73 20 70 6f 73 69 74 69 6f 6e  sult is position
5fc0: 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 73 6f 20   independent so 
5fd0: 73 6f 72 74 0a 09 20 20 20 20 73 65 74 20 72 65  sort..    set re
5fe0: 73 20 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 5b  s [list [lsort [
5ff0: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
6000: 6c 6f 61 64 65 64 5d 5d 5d 0a 09 20 20 20 20 6d  loaded]]]..    m
6010: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73  cpackagelocale s
6020: 65 74 20 62 61 72 0a 09 20 20 20 20 6c 61 70 70  et bar..    lapp
6030: 65 6e 64 20 72 65 73 20 5b 6c 73 6f 72 74 20 5b  end res [lsort [
6040: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
6050: 6c 6f 61 64 65 64 5d 5d 0a 09 7d 20 2d 72 65 73  loaded]]..} -res
6060: 75 6c 74 20 7b 7b 7b 7d 20 66 6f 6f 7d 20 7b 7b  ult {{{} foo} {{
6070: 7d 20 62 61 72 20 66 6f 6f 7d 7d 0a 0a 09 74 65  } bar foo}}...te
6080: 73 74 20 6d 73 67 63 61 74 2d 31 32 2e 37 20 7b  st msgcat-12.7 {
6090: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
60a0: 69 73 73 65 74 7d 20 2d 73 65 74 75 70 20 7b 0a  isset} -setup {.
60b0: 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f  .    variable lo
60c0: 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a  cale [mclocale].
60d0: 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20  .} -cleanup {.. 
60e0: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63     mclocale $loc
60f0: 61 6c 65 0a 09 20 20 20 20 6d 63 66 6f 72 67 65  ale..    mcforge
6100: 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64  tpackage..} -bod
6110: 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  y {..    mclocal
6120: 65 20 66 6f 6f 0a 09 20 20 20 20 73 65 74 20 72  e foo..    set r
6130: 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63  es [mcpackageloc
6140: 61 6c 65 20 69 73 73 65 74 5d 0a 09 20 20 20 20  ale isset]..    
6150: 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20  mcpackagelocale 
6160: 73 65 74 20 62 61 72 0a 09 20 20 20 20 6c 61 70  set bar..    lap
6170: 70 65 6e 64 20 72 65 73 20 5b 6d 63 70 61 63 6b  pend res [mcpack
6180: 61 67 65 6c 6f 63 61 6c 65 20 69 73 73 65 74 5d  agelocale isset]
6190: 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 31  ..} -result {0 1
61a0: 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d  }...test msgcat-
61b0: 31 32 2e 38 20 7b 6d 63 70 61 63 6b 61 67 65 6c  12.8 {mcpackagel
61c0: 6f 63 61 6c 65 20 75 6e 73 65 74 7d 20 2d 73 65  ocale unset} -se
61d0: 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61  tup {..    varia
61e0: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
61f0: 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75  cale]..} -cleanu
6200: 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  p {..    mclocal
6210: 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d  e $locale..    m
6220: 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09  cforgetpackage..
6230: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
6240: 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 73  cpackagelocale s
6250: 65 74 20 62 61 72 0a 09 20 20 20 20 73 65 74 20  et bar..    set 
6260: 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f  res [mcpackagelo
6270: 63 61 6c 65 20 69 73 73 65 74 5d 0a 09 20 20 20  cale isset]..   
6280: 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65   mcpackagelocale
6290: 20 75 6e 73 65 74 0a 09 20 20 20 20 6c 61 70 70   unset..    lapp
62a0: 65 6e 64 20 72 65 73 20 5b 6d 63 70 61 63 6b 61  end res [mcpacka
62b0: 67 65 6c 6f 63 61 6c 65 20 69 73 73 65 74 5d 0a  gelocale isset].
62c0: 09 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20 30 7d  .} -result {1 0}
62d0: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31  ...test msgcat-1
62e0: 32 2e 39 20 7b 6d 63 70 61 63 6b 61 67 65 6c 6f  2.9 {mcpackagelo
62f0: 63 61 6c 65 20 70 72 65 73 65 6e 74 7d 20 2d 73  cale present} -s
6300: 65 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69  etup {..    vari
6310: 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c  able locale [mcl
6320: 6f 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e  ocale]..} -clean
6330: 75 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61  up {..    mcloca
6340: 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20  le $locale..    
6350: 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a  mcforgetpackage.
6360: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
6370: 6d 63 6c 6f 63 61 6c 65 20 22 22 0a 09 20 20 20  mclocale ""..   
6380: 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65 73   mcloadedlocales
6390: 20 63 6c 65 61 72 0a 09 20 20 20 20 6d 63 6c 6f   clear..    mclo
63a0: 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20 20 73 65  cale foo..    se
63b0: 74 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65  t res [mcpackage
63c0: 6c 6f 63 61 6c 65 20 70 72 65 73 65 6e 74 20 66  locale present f
63d0: 6f 6f 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  oo]..    lappend
63e0: 20 72 65 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c   res [mcpackagel
63f0: 6f 63 61 6c 65 20 70 72 65 73 65 6e 74 20 62 61  ocale present ba
6400: 72 5d 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67  r]..    mcpackag
6410: 65 6c 6f 63 61 6c 65 20 73 65 74 20 62 61 72 0a  elocale set bar.
6420: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
6430: 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c   [mcpackagelocal
6440: 65 20 70 72 65 73 65 6e 74 20 66 6f 6f 5d 5c 0a  e present foo]\.
6450: 09 09 20 20 20 20 5b 6d 63 70 61 63 6b 61 67 65  ..    [mcpackage
6460: 6c 6f 63 61 6c 65 20 70 72 65 73 65 6e 74 20 62  locale present b
6470: 61 72 5d 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b  ar]..} -result {
6480: 31 20 30 20 31 20 31 7d 0a 0a 09 74 65 73 74 20  1 0 1 1}...test 
6490: 6d 73 67 63 61 74 2d 31 32 2e 31 30 20 7b 6d 63  msgcat-12.10 {mc
64a0: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 63 6c  packagelocale cl
64b0: 65 61 72 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20  ear} -setup {.. 
64c0: 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f 63 61     variable loca
64d0: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 7d  le [mclocale]..}
64e0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20   -cleanup {..   
64f0: 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c   mclocale $local
6500: 65 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70  e..    mcforgetp
6510: 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20  ackage..} -body 
6520: 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20  {..    mclocale 
6530: 22 22 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64  ""..    mcloaded
6540: 6c 6f 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20  locales clear.. 
6550: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a     mclocale foo.
6560: 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f  .    mcpackagelo
6570: 63 61 6c 65 20 73 65 74 20 62 61 72 0a 09 20 20  cale set bar..  
6580: 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c    mcpackagelocal
6590: 65 20 63 6c 65 61 72 0a 09 20 20 20 20 6c 69 73  e clear..    lis
65a0: 74 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61  t [mcpackageloca
65b0: 6c 65 20 70 72 65 73 65 6e 74 20 66 6f 6f 5d 20  le present foo] 
65c0: 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65  [mcpackagelocale
65d0: 20 70 72 65 73 65 6e 74 20 62 61 72 5d 0a 09 7d   present bar]..}
65e0: 20 2d 72 65 73 75 6c 74 20 7b 30 20 31 7d 0a 0a   -result {0 1}..
65f0: 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e  .test msgcat-12.
6600: 31 31 20 7b 6d 63 70 61 63 6b 61 67 65 6c 6f 63  11 {mcpackageloc
6610: 61 6c 65 20 63 75 73 74 6f 6d 20 70 72 65 66 65  ale custom prefe
6620: 72 65 6e 63 65 73 7d 20 2d 73 65 74 75 70 20 7b  rences} -setup {
6630: 0a 09 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  ..    variable l
6640: 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d  ocale [mclocale]
6650: 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09  ..} -cleanup {..
6660: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f      mclocale $lo
6670: 63 61 6c 65 0a 09 20 20 20 20 6d 63 66 6f 72 67  cale..    mcforg
6680: 65 74 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f  etpackage..} -bo
6690: 64 79 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61  dy {..    mcloca
66a0: 6c 65 20 66 6f 6f 0a 09 20 20 20 20 73 65 74 20  le foo..    set 
66b0: 72 65 73 20 5b 6c 69 73 74 20 5b 6d 63 70 61 63  res [list [mcpac
66c0: 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72 65 66 65  kagelocale prefe
66d0: 72 65 6e 63 65 73 5d 5d 0a 09 20 20 20 20 6d 63  rences]]..    mc
66e0: 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65 20 70 72  packagelocale pr
66f0: 65 66 65 72 65 6e 63 65 73 20 62 61 72 20 7b 7d  eferences bar {}
6700: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
6710: 73 20 5b 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61  s [mcpackageloca
6720: 6c 65 20 70 72 65 66 65 72 65 6e 63 65 73 5d 0a  le preferences].
6730: 09 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 66 6f 6f  .} -result {{foo
6740: 20 7b 7d 7d 20 7b 62 61 72 20 7b 7d 7d 7d 0a 0a   {}} {bar {}}}..
6750: 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31 32 2e  .test msgcat-12.
6760: 31 32 20 7b 6d 63 70 61 63 6b 61 67 65 6c 6f 63  12 {mcpackageloc
6770: 61 6c 65 20 70 72 65 66 65 72 65 6e 63 65 73 20  ale preferences 
6780: 2d 3e 20 6e 6f 20 69 73 73 65 74 7d 20 2d 73 65  -> no isset} -se
6790: 74 75 70 20 7b 0a 09 20 20 20 20 76 61 72 69 61  tup {..    varia
67a0: 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f  ble locale [mclo
67b0: 63 61 6c 65 5d 0a 09 7d 20 2d 63 6c 65 61 6e 75  cale]..} -cleanu
67c0: 70 20 7b 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  p {..    mclocal
67d0: 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20 20 6d  e $locale..    m
67e0: 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09  cforgetpackage..
67f0: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
6800: 63 6c 6f 63 61 6c 65 20 66 6f 6f 0a 09 20 20 20  clocale foo..   
6810: 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c 65   mcpackagelocale
6820: 20 70 72 65 66 65 72 65 6e 63 65 73 0a 09 20 20   preferences..  
6830: 20 20 6d 63 70 61 63 6b 61 67 65 6c 6f 63 61 6c    mcpackagelocal
6840: 65 20 69 73 73 65 74 0a 09 7d 20 2d 72 65 73 75  e isset..} -resu
6850: 6c 74 20 7b 30 7d 0a 0a 0a 20 20 20 20 23 20 54  lt {0}...    # T
6860: 65 73 74 73 20 6d 73 67 63 61 74 2d 31 33 2e 2a  ests msgcat-13.*
6870: 3a 20 5b 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66  : [mcpackageconf
6880: 69 67 20 73 75 62 63 6d 64 73 5d 0a 0a 09 74 65  ig subcmds]...te
6890: 73 74 20 6d 73 67 63 61 74 2d 31 33 2e 31 20 7b  st msgcat-13.1 {
68a0: 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20  mcpackageconfig 
68b0: 6e 6f 20 73 75 62 63 6f 6d 6d 61 6e 64 7d 20 2d  no subcommand} -
68c0: 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 70 61  body {..    mcpa
68d0: 63 6b 61 67 65 63 6f 6e 66 69 67 0a 09 7d 20 2d  ckageconfig..} -
68e0: 72 65 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09  returnCodes 1\..
68f0: 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23  -result {wrong #
6900: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
6910: 20 22 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69   "mcpackageconfi
6920: 67 20 73 75 62 63 6f 6d 6d 61 6e 64 20 6f 70 74  g subcommand opt
6930: 69 6f 6e 20 3f 76 61 6c 75 65 3f 22 7d 0a 0a 09  ion ?value?"}...
6940: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 33 2e 32  test msgcat-13.2
6950: 20 7b 6d 63 6c 70 61 63 6b 61 67 65 63 6f 6e 66   {mclpackageconf
6960: 69 67 20 77 72 6f 6e 67 20 73 75 62 63 6f 6d 6d  ig wrong subcomm
6970: 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  and} -body {..  
6980: 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69    mcpackageconfi
6990: 67 20 6a 75 6e 6b 20 6d 63 66 6f 6c 64 65 72 0a  g junk mcfolder.
69a0: 09 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  .} -returnCodes 
69b0: 31 5c 0a 09 2d 72 65 73 75 6c 74 20 7b 75 6e 6b  1\..-result {unk
69c0: 6e 6f 77 6e 20 73 75 62 63 6f 6d 6d 61 6e 64 20  nown subcommand 
69d0: 22 6a 75 6e 6b 22 3a 20 6d 75 73 74 20 62 65 20  "junk": must be 
69e0: 67 65 74 2c 20 69 73 73 65 74 2c 20 73 65 74 2c  get, isset, set,
69f0: 20 6f 72 20 75 6e 73 65 74 7d 0a 0a 09 74 65 73   or unset}...tes
6a00: 74 20 6d 73 67 63 61 74 2d 31 33 2e 33 20 7b 6d  t msgcat-13.3 {m
6a10: 63 6c 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20  clpackageconfig 
6a20: 77 72 6f 6e 67 20 6f 70 74 69 6f 6e 7d 20 2d 62  wrong option} -b
6a30: 6f 64 79 20 7b 0a 09 20 20 20 20 6d 63 70 61 63  ody {..    mcpac
6a40: 6b 61 67 65 63 6f 6e 66 69 67 20 67 65 74 20 6a  kageconfig get j
6a50: 75 6e 6b 0a 09 7d 20 2d 72 65 74 75 72 6e 43 6f  unk..} -returnCo
6a60: 64 65 73 20 31 5c 0a 09 2d 72 65 73 75 6c 74 20  des 1\..-result 
6a70: 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22 6a 75 6e  {bad option "jun
6a80: 6b 22 3a 20 6d 75 73 74 20 62 65 20 6d 63 66 6f  k": must be mcfo
6a90: 6c 64 65 72 2c 20 6c 6f 61 64 63 6d 64 2c 20 63  lder, loadcmd, c
6aa0: 68 61 6e 67 65 63 6d 64 2c 20 6f 72 20 75 6e 6b  hangecmd, or unk
6ab0: 6e 6f 77 6e 63 6d 64 7d 0a 0a 09 74 65 73 74 20  nowncmd}...test 
6ac0: 6d 73 67 63 61 74 2d 31 33 2e 34 20 7b 6d 63 70  msgcat-13.4 {mcp
6ad0: 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 67 65 74  ackageconfig get
6ae0: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20  } -setup {..    
6af0: 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a  mcforgetpackage.
6b00: 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20  .} -cleanup {.. 
6b10: 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61     mcforgetpacka
6b20: 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20  ge..} -body {.. 
6b30: 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66     mcpackageconf
6b40: 69 67 20 73 65 74 20 6c 6f 61 64 63 6d 64 20 22  ig set loadcmd "
6b50: 22 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65  "..    mcpackage
6b60: 63 6f 6e 66 69 67 20 67 65 74 20 6c 6f 61 64 63  config get loadc
6b70: 6d 64 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 7d  md..} -result {}
6b80: 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d 31  ...test msgcat-1
6b90: 33 2e 35 20 7b 6d 63 70 61 63 6b 61 67 65 63 6f  3.5 {mcpackageco
6ba0: 6e 66 69 67 20 28 69 73 2f 75 6e 29 73 65 74 7d  nfig (is/un)set}
6bb0: 20 2d 73 65 74 75 70 20 7b 0a 09 20 20 20 20 6d   -setup {..    m
6bc0: 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09  cforgetpackage..
6bd0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20  } -cleanup {..  
6be0: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
6bf0: 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20  e..} -body {..  
6c00: 20 20 73 65 74 20 72 65 73 20 5b 6d 63 70 61 63    set res [mcpac
6c10: 6b 61 67 65 63 6f 6e 66 69 67 20 69 73 73 65 74  kageconfig isset
6c20: 20 6c 6f 61 64 63 6d 64 5d 0a 09 20 20 20 20 6c   loadcmd]..    l
6c30: 61 70 70 65 6e 64 20 72 65 73 20 5b 6d 63 70 61  append res [mcpa
6c40: 63 6b 61 67 65 63 6f 6e 66 69 67 20 73 65 74 20  ckageconfig set 
6c50: 6c 6f 61 64 63 6d 64 20 22 22 5d 0a 09 20 20 20  loadcmd ""]..   
6c60: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6d 63   lappend res [mc
6c70: 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 69 73  packageconfig is
6c80: 73 65 74 20 6c 6f 61 64 63 6d 64 5d 0a 09 20 20  set loadcmd]..  
6c90: 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69    mcpackageconfi
6ca0: 67 20 75 6e 73 65 74 20 6c 6f 61 64 63 6d 64 0a  g unset loadcmd.
6cb0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
6cc0: 20 5b 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69   [mcpackageconfi
6cd0: 67 20 69 73 73 65 74 20 6c 6f 61 64 63 6d 64 5d  g isset loadcmd]
6ce0: 0a 09 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 30  ..} -result {0 0
6cf0: 20 31 20 30 7d 0a 0a 20 20 20 20 23 20 6f 70 74   1 0}..    # opt
6d00: 69 6f 6e 20 6d 63 66 6f 6c 64 65 72 20 69 73 20  ion mcfolder is 
6d10: 61 6c 72 65 61 64 79 20 74 65 73 74 65 64 20 77  already tested w
6d20: 69 74 68 20 35 2e 31 31 0a 0a 20 20 20 20 23 20  ith 5.11..    # 
6d30: 54 65 73 74 73 20 6d 73 67 63 61 74 2d 31 34 2e  Tests msgcat-14.
6d40: 2a 3a 20 63 61 6c 6c 62 61 63 6b 73 3a 20 6c 6f  *: callbacks: lo
6d50: 61 64 63 6d 64 2c 20 63 68 61 6e 67 65 63 6d 64  adcmd, changecmd
6d60: 2c 20 75 6e 6b 6e 6f 77 6e 63 6d 64 0a 0a 20 20  , unknowncmd..  
6d70: 20 20 23 20 54 68 69 73 20 72 6f 75 74 69 6e 65    # This routine
6d80: 20 69 73 20 75 73 65 64 20 61 73 20 62 67 65 72   is used as bger
6d90: 72 6f 72 20 61 6e 64 20 62 79 20 64 69 72 65 63  ror and by direc
6da0: 74 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 63  t callback invoc
6db0: 61 74 69 6f 6e 0a 20 20 20 20 70 72 6f 63 20 63  ation.    proc c
6dc0: 61 6c 6c 62 61 63 6b 70 72 6f 63 20 61 72 67 73  allbackproc args
6dd0: 20 7b 0a 09 76 61 72 69 61 62 6c 65 20 72 65 73   {..variable res
6de0: 75 6c 74 76 61 72 69 61 62 6c 65 0a 09 73 65 74  ultvariable..set
6df0: 20 72 65 73 75 6c 74 76 61 72 69 61 62 6c 65 20   resultvariable 
6e00: 24 61 72 67 73 0a 20 20 20 20 7d 0a 20 20 20 20  $args.    }.    
6e10: 70 72 6f 63 20 63 61 6c 6c 62 61 63 6b 66 61 69  proc callbackfai
6e20: 6c 70 72 6f 63 20 61 72 67 73 20 7b 0a 09 72 65  lproc args {..re
6e30: 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72  turn -code error
6e40: 20 66 61 69 6c 0a 20 20 20 20 7d 0a 20 20 20 20   fail.    }.    
6e50: 73 65 74 20 62 67 65 72 72 6f 72 73 61 76 65 64  set bgerrorsaved
6e60: 20 5b 69 6e 74 65 72 70 20 62 67 65 72 72 6f 72   [interp bgerror
6e70: 20 7b 7d 5d 0a 20 20 20 20 69 6e 74 65 72 70 20   {}].    interp 
6e80: 62 67 65 72 72 6f 72 20 7b 7d 20 5b 6e 61 6d 65  bgerror {} [name
6e90: 73 70 61 63 65 20 63 6f 64 65 20 63 61 6c 6c 62  space code callb
6ea0: 61 63 6b 70 72 6f 63 5d 0a 0a 20 20 20 20 76 61  ackproc]..    va
6eb0: 72 69 61 62 6c 65 20 6c 6f 63 61 6c 65 0a 20 20  riable locale.  
6ec0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
6ed0: 73 74 20 6c 6f 63 61 6c 65 5d 7d 20 7b 20 73 65  st locale]} { se
6ee0: 74 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  t locale [mcloca
6ef0: 6c 65 5d 20 7d 0a 0a 09 74 65 73 74 20 6d 73 67  le] }...test msg
6f00: 63 61 74 2d 31 34 2e 31 20 7b 69 6e 76 6f 6b 61  cat-14.1 {invoka
6f10: 74 69 6f 6e 20 6c 6f 61 64 63 6d 64 7d 20 2d 73  tion loadcmd} -s
6f20: 65 74 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f  etup {..    mcfo
6f30: 72 67 65 74 70 61 63 6b 61 67 65 0a 20 20 20 20  rgetpackage.    
6f40: 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c  .    mclocale $l
6f50: 6f 63 61 6c 65 0a 09 20 20 20 20 6d 63 6c 6f 63  ocale..    mcloc
6f60: 61 6c 65 20 22 22 0a 09 20 20 20 20 6d 63 6c 6f  ale ""..    mclo
6f70: 61 64 65 64 6c 6f 63 61 6c 65 73 20 63 6c 65 61  adedlocales clea
6f80: 72 0a 09 20 20 20 20 73 65 74 20 72 65 73 75 6c  r..    set resul
6f90: 74 76 61 72 69 61 62 6c 65 20 22 22 0a 09 7d 20  tvariable ""..} 
6fa0: 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20 20 20  -cleanup {..    
6fb0: 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67 65 0a  mcforgetpackage.
6fc0: 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20  .} -body {..    
6fd0: 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20  mcpackageconfig 
6fe0: 73 65 74 20 6c 6f 61 64 63 6d 64 20 5b 6e 61 6d  set loadcmd [nam
6ff0: 65 73 70 61 63 65 20 63 6f 64 65 20 63 61 6c 6c  espace code call
7000: 62 61 63 6b 70 72 6f 63 5d 0a 09 20 20 20 20 6d  backproc]..    m
7010: 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62 61 72 0a  clocale foo_bar.
7020: 09 20 20 20 20 6c 73 6f 72 74 20 24 72 65 73 75  .    lsort $resu
7030: 6c 74 76 61 72 69 61 62 6c 65 0a 09 7d 20 2d 72  ltvariable..} -r
7040: 65 73 75 6c 74 20 7b 66 6f 6f 20 66 6f 6f 5f 62  esult {foo foo_b
7050: 61 72 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61  ar}...test msgca
7060: 74 2d 31 34 2e 32 20 7b 69 6e 76 6f 6b 61 74 69  t-14.2 {invokati
7070: 6f 6e 20 66 61 69 6c 65 64 20 69 6e 20 6c 6f 61  on failed in loa
7080: 64 63 6d 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09  dcmd} -setup {..
7090: 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b      mcforgetpack
70a0: 61 67 65 0a 20 20 20 20 09 20 20 20 20 6d 63 6c  age.    .    mcl
70b0: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20  ocale $locale.. 
70c0: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a 09     mclocale ""..
70d0: 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61      mcloadedloca
70e0: 6c 65 73 20 63 6c 65 61 72 0a 09 7d 20 2d 63 6c  les clear..} -cl
70f0: 65 61 6e 75 70 20 7b 0a 09 20 20 20 20 6d 63 66  eanup {..    mcf
7100: 6f 72 67 65 74 70 61 63 6b 61 67 65 0a 09 20 20  orgetpackage..  
7110: 20 20 61 66 74 65 72 20 63 61 6e 63 65 6c 20 73    after cancel s
7120: 65 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 75  et [namespace cu
7130: 72 72 65 6e 74 5d 3a 3a 72 65 73 75 6c 74 76 61  rrent]::resultva
7140: 72 69 61 62 6c 65 20 74 69 6d 65 6f 75 74 0a 09  riable timeout..
7150: 7d 20 2d 62 6f 64 79 20 7b 0a 09 20 20 20 20 6d  } -body {..    m
7160: 63 70 61 63 6b 61 67 65 63 6f 6e 66 69 67 20 73  cpackageconfig s
7170: 65 74 20 6c 6f 61 64 63 6d 64 20 5b 6e 61 6d 65  et loadcmd [name
7180: 73 70 61 63 65 20 63 6f 64 65 20 63 61 6c 6c 62  space code callb
7190: 61 63 6b 66 61 69 6c 70 72 6f 63 5d 0a 09 20 20  ackfailproc]..  
71a0: 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62    mclocale foo_b
71b0: 61 72 0a 09 20 20 20 20 23 20 6c 65 74 20 74 68  ar..    # let th
71c0: 65 20 62 67 65 72 72 6f 72 20 72 75 6e 0a 09 20  e bgerror run.. 
71d0: 20 20 20 61 66 74 65 72 20 31 30 30 20 73 65 74     after 100 set
71e0: 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 75 72 72   [namespace curr
71f0: 65 6e 74 5d 3a 3a 72 65 73 75 6c 74 76 61 72 69  ent]::resultvari
7200: 61 62 6c 65 20 74 69 6d 65 6f 75 74 0a 09 20 20  able timeout..  
7210: 20 20 76 77 61 69 74 20 5b 6e 61 6d 65 73 70 61    vwait [namespa
7220: 63 65 20 63 75 72 72 65 6e 74 5d 3a 3a 72 65 73  ce current]::res
7230: 75 6c 74 76 61 72 69 61 62 6c 65 0a 09 20 20 20  ultvariable..   
7240: 20 6c 61 73 73 69 67 6e 20 24 72 65 73 75 6c 74   lassign $result
7250: 76 61 72 69 61 62 6c 65 20 65 72 72 20 65 72 72  variable err err
7260: 64 69 63 74 0a 09 20 20 20 20 6c 69 73 74 20 24  dict..    list $
7270: 65 72 72 20 5b 64 69 63 74 20 67 65 74 20 24 65  err [dict get $e
7280: 72 72 64 69 63 74 20 2d 63 6f 64 65 5d 0a 09 7d  rrdict -code]..}
7290: 20 2d 72 65 73 75 6c 74 20 7b 66 61 69 6c 20 31   -result {fail 1
72a0: 7d 0a 0a 09 74 65 73 74 20 6d 73 67 63 61 74 2d  }...test msgcat-
72b0: 31 34 2e 33 20 7b 69 6e 76 6f 6b 61 74 69 6f 6e  14.3 {invokation
72c0: 20 63 68 61 6e 67 65 63 6d 64 7d 20 2d 73 65 74   changecmd} -set
72d0: 75 70 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67  up {..    mcforg
72e0: 65 74 70 61 63 6b 61 67 65 0a 20 20 20 20 09 20  etpackage.    . 
72f0: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63     mclocale $loc
7300: 61 6c 65 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c  ale..    mclocal
7310: 65 20 22 22 0a 09 20 20 20 20 73 65 74 20 72 65  e ""..    set re
7320: 73 75 6c 74 76 61 72 69 61 62 6c 65 20 22 22 0a  sultvariable "".
7330: 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20  .} -cleanup {.. 
7340: 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61     mcforgetpacka
7350: 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09 20  ge..} -body {.. 
7360: 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e 66     mcpackageconf
7370: 69 67 20 73 65 74 20 63 68 61 6e 67 65 63 6d 64  ig set changecmd
7380: 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 6f 64 65   [namespace code
7390: 20 63 61 6c 6c 62 61 63 6b 70 72 6f 63 5d 0a 09   callbackproc]..
73a0: 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f      mclocale foo
73b0: 5f 62 61 72 0a 09 20 20 20 20 73 65 74 20 72 65  _bar..    set re
73c0: 73 75 6c 74 76 61 72 69 61 62 6c 65 0a 09 7d 20  sultvariable..} 
73d0: 2d 72 65 73 75 6c 74 20 7b 66 6f 6f 5f 62 61 72  -result {foo_bar
73e0: 20 66 6f 6f 20 7b 7d 7d 0a 0a 09 74 65 73 74 20   foo {}}...test 
73f0: 6d 73 67 63 61 74 2d 31 34 2e 34 20 7b 69 6e 76  msgcat-14.4 {inv
7400: 6f 6b 61 74 69 6f 6e 20 75 6e 6b 6e 6f 77 6e 63  okation unknownc
7410: 6d 64 7d 20 2d 73 65 74 75 70 20 7b 0a 09 20 20  md} -setup {..  
7420: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
7430: 65 0a 20 20 20 20 09 20 20 20 20 6d 63 6c 6f 63  e.    .    mcloc
7440: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20 20 20  ale $locale..   
7450: 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a 09 20 20   mclocale ""..  
7460: 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61 6c 65    mcloadedlocale
7470: 73 20 63 6c 65 61 72 0a 09 20 20 20 20 73 65 74  s clear..    set
7480: 20 72 65 73 75 6c 74 76 61 72 69 61 62 6c 65 20   resultvariable 
7490: 22 22 0a 09 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  ""..} -cleanup {
74a0: 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61  ..    mcforgetpa
74b0: 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79 20 7b  ckage..} -body {
74c0: 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63  ..    mcpackagec
74d0: 6f 6e 66 69 67 20 73 65 74 20 75 6e 6b 6e 6f 77  onfig set unknow
74e0: 6e 63 6d 64 20 5b 6e 61 6d 65 73 70 61 63 65 20  ncmd [namespace 
74f0: 63 6f 64 65 20 63 61 6c 6c 62 61 63 6b 70 72 6f  code callbackpro
7500: 63 5d 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65  c]..    mclocale
7510: 20 66 6f 6f 5f 62 61 72 0a 09 20 20 20 20 6d 63   foo_bar..    mc
7520: 20 6b 31 20 70 31 0a 09 20 20 20 20 73 65 74 20   k1 p1..    set 
7530: 72 65 73 75 6c 74 76 61 72 69 61 62 6c 65 0a 09  resultvariable..
7540: 7d 20 2d 72 65 73 75 6c 74 20 7b 66 6f 6f 5f 62  } -result {foo_b
7550: 61 72 20 6b 31 20 70 31 7d 0a 0a 09 74 65 73 74  ar k1 p1}...test
7560: 20 6d 73 67 63 61 74 2d 31 34 2e 35 20 7b 64 69   msgcat-14.5 {di
7570: 73 61 62 6c 65 20 67 6c 6f 62 61 6c 20 75 6e 6b  sable global unk
7580: 6e 6f 77 6e 63 6d 64 7d 20 2d 73 65 74 75 70 20  nowncmd} -setup 
7590: 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74 70  {..    mcforgetp
75a0: 61 63 6b 61 67 65 0a 20 20 20 20 09 20 20 20 20  ackage.    .    
75b0: 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65  mclocale $locale
75c0: 0a 09 20 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22  ..    mclocale "
75d0: 22 0a 09 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c  "..    mcloadedl
75e0: 6f 63 61 6c 65 73 20 63 6c 65 61 72 0a 09 20 20  ocales clear..  
75f0: 20 20 73 65 74 20 72 65 73 75 6c 74 76 61 72 69    set resultvari
7600: 61 62 6c 65 20 22 22 0a 09 20 20 20 20 72 65 6e  able ""..    ren
7610: 61 6d 65 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63  ame ::msgcat::mc
7620: 75 6e 6b 6e 6f 77 6e 20 53 61 76 65 64 4d 63 75  unknown SavedMcu
7630: 6e 6b 6e 6f 77 6e 0a 09 20 20 20 20 70 72 6f 63  nknown..    proc
7640: 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b   ::msgcat::mcunk
7650: 6e 6f 77 6e 20 7b 64 6f 6d 20 73 7d 20 7b 0a 09  nown {dom s} {..
7660: 09 72 65 74 75 72 6e 20 75 6e 6b 6e 6f 77 6e 3a  .return unknown:
7670: 24 64 6f 6d 3a 24 73 0a 09 20 20 20 20 7d 0a 09  $dom:$s..    }..
7680: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 20 20  } -cleanup {..  
7690: 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67    mcforgetpackag
76a0: 65 0a 09 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a  e..    rename ::
76b0: 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e 6f 77  msgcat::mcunknow
76c0: 6e 20 7b 7d 0a 09 20 20 20 20 72 65 6e 61 6d 65  n {}..    rename
76d0: 20 53 61 76 65 64 4d 63 75 6e 6b 6e 6f 77 6e 20   SavedMcunknown 
76e0: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 75 6e 6b 6e  ::msgcat::mcunkn
76f0: 6f 77 6e 0a 09 7d 20 2d 62 6f 64 79 20 7b 0a 09  own..} -body {..
7700: 20 20 20 20 6d 63 70 61 63 6b 61 67 65 63 6f 6e      mcpackagecon
7710: 66 69 67 20 73 65 74 20 75 6e 6b 6e 6f 77 6e 63  fig set unknownc
7720: 6d 64 20 22 22 0a 09 20 20 20 20 6d 63 6c 6f 63  md ""..    mcloc
7730: 61 6c 65 20 66 6f 6f 5f 62 61 72 0a 09 20 20 20  ale foo_bar..   
7740: 20 6d 63 20 6b 31 25 73 20 70 31 0a 09 7d 20 2d   mc k1%s p1..} -
7750: 72 65 73 75 6c 74 20 7b 6b 31 70 31 7d 0a 0a 09  result {k1p1}...
7760: 74 65 73 74 20 6d 73 67 63 61 74 2d 31 34 2e 36  test msgcat-14.6
7770: 20 7b 75 6e 6b 6e 6f 77 6e 63 6d 64 20 66 61 69   {unknowncmd fai
7780: 6c 69 6e 67 7d 20 2d 73 65 74 75 70 20 7b 0a 09  ling} -setup {..
7790: 20 20 20 20 6d 63 66 6f 72 67 65 74 70 61 63 6b      mcforgetpack
77a0: 61 67 65 0a 20 20 20 20 09 20 20 20 20 6d 63 6c  age.    .    mcl
77b0: 6f 63 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 20  ocale $locale.. 
77c0: 20 20 20 6d 63 6c 6f 63 61 6c 65 20 22 22 0a 09     mclocale ""..
77d0: 20 20 20 20 6d 63 6c 6f 61 64 65 64 6c 6f 63 61      mcloadedloca
77e0: 6c 65 73 20 63 6c 65 61 72 0a 09 20 20 20 20 73  les clear..    s
77f0: 65 74 20 72 65 73 75 6c 74 76 61 72 69 61 62 6c  et resultvariabl
7800: 65 20 22 22 0a 09 7d 20 2d 63 6c 65 61 6e 75 70  e ""..} -cleanup
7810: 20 7b 0a 09 20 20 20 20 6d 63 66 6f 72 67 65 74   {..    mcforget
7820: 70 61 63 6b 61 67 65 0a 09 7d 20 2d 62 6f 64 79  package..} -body
7830: 20 7b 0a 09 20 20 20 20 6d 63 70 61 63 6b 61 67   {..    mcpackag
7840: 65 63 6f 6e 66 69 67 20 73 65 74 20 75 6e 6b 6e  econfig set unkn
7850: 6f 77 6e 63 6d 64 20 5b 6e 61 6d 65 73 70 61 63  owncmd [namespac
7860: 65 20 63 6f 64 65 20 63 61 6c 6c 62 61 63 6b 66  e code callbackf
7870: 61 69 6c 70 72 6f 63 5d 0a 09 20 20 20 20 6d 63  ailproc]..    mc
7880: 6c 6f 63 61 6c 65 20 66 6f 6f 5f 62 61 72 0a 09  locale foo_bar..
7890: 20 20 20 20 6d 63 20 6b 31 0a 09 7d 20 2d 72 65      mc k1..} -re
78a0: 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 09 2d 72  turnCodes 1\..-r
78b0: 65 73 75 6c 74 20 7b 66 61 69 6c 7d 0a 0c 0a 0a  esult {fail}....
78c0: 20 20 20 20 23 20 54 65 73 74 73 20 6d 73 67 63      # Tests msgc
78d0: 61 74 2d 31 35 2e 2a 3a 20 74 63 6c 6f 6f 20 63  at-15.*: tcloo c
78e0: 6f 76 65 72 61 67 65 0a 0a 20 20 20 20 23 20 54  overage..    # T
78f0: 68 65 72 65 20 61 72 65 20 34 20 75 73 65 2d 63  here are 4 use-c
7900: 61 73 65 73 2c 20 77 68 65 72 65 20 33 20 6d 75  ases, where 3 mu
7910: 73 74 20 62 65 20 74 65 73 74 65 64 20 6e 6f 77  st be tested now
7920: 3a 0a 20 20 20 20 23 20 2d 20 6e 61 6d 65 73 70  :.    # - namesp
7930: 61 63 65 20 64 65 66 69 6e 65 64 2c 20 69 6e 20  ace defined, in 
7940: 63 6c 61 73 73 20 64 65 66 69 6e 69 74 69 6f 6e  class definition
7950: 2c 20 63 6c 61 73 73 20 64 65 66 69 6e 65 64 20  , class defined 
7960: 6f 6f 2c 20 63 6c 61 73 73 6c 65 73 73 0a 0a 20  oo, classless.. 
7970: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31     test msgcat-1
7980: 35 2e 31 20 7b 6d 63 20 69 6e 20 63 6c 61 73 73  5.1 {mc in class
7990: 20 73 65 74 75 70 7d 20 2d 73 65 74 75 70 20 7b   setup} -setup {
79a0: 0a 09 23 20 66 75 6c 6c 20 6e 61 6d 65 73 70 61  ..# full namespa
79b0: 63 65 20 69 73 20 3a 3a 6d 73 67 63 61 74 3a 3a  ce is ::msgcat::
79c0: 74 65 73 74 3a 62 61 72 0a 09 6e 61 6d 65 73 70  test:bar..namesp
79d0: 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b 0a 09  ace eval bar {..
79e0: 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63      ::msgcat::mc
79f0: 73 65 74 20 66 6f 6f 5f 42 41 52 20 63 6f 6e 32  set foo_BAR con2
7a00: 20 63 6f 6e 32 62 61 72 0a 09 20 20 20 20 6f 6f   con2bar..    oo
7a10: 3a 3a 63 6c 61 73 73 20 63 72 65 61 74 65 20 43  ::class create C
7a20: 6c 61 73 73 43 75 72 0a 09 7d 0a 09 76 61 72 69  lassCur..}..vari
7a30: 61 62 6c 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c  able locale [mcl
7a40: 6f 63 61 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65  ocale]..mclocale
7a50: 20 66 6f 6f 5f 42 41 52 0a 20 20 20 20 7d 20 2d   foo_BAR.    } -
7a60: 63 6c 65 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63  cleanup {..mcloc
7a70: 61 6c 65 20 24 6c 6f 63 61 6c 65 0a 09 6e 61 6d  ale $locale..nam
7a80: 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20  espace eval bar 
7a90: 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 66 6f 72  {::msgcat::mcfor
7aa0: 67 65 74 70 61 63 6b 61 67 65 7d 0a 09 6e 61 6d  getpackage}..nam
7ab0: 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 62 61  espace delete ba
7ac0: 72 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a  r.    } -body {.
7ad0: 09 6f 6f 3a 3a 64 65 66 69 6e 65 20 62 61 72 3a  .oo::define bar:
7ae0: 3a 43 6c 61 73 73 43 75 72 20 6d 73 67 63 61 74  :ClassCur msgcat
7af0: 3a 3a 6d 63 20 63 6f 6e 32 0a 20 20 20 20 7d 20  ::mc con2.    } 
7b00: 2d 72 65 73 75 6c 74 20 63 6f 6e 32 62 61 72 0a  -result con2bar.
7b10: 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61 74  .    test msgcat
7b20: 2d 31 35 2e 32 20 7b 6d 63 20 69 6e 20 63 6c 61  -15.2 {mc in cla
7b30: 73 73 7d 20 2d 73 65 74 75 70 20 7b 0a 09 23 20  ss} -setup {..# 
7b40: 66 75 6c 6c 20 6e 61 6d 65 73 70 61 63 65 20 69  full namespace i
7b50: 73 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74  s ::msgcat::test
7b60: 3a 62 61 72 0a 09 6e 61 6d 65 73 70 61 63 65 20  :bar..namespace 
7b70: 65 76 61 6c 20 62 61 72 20 7b 0a 09 20 20 20 20  eval bar {..    
7b80: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20  ::msgcat::mcset 
7b90: 66 6f 6f 5f 42 41 52 20 63 6f 6e 32 20 63 6f 6e  foo_BAR con2 con
7ba0: 32 62 61 72 0a 09 20 20 20 20 6f 6f 3a 3a 63 6c  2bar..    oo::cl
7bb0: 61 73 73 20 63 72 65 61 74 65 20 43 6c 61 73 73  ass create Class
7bc0: 43 75 72 0a 09 20 20 20 20 6f 6f 3a 3a 64 65 66  Cur..    oo::def
7bd0: 69 6e 65 20 43 6c 61 73 73 43 75 72 20 6d 65 74  ine ClassCur met
7be0: 68 6f 64 20 6d 65 74 68 6f 64 31 20 7b 7d 20 7b  hod method1 {} {
7bf0: 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 20 63 6f 6e  ::msgcat::mc con
7c00: 32 7d 0a 09 7d 0a 09 23 20 66 75 6c 6c 20 6e 61  2}..}..# full na
7c10: 6d 65 73 70 61 63 65 20 69 73 20 3a 3a 6d 73 67  mespace is ::msg
7c20: 63 61 74 3a 3a 74 65 73 74 3a 62 61 7a 0a 09 6e  cat::test:baz..n
7c30: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62 61  amespace eval ba
7c40: 7a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  z {.            
7c50: 73 65 74 20 4f 62 6a 43 75 72 20 5b 3a 3a 6d 73  set ObjCur [::ms
7c60: 67 63 61 74 3a 3a 74 65 73 74 3a 3a 62 61 72 3a  gcat::test::bar:
7c70: 3a 43 6c 61 73 73 43 75 72 20 6e 65 77 5d 0a 09  :ClassCur new]..
7c80: 7d 0a 09 76 61 72 69 61 62 6c 65 20 6c 6f 63 61  }..variable loca
7c90: 6c 65 20 5b 6d 63 6c 6f 63 61 6c 65 5d 0a 09 6d  le [mclocale]..m
7ca0: 63 6c 6f 63 61 6c 65 20 66 6f 6f 5f 42 41 52 0a  clocale foo_BAR.
7cb0: 20 20 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b      } -cleanup {
7cc0: 0a 09 6d 63 6c 6f 63 61 6c 65 20 24 6c 6f 63 61  ..mclocale $loca
7cd0: 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76  le..namespace ev
7ce0: 61 6c 20 62 61 72 20 7b 3a 3a 6d 73 67 63 61 74  al bar {::msgcat
7cf0: 3a 3a 6d 63 66 6f 72 67 65 74 70 61 63 6b 61 67  ::mcforgetpackag
7d00: 65 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 64 65  e}..namespace de
7d10: 6c 65 74 65 20 62 61 72 20 62 61 7a 0a 20 20 20  lete bar baz.   
7d20: 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 24 62 61 7a   } -body {..$baz
7d30: 3a 3a 4f 62 6a 43 75 72 20 6d 65 74 68 6f 64 31  ::ObjCur method1
7d40: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 63  .    } -result c
7d50: 6f 6e 32 62 61 72 0a 0a 20 20 20 20 74 65 73 74  on2bar..    test
7d60: 20 6d 73 67 63 61 74 2d 31 35 2e 33 20 7b 6d 63   msgcat-15.3 {mc
7d70: 20 69 6e 20 63 6c 61 73 73 6c 65 73 73 20 6f 62   in classless ob
7d80: 6a 65 63 74 7d 20 2d 73 65 74 75 70 20 7b 0a 09  ject} -setup {..
7d90: 23 20 66 75 6c 6c 20 6e 61 6d 65 73 70 61 63 65  # full namespace
7da0: 20 69 73 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65   is ::msgcat::te
7db0: 73 74 3a 62 61 72 0a 09 6e 61 6d 65 73 70 61 63  st:bar..namespac
7dc0: 65 20 65 76 61 6c 20 62 61 72 20 7b 0a 09 20 20  e eval bar {..  
7dd0: 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65    ::msgcat::mcse
7de0: 74 20 66 6f 6f 5f 42 41 52 20 63 6f 6e 32 20 63  t foo_BAR con2 c
7df0: 6f 6e 32 62 61 72 0a 09 20 20 20 20 6f 6f 3a 3a  on2bar..    oo::
7e00: 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 4f 62  object create Ob
7e10: 6a 43 75 72 0a 09 20 20 20 20 6f 6f 3a 3a 6f 62  jCur..    oo::ob
7e20: 6a 64 65 66 69 6e 65 20 4f 62 6a 43 75 72 20 6d  jdefine ObjCur m
7e30: 65 74 68 6f 64 20 6d 65 74 68 6f 64 31 20 7b 7d  ethod method1 {}
7e40: 20 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 20 63   {::msgcat::mc c
7e50: 6f 6e 32 7d 0a 09 7d 0a 09 76 61 72 69 61 62 6c  on2}..}..variabl
7e60: 65 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61  e locale [mcloca
7e70: 6c 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f  le]..mclocale fo
7e80: 6f 5f 42 41 52 0a 20 20 20 20 7d 20 2d 63 6c 65  o_BAR.    } -cle
7e90: 61 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65  anup {..mclocale
7ea0: 20 24 6c 6f 63 61 6c 65 0a 09 6e 61 6d 65 73 70   $locale..namesp
7eb0: 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a  ace eval bar {::
7ec0: 6d 73 67 63 61 74 3a 3a 6d 63 66 6f 72 67 65 74  msgcat::mcforget
7ed0: 70 61 63 6b 61 67 65 7d 0a 09 6e 61 6d 65 73 70  package}..namesp
7ee0: 61 63 65 20 64 65 6c 65 74 65 20 62 61 72 0a 20  ace delete bar. 
7ef0: 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 62 61     } -body {..ba
7f00: 72 3a 3a 4f 62 6a 43 75 72 20 6d 65 74 68 6f 64  r::ObjCur method
7f10: 31 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20  1.    } -result 
7f20: 63 6f 6e 32 62 61 72 0a 0a 20 20 20 20 74 65 73  con2bar..    tes
7f30: 74 20 6d 73 67 63 61 74 2d 31 35 2e 34 20 7b 6d  t msgcat-15.4 {m
7f40: 63 20 69 6e 20 63 6c 61 73 73 6c 65 73 73 20 6f  c in classless o
7f50: 62 6a 65 63 74 20 77 69 74 68 20 65 78 70 6c 69  bject with expli
7f60: 63 69 74 65 20 6e 61 6d 65 73 70 61 63 65 20 65  cite namespace e
7f70: 76 61 6c 7d 5c 0a 20 20 20 20 2d 73 65 74 75 70  val}\.    -setup
7f80: 20 7b 0a 09 23 20 66 75 6c 6c 20 6e 61 6d 65 73   {..# full names
7f90: 70 61 63 65 20 69 73 20 3a 3a 6d 73 67 63 61 74  pace is ::msgcat
7fa0: 3a 3a 74 65 73 74 3a 62 61 72 0a 09 6e 61 6d 65  ::test:bar..name
7fb0: 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b  space eval bar {
7fc0: 0a 09 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a  ..    ::msgcat::
7fd0: 6d 63 73 65 74 20 66 6f 6f 5f 42 41 52 20 63 6f  mcset foo_BAR co
7fe0: 6e 32 20 63 6f 6e 32 62 61 72 0a 09 20 20 20 20  n2 con2bar..    
7ff0: 6f 6f 3a 3a 6f 62 6a 65 63 74 20 63 72 65 61 74  oo::object creat
8000: 65 20 4f 62 6a 43 75 72 0a 09 20 20 20 20 6f 6f  e ObjCur..    oo
8010: 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 4f 62 6a 43  ::objdefine ObjC
8020: 75 72 20 6d 65 74 68 6f 64 20 6d 65 74 68 6f 64  ur method method
8030: 31 20 7b 7d 20 7b 0a 09 09 6e 61 6d 65 73 70 61  1 {} {...namespa
8040: 63 65 20 65 76 61 6c 20 3a 3a 6d 73 67 63 61 74  ce eval ::msgcat
8050: 3a 3a 74 65 73 74 3a 3a 62 61 7a 20 7b 0a 09 09  ::test::baz {...
8060: 20 20 20 20 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63      ::msgcat::mc
8070: 20 63 6f 6e 32 0a 09 09 7d 0a 09 20 20 20 20 7d   con2...}..    }
8080: 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 65  ..}..namespace e
8090: 76 61 6c 20 62 61 7a 20 7b 0a 09 20 20 20 20 3a  val baz {..    :
80a0: 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74 20 66  :msgcat::mcset f
80b0: 6f 6f 5f 42 41 52 20 63 6f 6e 32 20 63 6f 6e 32  oo_BAR con2 con2
80c0: 62 61 7a 0a 09 7d 0a 09 76 61 72 69 61 62 6c 65  baz..}..variable
80d0: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
80e0: 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f  e]..mclocale foo
80f0: 5f 42 41 52 0a 20 20 20 20 7d 20 2d 63 6c 65 61  _BAR.    } -clea
8100: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
8110: 24 6c 6f 63 61 6c 65 0a 09 6e 61 6d 65 73 70 61  $locale..namespa
8120: 63 65 20 65 76 61 6c 20 62 61 72 20 7b 3a 3a 6d  ce eval bar {::m
8130: 73 67 63 61 74 3a 3a 6d 63 66 6f 72 67 65 74 70  sgcat::mcforgetp
8140: 61 63 6b 61 67 65 7d 0a 09 6e 61 6d 65 73 70 61  ackage}..namespa
8150: 63 65 20 65 76 61 6c 20 62 61 7a 20 7b 3a 3a 6d  ce eval baz {::m
8160: 73 67 63 61 74 3a 3a 6d 63 66 6f 72 67 65 74 70  sgcat::mcforgetp
8170: 61 63 6b 61 67 65 7d 0a 09 6e 61 6d 65 73 70 61  ackage}..namespa
8180: 63 65 20 64 65 6c 65 74 65 20 62 61 72 20 62 61  ce delete bar ba
8190: 7a 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a  z.    } -body {.
81a0: 09 62 61 72 3a 3a 4f 62 6a 43 75 72 20 6d 65 74  .bar::ObjCur met
81b0: 68 6f 64 31 0a 20 20 20 20 7d 20 2d 72 65 73 75  hod1.    } -resu
81c0: 6c 74 20 63 6f 6e 32 62 61 7a 0a 0a 20 20 20 20  lt con2baz..    
81d0: 23 20 54 65 73 74 20 6d 73 67 63 61 74 2d 31 36  # Test msgcat-16
81e0: 2e 2a 3a 20 63 6f 6d 6d 61 6e 64 20 6d 63 70 61  .*: command mcpa
81f0: 63 6b 61 67 65 6e 61 6d 65 73 70 61 63 65 67 65  ckagenamespacege
8200: 74 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63  t..    test msgc
8210: 61 74 2d 31 36 2e 31 20 7b 6d 63 70 61 63 6b 61  at-16.1 {mcpacka
8220: 67 65 6e 61 6d 65 73 70 61 63 65 67 65 74 20 69  genamespaceget i
8230: 6e 20 6e 61 6d 65 73 70 61 63 65 20 70 72 6f 63  n namespace proc
8240: 65 64 75 72 65 7d 20 2d 62 6f 64 79 20 7b 0a 09  edure} -body {..
8250: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 62  namespace eval b
8260: 61 7a 20 7b 6d 73 67 63 61 74 3a 3a 6d 63 70 61  az {msgcat::mcpa
8270: 63 6b 61 67 65 6e 61 6d 65 73 70 61 63 65 67 65  ckagenamespacege
8280: 74 7d 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74  t}.    } -result
8290: 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a   ::msgcat::test:
82a0: 3a 62 61 7a 0a 0a 20 20 20 20 74 65 73 74 20 6d  :baz..    test m
82b0: 73 67 63 61 74 2d 31 36 2e 32 20 7b 6d 63 70 61  sgcat-16.2 {mcpa
82c0: 63 6b 61 67 65 6e 61 6d 65 73 70 61 63 65 67 65  ckagenamespacege
82d0: 74 20 69 6e 20 63 6c 61 73 73 20 73 65 74 75 70  t in class setup
82e0: 7d 20 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65  } -setup {..name
82f0: 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b  space eval bar {
8300: 0a 09 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20  ..    oo::class 
8310: 63 72 65 61 74 65 20 43 6c 61 73 73 43 75 72 0a  create ClassCur.
8320: 09 20 20 20 20 6f 6f 3a 3a 64 65 66 69 6e 65 20  .    oo::define 
8330: 43 6c 61 73 73 43 75 72 20 76 61 72 69 61 62 6c  ClassCur variabl
8340: 65 20 61 0a 09 7d 0a 20 20 20 20 7d 20 2d 63 6c  e a..}.    } -cl
8350: 65 61 6e 75 70 20 7b 0a 09 6e 61 6d 65 73 70 61  eanup {..namespa
8360: 63 65 20 64 65 6c 65 74 65 20 62 61 72 0a 20 20  ce delete bar.  
8370: 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09 6f 6f 3a    } -body {..oo:
8380: 3a 64 65 66 69 6e 65 20 62 61 72 3a 3a 43 6c 61  :define bar::Cla
8390: 73 73 43 75 72 20 6d 73 67 63 61 74 3a 3a 6d 63  ssCur msgcat::mc
83a0: 70 61 63 6b 61 67 65 6e 61 6d 65 73 70 61 63 65  packagenamespace
83b0: 67 65 74 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  get.    } -resul
83c0: 74 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74  t ::msgcat::test
83d0: 3a 3a 62 61 72 0a 0a 20 20 20 20 74 65 73 74 20  ::bar..    test 
83e0: 6d 73 67 63 61 74 2d 31 36 2e 33 20 7b 6d 63 70  msgcat-16.3 {mcp
83f0: 61 63 6b 61 67 65 6e 61 6d 65 73 70 61 63 65 67  ackagenamespaceg
8400: 65 74 20 69 6e 20 63 6c 61 73 73 7d 20 2d 73 65  et in class} -se
8410: 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65  tup {..namespace
8420: 20 65 76 61 6c 20 62 61 72 20 7b 0a 09 20 20 20   eval bar {..   
8430: 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74   oo::class creat
8440: 65 20 43 6c 61 73 73 43 75 72 0a 09 20 20 20 20  e ClassCur..    
8450: 6f 6f 3a 3a 64 65 66 69 6e 65 20 43 6c 61 73 73  oo::define Class
8460: 43 75 72 20 6d 65 74 68 6f 64 20 6d 65 74 68 6f  Cur method metho
8470: 64 31 20 7b 7d 20 7b 6d 73 67 63 61 74 3a 3a 6d  d1 {} {msgcat::m
8480: 63 70 61 63 6b 61 67 65 6e 61 6d 65 73 70 61 63  cpackagenamespac
8490: 65 67 65 74 7d 0a 09 7d 0a 09 6e 61 6d 65 73 70  eget}..}..namesp
84a0: 61 63 65 20 65 76 61 6c 20 62 61 7a 20 7b 0a 20  ace eval baz {. 
84b0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 4f             set O
84c0: 62 6a 43 75 72 20 5b 3a 3a 6d 73 67 63 61 74 3a  bjCur [::msgcat:
84d0: 3a 74 65 73 74 3a 3a 62 61 72 3a 3a 43 6c 61 73  :test::bar::Clas
84e0: 73 43 75 72 20 6e 65 77 5d 0a 09 7d 0a 20 20 20  sCur new]..}.   
84f0: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6e   } -cleanup {..n
8500: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
8510: 62 61 72 20 62 61 7a 0a 20 20 20 20 7d 20 2d 62  bar baz.    } -b
8520: 6f 64 79 20 7b 0a 09 24 62 61 7a 3a 3a 4f 62 6a  ody {..$baz::Obj
8530: 43 75 72 20 6d 65 74 68 6f 64 31 0a 20 20 20 20  Cur method1.    
8540: 7d 20 2d 72 65 73 75 6c 74 20 3a 3a 6d 73 67 63  } -result ::msgc
8550: 61 74 3a 3a 74 65 73 74 3a 3a 62 61 72 0a 0a 20  at::test::bar.. 
8560: 20 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31     test msgcat-1
8570: 36 2e 34 20 7b 6d 63 70 61 63 6b 61 67 65 6e 61  6.4 {mcpackagena
8580: 6d 65 73 70 61 63 65 67 65 74 20 69 6e 20 63 6c  mespaceget in cl
8590: 61 73 73 6c 65 73 73 20 6f 62 6a 65 63 74 7d 20  assless object} 
85a0: 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65 73 70  -setup {..namesp
85b0: 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b 0a 09  ace eval bar {..
85c0: 20 20 20 20 6f 6f 3a 3a 6f 62 6a 65 63 74 20 63      oo::object c
85d0: 72 65 61 74 65 20 4f 62 6a 43 75 72 0a 09 20 20  reate ObjCur..  
85e0: 20 20 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20    oo::objdefine 
85f0: 4f 62 6a 43 75 72 20 6d 65 74 68 6f 64 20 6d 65  ObjCur method me
8600: 74 68 6f 64 31 20 7b 7d 20 7b 6d 73 67 63 61 74  thod1 {} {msgcat
8610: 3a 3a 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65 73  ::mcpackagenames
8620: 70 61 63 65 67 65 74 7d 0a 09 7d 0a 20 20 20 20  paceget}..}.    
8630: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 09 6e 61  } -cleanup {..na
8640: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 62  mespace delete b
8650: 61 72 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b  ar.    } -body {
8660: 0a 09 62 61 72 3a 3a 4f 62 6a 43 75 72 20 6d 65  ..bar::ObjCur me
8670: 74 68 6f 64 31 0a 20 20 20 20 7d 20 2d 72 65 73  thod1.    } -res
8680: 75 6c 74 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65  ult ::msgcat::te
8690: 73 74 3a 3a 62 61 72 0a 0a 20 20 20 20 74 65 73  st::bar..    tes
86a0: 74 20 6d 73 67 63 61 74 2d 31 36 2e 35 5c 0a 20  t msgcat-16.5\. 
86b0: 20 20 20 7b 6d 63 70 61 63 6b 61 67 65 6e 61 6d     {mcpackagenam
86c0: 65 73 70 61 63 65 67 65 74 20 69 6e 20 63 6c 61  espaceget in cla
86d0: 73 73 6c 65 73 73 20 6f 62 6a 65 63 74 20 77 69  ssless object wi
86e0: 74 68 20 65 78 70 6c 69 63 69 74 65 20 6e 61 6d  th explicite nam
86f0: 65 73 70 61 63 65 20 65 76 61 6c 7d 5c 0a 20 20  espace eval}\.  
8700: 20 20 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d 65    -setup {..name
8710: 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20 7b  space eval bar {
8720: 0a 09 20 20 20 20 6f 6f 3a 3a 6f 62 6a 65 63 74  ..    oo::object
8730: 20 63 72 65 61 74 65 20 4f 62 6a 43 75 72 0a 09   create ObjCur..
8740: 20 20 20 20 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e      oo::objdefin
8750: 65 20 4f 62 6a 43 75 72 20 6d 65 74 68 6f 64 20  e ObjCur method 
8760: 6d 65 74 68 6f 64 31 20 7b 7d 20 7b 0a 09 09 6e  method1 {} {...n
8770: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a  amespace eval ::
8780: 6d 73 67 63 61 74 3a 3a 74 65 73 74 3a 3a 62 61  msgcat::test::ba
8790: 7a 20 7b 0a 09 09 20 20 20 20 6d 73 67 63 61 74  z {...    msgcat
87a0: 3a 3a 6d 63 70 61 63 6b 61 67 65 6e 61 6d 65 73  ::mcpackagenames
87b0: 70 61 63 65 67 65 74 0a 09 09 7d 0a 09 20 20 20  paceget...}..   
87c0: 20 7d 0a 09 7d 0a 20 20 20 20 7d 20 2d 63 6c 65   }..}.    } -cle
87d0: 61 6e 75 70 20 7b 0a 09 6e 61 6d 65 73 70 61 63  anup {..namespac
87e0: 65 20 64 65 6c 65 74 65 20 62 61 72 20 62 61 7a  e delete bar baz
87f0: 0a 20 20 20 20 7d 20 2d 62 6f 64 79 20 7b 0a 09  .    } -body {..
8800: 62 61 72 3a 3a 4f 62 6a 43 75 72 20 6d 65 74 68  bar::ObjCur meth
8810: 6f 64 31 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  od1.    } -resul
8820: 74 20 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74  t ::msgcat::test
8830: 3a 3a 62 61 7a 0a 0a 0c 0a 20 20 20 20 23 20 54  ::baz....    # T
8840: 65 73 74 20 6d 73 67 63 61 74 2d 31 37 2e 2a 3a  est msgcat-17.*:
8850: 20 6d 63 6e 20 63 6f 6d 6d 61 6e 64 0a 0a 20 20   mcn command..  
8860: 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 37    test msgcat-17
8870: 2e 31 20 7b 6d 63 6e 20 6e 6f 20 70 61 72 61 6d  .1 {mcn no param
8880: 65 74 65 72 73 7d 20 2d 62 6f 64 79 20 7b 0a 09  eters} -body {..
8890: 6d 63 6e 0a 20 20 20 20 7d 20 2d 72 65 74 75 72  mcn.    } -retur
88a0: 6e 43 6f 64 65 73 20 31 5c 0a 20 20 20 20 2d 72  nCodes 1\.    -r
88b0: 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61  esult {wrong # a
88c0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22  rgs: should be "
88d0: 6d 63 6e 20 6e 73 20 73 72 63 20 3f 61 72 67 20  mcn ns src ?arg 
88e0: 2e 2e 2e 3f 22 7d 0a 0a 20 20 20 20 74 65 73 74  ...?"}..    test
88f0: 20 6d 73 67 63 61 74 2d 31 37 2e 32 20 7b 6d 63   msgcat-17.2 {mc
8900: 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 09 6e 61 6d  n} -setup {..nam
8910: 65 73 70 61 63 65 20 65 76 61 6c 20 62 61 72 20  espace eval bar 
8920: 7b 3a 3a 6d 73 67 63 61 74 3a 3a 6d 63 73 65 74  {::msgcat::mcset
8930: 20 66 6f 6f 5f 42 41 52 20 63 6f 6e 31 20 63 6f   foo_BAR con1 co
8940: 6e 31 62 61 72 7d 0a 09 76 61 72 69 61 62 6c 65  n1bar}..variable
8950: 20 6c 6f 63 61 6c 65 20 5b 6d 63 6c 6f 63 61 6c   locale [mclocal
8960: 65 5d 0a 09 6d 63 6c 6f 63 61 6c 65 20 66 6f 6f  e]..mclocale foo
8970: 5f 42 41 52 0a 20 20 20 20 7d 20 2d 63 6c 65 61  _BAR.    } -clea
8980: 6e 75 70 20 7b 0a 09 6d 63 6c 6f 63 61 6c 65 20  nup {..mclocale 
8990: 24 6c 6f 63 61 6c 65 0a 20 20 20 20 7d 20 2d 62  $locale.    } -b
89a0: 6f 64 79 20 7b 0a 09 3a 3a 6d 73 67 63 61 74 3a  ody {..::msgcat:
89b0: 3a 6d 63 6e 20 5b 6e 61 6d 65 73 70 61 63 65 20  :mcn [namespace 
89c0: 63 75 72 72 65 6e 74 5d 3a 3a 62 61 72 20 63 6f  current]::bar co
89d0: 6e 31 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74  n1.    } -result
89e0: 20 63 6f 6e 31 62 61 72 0a 0a 0c 0a 20 20 20 20   con1bar....    
89f0: 69 6e 74 65 72 70 20 62 67 65 72 72 6f 72 20 7b  interp bgerror {
8a00: 7d 20 24 62 67 65 72 72 6f 72 73 61 76 65 64 0a  } $bgerrorsaved.
8a10: 0a 20 20 20 20 23 20 54 65 73 74 73 20 6d 73 67  .    # Tests msg
8a20: 63 61 74 2d 31 38 2e 2a 3a 20 5b 6d 63 75 74 69  cat-18.*: [mcuti
8a30: 6c 5d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67  l]..    test msg
8a40: 63 61 74 2d 31 38 2e 31 20 7b 6d 63 75 74 69 6c  cat-18.1 {mcutil
8a50: 20 2d 20 6e 6f 20 61 72 67 75 6d 65 6e 74 7d 20   - no argument} 
8a60: 2d 62 6f 64 79 20 7b 0a 09 6d 63 75 74 69 6c 0a  -body {..mcutil.
8a70: 20 20 20 20 7d 20 2d 72 65 74 75 72 6e 43 6f 64      } -returnCod
8a80: 65 73 20 31 5c 0a 20 20 20 20 2d 72 65 73 75 6c  es 1\.    -resul
8a90: 74 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  t {wrong # args:
8aa0: 20 73 68 6f 75 6c 64 20 62 65 20 22 6d 63 75 74   should be "mcut
8ab0: 69 6c 20 73 75 62 63 6f 6d 6d 61 6e 64 20 3f 61  il subcommand ?a
8ac0: 72 67 20 2e 2e 2e 3f 22 7d 0a 0a 20 20 20 20 74  rg ...?"}..    t
8ad0: 65 73 74 20 6d 73 67 63 61 74 2d 31 38 2e 32 20  est msgcat-18.2 
8ae0: 7b 6d 63 75 74 69 6c 20 2d 20 77 72 6f 6e 67 20  {mcutil - wrong 
8af0: 61 72 67 75 6d 65 6e 74 7d 20 2d 62 6f 64 79 20  argument} -body 
8b00: 7b 0a 09 6d 63 75 74 69 6c 20 6a 75 6e 6b 0a 20  {..mcutil junk. 
8b10: 20 20 20 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65     } -returnCode
8b20: 73 20 31 5c 0a 20 20 20 20 2d 72 65 73 75 6c 74  s 1\.    -result
8b30: 20 7b 75 6e 6b 6e 6f 77 6e 20 73 75 62 63 6f 6d   {unknown subcom
8b40: 6d 61 6e 64 20 22 6a 75 6e 6b 22 3a 20 6d 75 73  mand "junk": mus
8b50: 74 20 62 65 20 67 65 74 70 72 65 66 65 72 65 6e  t be getpreferen
8b60: 63 65 73 2c 20 6f 72 20 67 65 74 73 79 73 74 65  ces, or getsyste
8b70: 6d 6c 6f 63 61 6c 65 7d 0a 0a 20 20 20 20 74 65  mlocale}..    te
8b80: 73 74 20 6d 73 67 63 61 74 2d 31 38 2e 33 20 7b  st msgcat-18.3 {
8b90: 6d 63 75 74 69 6c 20 2d 20 70 61 72 74 69 61 6c  mcutil - partial
8ba0: 20 61 72 67 75 6d 65 6e 74 7d 20 2d 62 6f 64 79   argument} -body
8bb0: 20 7b 0a 09 6d 63 75 74 69 6c 20 67 65 74 73 79   {..mcutil getsy
8bc0: 73 74 65 6d 0a 20 20 20 20 7d 20 2d 72 65 74 75  stem.    } -retu
8bd0: 72 6e 43 6f 64 65 73 20 31 5c 0a 20 20 20 20 2d  rnCodes 1\.    -
8be0: 72 65 73 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20  result {unknown 
8bf0: 73 75 62 63 6f 6d 6d 61 6e 64 20 22 67 65 74 73  subcommand "gets
8c00: 79 73 74 65 6d 22 3a 20 6d 75 73 74 20 62 65 20  ystem": must be 
8c10: 67 65 74 70 72 65 66 65 72 65 6e 63 65 73 2c 20  getpreferences, 
8c20: 6f 72 20 67 65 74 73 79 73 74 65 6d 6c 6f 63 61  or getsystemloca
8c30: 6c 65 7d 0a 0a 20 20 20 20 74 65 73 74 20 6d 73  le}..    test ms
8c40: 67 63 61 74 2d 31 38 2e 34 20 7b 6d 63 75 74 69  gcat-18.4 {mcuti
8c50: 6c 20 67 65 74 70 72 65 66 65 72 65 6e 63 65 73  l getpreferences
8c60: 20 2d 20 6e 6f 20 61 72 67 75 6d 65 6e 74 7d 20   - no argument} 
8c70: 2d 62 6f 64 79 20 7b 0a 09 6d 63 75 74 69 6c 20  -body {..mcutil 
8c80: 67 65 74 70 72 65 66 65 72 65 6e 63 65 73 0a 20  getpreferences. 
8c90: 20 20 20 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65     } -returnCode
8ca0: 73 20 31 5c 0a 20 20 20 20 2d 72 65 73 75 6c 74  s 1\.    -result
8cb0: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   {wrong # args: 
8cc0: 73 68 6f 75 6c 64 20 62 65 20 22 6d 63 75 74 69  should be "mcuti
8cd0: 6c 20 67 65 74 70 72 65 66 65 72 65 6e 63 65 73  l getpreferences
8ce0: 20 6c 6f 63 61 6c 65 22 7d 0a 0a 20 20 20 20 74   locale"}..    t
8cf0: 65 73 74 20 6d 73 67 63 61 74 2d 31 38 2e 35 20  est msgcat-18.5 
8d00: 7b 6d 63 75 74 69 6c 20 67 65 74 70 72 65 66 65  {mcutil getprefe
8d10: 72 65 6e 63 65 73 20 2d 20 44 45 5f 64 65 7d 20  rences - DE_de} 
8d20: 2d 62 6f 64 79 20 7b 0a 09 6d 63 75 74 69 6c 20  -body {..mcutil 
8d30: 67 65 74 70 72 65 66 65 72 65 6e 63 65 73 20 44  getpreferences D
8d40: 45 5f 64 65 0a 20 20 20 20 7d 20 2d 72 65 73 75  E_de.    } -resu
8d50: 6c 74 20 7b 64 65 5f 64 65 20 64 65 20 7b 7d 7d  lt {de_de de {}}
8d60: 0a 0a 20 20 20 20 74 65 73 74 20 6d 73 67 63 61  ..    test msgca
8d70: 74 2d 31 38 2e 36 20 7b 6d 63 75 74 69 6c 20 67  t-18.6 {mcutil g
8d80: 65 74 73 79 73 74 65 6d 6c 6f 63 61 6c 65 20 2d  etsystemlocale -
8d90: 20 77 72 6f 6e 67 20 61 72 67 75 6d 65 6e 74 7d   wrong argument}
8da0: 20 2d 62 6f 64 79 20 7b 0a 09 6d 63 75 74 69 6c   -body {..mcutil
8db0: 20 67 65 74 73 79 73 74 65 6d 6c 6f 63 61 6c 65   getsystemlocale
8dc0: 20 44 45 5f 64 65 0a 20 20 20 20 7d 20 2d 72 65   DE_de.    } -re
8dd0: 74 75 72 6e 43 6f 64 65 73 20 31 5c 0a 20 20 20  turnCodes 1\.   
8de0: 20 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20   -result {wrong 
8df0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
8e00: 65 20 22 6d 63 75 74 69 6c 20 67 65 74 73 79 73  e "mcutil getsys
8e10: 74 65 6d 6c 6f 63 61 6c 65 22 7d 0a 0a 20 20 20  temlocale"}..   
8e20: 20 23 20 54 68 65 20 72 65 73 75 6c 74 20 69 73   # The result is
8e30: 20 73 79 73 74 65 6d 20 64 65 70 65 6e 64 65 6e   system dependen
8e40: 74 0a 20 20 20 20 23 20 53 6f 20 6a 75 73 74 20  t.    # So just 
8e50: 74 65 73 74 20 69 66 20 69 74 20 72 75 6e 73 0a  test if it runs.
8e60: 20 20 20 20 23 20 54 68 65 20 65 6e 76 69 72 6f      # The enviro
8e70: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 76  nment variable v
8e80: 65 72 73 69 6f 6e 20 77 61 73 20 74 65 73 74 20  ersion was test 
8e90: 77 69 74 68 20 74 65 73 74 20 30 2e 78 0a 20 20  with test 0.x.  
8ea0: 20 20 74 65 73 74 20 6d 73 67 63 61 74 2d 31 38    test msgcat-18
8eb0: 2e 37 20 7b 6d 63 75 74 69 6c 20 67 65 74 73 79  .7 {mcutil getsy
8ec0: 73 74 65 6d 6c 6f 63 61 6c 65 7d 20 2d 62 6f 64  stemlocale} -bod
8ed0: 79 20 7b 0a 09 6d 63 75 74 69 6c 20 67 65 74 73  y {..mcutil gets
8ee0: 79 73 74 65 6d 6c 6f 63 61 6c 65 0a 09 73 65 74  ystemlocale..set
8ef0: 20 6f 6b 20 6f 6b 0a 20 20 20 20 7d 20 2d 72 65   ok ok.    } -re
8f00: 73 75 6c 74 20 7b 6f 6b 7d 0a 0a 0a 20 20 20 20  sult {ok}...    
8f10: 63 6c 65 61 6e 75 70 54 65 73 74 73 0a 7d 0a 6e  cleanupTests.}.n
8f20: 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20  amespace delete 
8f30: 3a 3a 6d 73 67 63 61 74 3a 3a 74 65 73 74 0a 72  ::msgcat::test.r
8f40: 65 74 75 72 6e 0a 0a 23 20 4c 6f 63 61 6c 20 56  eturn..# Local V
8f50: 61 72 69 61 62 6c 65 73 3a 0a 23 20 6d 6f 64 65  ariables:.# mode
8f60: 3a 20 74 63 6c 0a 23 20 45 6e 64 3a 0a           : tcl.# End:.