tDOM

Hex Artifact Content
Login

Hex Artifact Content

Artifact 3e754eb159b720ea82e137046a7722c720d6918ccfe7479fc9aea32bc3075a12:


0000: 23 20 46 65 61 74 75 72 65 73 20 63 6f 76 65 72  # Features cover
0010: 65 64 3a 20 69 6e 74 65 72 6e 61 74 69 6f 6e 61  ed: internationa
0020: 6c 20 69 73 73 75 65 73 20 0a 23 0a 23 20 43 6f  l issues .#.# Co
0030: 70 79 72 69 67 68 74 20 28 63 29 20 32 30 30 32  pyright (c) 2002
0040: 20 52 6f 6c 66 20 41 64 65 2e 0a 23 0a 23 20 52   Rolf Ade..#.# R
0050: 43 53 3a 20 40 28 23 29 20 24 49 64 24 0a 0a 73  CS: @(#) $Id$..s
0060: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
0070: 20 5b 66 69 6c 65 20 64 69 72 20 5b 69 6e 66 6f   [file dir [info
0080: 20 73 63 72 69 70 74 5d 5d 20 6c 6f 61 64 74 64   script]] loadtd
0090: 6f 6d 2e 74 63 6c 5d 0a 0a 74 65 73 74 43 6f 6e  om.tcl]..testCon
00a0: 73 74 72 61 69 6e 74 20 62 65 79 6f 6e 64 42 4d  straint beyondBM
00b0: 50 20 5b 65 78 70 72 20 7b 5b 64 6f 6d 20 66 65  P [expr {[dom fe
00c0: 61 74 75 72 65 69 6e 66 6f 20 54 43 4c 5f 55 54  atureinfo TCL_UT
00d0: 46 5f 4d 41 58 5d 20 3e 20 33 7d 5d 0a 74 65 73  F_MAX] > 3}].tes
00e0: 74 43 6f 6e 73 74 72 61 69 6e 74 20 38 2e 36 20  tConstraint 8.6 
00f0: 5b 70 61 63 6b 61 67 65 20 76 73 61 74 69 73 66  [package vsatisf
0100: 69 65 73 20 5b 70 61 63 6b 61 67 65 20 70 72 65  ies [package pre
0110: 73 65 6e 74 20 54 63 6c 5d 20 38 2e 36 5d 0a 0a  sent Tcl] 8.6]..
0120: 74 65 73 74 20 69 31 38 6e 2d 31 2e 31 20 7b 70  test i18n-1.1 {p
0130: 61 72 73 65 20 75 74 66 2d 38 20 73 74 72 69 6e  arse utf-8 strin
0140: 67 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 75 73  g} {.    set rus
0150: 73 69 61 6e 20 22 5c 75 30 34 33 30 5c 75 30 34  sian "\u0430\u04
0160: 33 31 5c 75 30 34 33 32 5c 75 30 34 33 33 5c 75  31\u0432\u0433\u
0170: 30 34 33 34 5c 75 30 34 33 35 5c 75 30 34 33 36  0434\u0435\u0436
0180: 5c 75 30 34 33 37 5c 75 30 34 33 38 5c 75 30 34  \u0437\u0438\u04
0190: 33 39 22 0a 20 20 20 20 73 65 74 20 64 6f 63 20  39".    set doc 
01a0: 5b 64 6f 6d 20 70 61 72 73 65 20 22 3c 74 65 73  [dom parse "<tes
01b0: 74 3e 24 72 75 73 73 69 61 6e 3c 2f 74 65 73 74  t>$russian</test
01c0: 3e 22 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f 74  >"].    set root
01d0: 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45   [$doc documentE
01e0: 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 20  lement].    set 
01f0: 74 65 78 74 20 5b 24 72 6f 6f 74 20 74 65 78 74  text [$root text
0200: 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74  ].    $doc delet
0210: 65 0a 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6d  e.    string com
0220: 70 61 72 65 20 24 74 65 78 74 20 22 5c 75 30 34  pare $text "\u04
0230: 33 30 5c 75 30 34 33 31 5c 75 30 34 33 32 5c 75  30\u0431\u0432\u
0240: 30 34 33 33 5c 75 30 34 33 34 5c 75 30 34 33 35  0433\u0434\u0435
0250: 5c 75 30 34 33 36 5c 75 30 34 33 37 5c 75 30 34  \u0436\u0437\u04
0260: 33 38 5c 75 30 34 33 39 22 0a 7d 20 7b 30 7d 0a  38\u0439".} {0}.
0270: 0a 74 65 73 74 20 69 31 38 6e 2d 31 2e 32 20 7b  .test i18n-1.2 {
0280: 70 61 72 73 65 20 75 74 66 2d 38 20 63 68 61 6e  parse utf-8 chan
0290: 6e 65 6c 7d 20 7b 0a 20 20 20 20 73 65 74 20 66  nel} {.    set f
02a0: 64 20 5b 6f 70 65 6e 20 5b 66 69 6c 65 20 6a 6f  d [open [file jo
02b0: 69 6e 20 5b 70 77 64 5d 20 5b 66 69 6c 65 20 64  in [pwd] [file d
02c0: 69 72 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d  ir [info script]
02d0: 5d 20 64 61 74 61 2f 69 31 38 6e 5f 31 2e 78 6d  ] data/i18n_1.xm
02e0: 6c 5d 5d 0a 20 20 20 20 66 63 6f 6e 66 69 67 75  l]].    fconfigu
02f0: 72 65 20 24 66 64 20 2d 65 6e 63 6f 64 69 6e 67  re $fd -encoding
0300: 20 75 74 66 2d 38 0a 20 20 20 20 73 65 74 20 64   utf-8.    set d
0310: 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 63  oc [dom parse -c
0320: 68 61 6e 6e 65 6c 20 24 66 64 5d 0a 20 20 20 20  hannel $fd].    
0330: 63 6c 6f 73 65 20 24 66 64 0a 20 20 20 20 73 65  close $fd.    se
0340: 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63  t root [$doc doc
0350: 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20  umentElement].  
0360: 20 20 73 65 74 20 74 65 78 74 20 5b 24 72 6f 6f    set text [$roo
0370: 74 20 74 65 78 74 5d 0a 20 20 20 20 24 64 6f 63  t text].    $doc
0380: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 74 72 69   delete.    stri
0390: 6e 67 20 63 6f 6d 70 61 72 65 20 24 74 65 78 74  ng compare $text
03a0: 20 22 5c 75 30 34 33 30 5c 75 30 34 33 31 5c 75   "\u0430\u0431\u
03b0: 30 34 33 32 5c 75 30 34 33 33 5c 75 30 34 33 34  0432\u0433\u0434
03c0: 5c 75 30 34 33 35 5c 75 30 34 33 36 5c 75 30 34  \u0435\u0436\u04
03d0: 33 37 5c 75 30 34 33 38 5c 75 30 34 33 39 22 0a  37\u0438\u0439".
03e0: 7d 20 7b 30 7d 0a 20 20 20 20 0a 74 65 73 74 20  } {0}.    .test 
03f0: 69 31 38 6e 2d 31 2e 33 20 7b 70 61 72 73 65 20  i18n-1.3 {parse 
0400: 75 74 66 2d 38 20 72 65 61 64 46 69 6c 65 7d 20  utf-8 readFile} 
0410: 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64  {.    set doc [d
0420: 6f 6d 20 70 61 72 73 65 20 5b 3a 3a 74 64 6f 6d  om parse [::tdom
0430: 3a 3a 78 6d 6c 52 65 61 64 46 69 6c 65 20 5b 66  ::xmlReadFile [f
0440: 69 6c 65 20 6a 6f 69 6e 20 5b 70 77 64 5d 20 5b  ile join [pwd] [
0450: 66 69 6c 65 20 64 69 72 20 5b 69 6e 66 6f 20 73  file dir [info s
0460: 63 72 69 70 74 5d 5d 20 64 61 74 61 2f 69 31 38  cript]] data/i18
0470: 6e 5f 31 2e 78 6d 6c 5d 5d 5d 0a 20 20 20 20 73  n_1.xml]]].    s
0480: 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f  et root [$doc do
0490: 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20  cumentElement]. 
04a0: 20 20 20 73 65 74 20 74 65 78 74 20 5b 24 72 6f     set text [$ro
04b0: 6f 74 20 74 65 78 74 5d 0a 20 20 20 20 24 64 6f  ot text].    $do
04c0: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 74 72  c delete.    str
04d0: 69 6e 67 20 63 6f 6d 70 61 72 65 20 24 74 65 78  ing compare $tex
04e0: 74 20 22 5c 75 30 34 33 30 5c 75 30 34 33 31 5c  t "\u0430\u0431\
04f0: 75 30 34 33 32 5c 75 30 34 33 33 5c 75 30 34 33  u0432\u0433\u043
0500: 34 5c 75 30 34 33 35 5c 75 30 34 33 36 5c 75 30  4\u0435\u0436\u0
0510: 34 33 37 5c 75 30 34 33 38 5c 75 30 34 33 39 22  437\u0438\u0439"
0520: 0a 7d 20 7b 30 7d 0a 20 20 20 20 0a 74 65 73 74  .} {0}.    .test
0530: 20 69 31 38 6e 2d 31 2e 34 20 7b 70 63 64 61 74   i18n-1.4 {pcdat
0540: 61 20 6f 75 74 73 69 64 65 20 42 4d 50 7d 20 2d  a outside BMP} -
0550: 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 74 20 64  body {.    set d
0560: 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 22 3c  oc [dom parse "<
0570: 64 6f 63 3e 26 23 78 31 46 34 36 45 3b 26 23 78  doc>&#x1F46E;&#x
0580: 31 46 34 37 45 3b 26 23 78 31 46 34 39 34 3b 3c  1F47E;&#x1F494;<
0590: 2f 64 6f 63 3e 22 5d 0a 20 20 20 20 73 65 74 20  /doc>"].    set 
05a0: 72 65 73 75 6c 74 20 5b 24 64 6f 63 20 61 73 58  result [$doc asX
05b0: 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 20  ML -indent none 
05c0: 2d 65 73 63 61 70 65 4e 6f 6e 41 53 43 49 49 5d  -escapeNonASCII]
05d0: 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65  .    $doc delete
05e0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a  .    set result.
05f0: 7d 20 2d 72 65 73 75 6c 74 20 22 3c 64 6f 63 3e  } -result "<doc>
0600: 26 23 31 32 38 31 31 30 3b 26 23 31 32 38 31 32  &#128110;&#12812
0610: 36 3b 26 23 31 32 38 31 34 38 3b 3c 2f 64 6f 63  6;&#128148;</doc
0620: 3e 22 0a 0a 74 65 73 74 20 69 31 38 6e 2d 31 2e  >"..test i18n-1.
0630: 35 20 7b 70 63 64 61 74 61 20 6f 75 74 73 69 64  5 {pcdata outsid
0640: 65 20 42 4d 50 7d 20 2d 62 6f 64 79 20 7b 0a 20  e BMP} -body {. 
0650: 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20     set doc [dom 
0660: 70 61 72 73 65 20 22 3c 64 6f 63 3e 26 23 78 31  parse "<doc>&#x1
0670: 46 34 36 45 3b 26 23 78 31 46 34 37 45 3b 26 23  F46E;&#x1F47E;&#
0680: 78 31 46 34 39 34 3b 3c 2f 64 6f 63 3e 22 5d 0a  x1F494;</doc>"].
0690: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
06a0: 24 64 6f 63 20 73 65 6c 65 63 74 4e 6f 64 65 73  $doc selectNodes
06b0: 20 73 74 72 69 6e 67 2d 6c 65 6e 67 74 68 28 2f   string-length(/
06c0: 64 6f 63 29 5d 0a 20 20 20 20 24 64 6f 63 20 64  doc)].    $doc d
06d0: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65  elete.    set re
06e0: 73 75 6c 74 0a 7d 20 2d 72 65 73 75 6c 74 20 33  sult.} -result 3
06f0: 0a 0a 74 65 73 74 20 69 31 38 6e 2d 31 2e 36 20  ..test i18n-1.6 
0700: 7b 70 63 64 61 74 61 20 6f 75 74 73 69 64 65 20  {pcdata outside 
0710: 42 4d 50 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  BMP} -constraint
0720: 73 20 7b 0a 20 20 20 20 38 2e 36 0a 20 20 20 20  s {.    8.6.    
0730: 62 65 79 6f 6e 64 42 4d 50 0a 7d 20 2d 62 6f 64  beyondBMP.} -bod
0740: 79 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20  y {.    set doc 
0750: 5b 64 6f 6d 20 70 61 72 73 65 20 22 3c 64 6f 63  [dom parse "<doc
0760: 3e 5c 55 31 46 34 36 45 5c 55 31 46 34 37 45 5c  >\U1F46E\U1F47E\
0770: 55 31 46 34 39 34 3c 2f 64 6f 63 3e 22 5d 0a 20  U1F494</doc>"]. 
0780: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24     set result [$
0790: 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e  doc asXML -inden
07a0: 74 20 6e 6f 6e 65 20 2d 65 73 63 61 70 65 4e 6f  t none -escapeNo
07b0: 6e 41 53 43 49 49 5d 0a 20 20 20 20 24 64 6f 63  nASCII].    $doc
07c0: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20   delete.    set 
07d0: 72 65 73 75 6c 74 0a 7d 20 2d 72 65 73 75 6c 74  result.} -result
07e0: 20 22 3c 64 6f 63 3e 26 23 31 32 38 31 31 30 3b   "<doc>&#128110;
07f0: 26 23 31 32 38 31 32 36 3b 26 23 31 32 38 31 34  &#128126;&#12814
0800: 38 3b 3c 2f 64 6f 63 3e 22 0a 0a 74 65 73 74 20  8;</doc>"..test 
0810: 69 31 38 6e 2d 31 2e 37 20 7b 70 63 64 61 74 61  i18n-1.7 {pcdata
0820: 20 6f 75 74 73 69 64 65 20 42 4d 50 7d 20 2d 62   outside BMP} -b
0830: 6f 64 79 20 7b 0a 20 20 20 20 73 65 74 20 64 6f  ody {.    set do
0840: 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 22 3c 64  c [dom parse "<d
0850: 6f 63 3e 26 23 78 31 46 34 36 45 3b 26 23 78 31  oc>&#x1F46E;&#x1
0860: 46 34 37 45 3b 26 23 78 31 46 34 39 34 3b 3c 2f  F47E;&#x1F494;</
0870: 64 6f 63 3e 22 5d 0a 20 20 20 20 73 65 74 20 72  doc>"].    set r
0880: 65 73 75 6c 74 20 5b 64 6f 6d 20 69 73 42 4d 50  esult [dom isBMP
0890: 43 68 61 72 44 61 74 61 20 5b 24 64 6f 63 20 73  CharData [$doc s
08a0: 65 6c 65 63 74 4e 6f 64 65 73 20 73 74 72 69 6e  electNodes strin
08b0: 67 28 2f 64 6f 63 29 5d 5d 0a 20 20 20 20 24 64  g(/doc)]].    $d
08c0: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65  oc delete.    se
08d0: 74 20 72 65 73 75 6c 74 0a 7d 20 2d 72 65 73 75  t result.} -resu
08e0: 6c 74 20 30 0a 0a 74 65 73 74 20 69 31 38 6e 2d  lt 0..test i18n-
08f0: 31 2e 38 20 7b 70 63 64 61 74 61 20 6f 75 74 73  1.8 {pcdata outs
0900: 69 64 65 20 42 4d 50 7d 20 2d 63 6f 6e 73 74 72  ide BMP} -constr
0910: 61 69 6e 74 73 20 7b 0a 20 20 20 20 62 65 79 6f  aints {.    beyo
0920: 6e 64 42 4d 50 0a 20 20 20 20 38 2e 36 0a 7d 20  ndBMP.    8.6.} 
0930: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 74 20  -body {.    set 
0940: 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 22  doc [dom parse "
0950: 3c 64 6f 63 3e 5c 55 31 46 34 36 45 5c 55 31 46  <doc>\U1F46E\U1F
0960: 34 37 45 5c 55 31 46 34 39 34 3c 2f 64 6f 63 3e  47E\U1F494</doc>
0970: 22 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c  "].    set resul
0980: 74 20 5b 24 64 6f 63 20 61 73 58 4d 4c 20 2d 69  t [$doc asXML -i
0990: 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20  ndent none].    
09a0: 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20  $doc delete.    
09b0: 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 2d 72 65  set result.} -re
09c0: 73 75 6c 74 20 22 3c 64 6f 63 3e 26 23 31 32 38  sult "<doc>&#128
09d0: 31 31 30 3b 26 23 31 32 38 31 32 36 3b 26 23 31  110;&#128126;&#1
09e0: 32 38 31 34 38 3b 3c 2f 64 6f 63 3e 22 0a 0a 74  28148;</doc>"..t
09f0: 65 73 74 20 69 31 38 6e 2d 31 2e 31 30 20 7b 70  est i18n-1.10 {p
0a00: 63 64 61 74 61 20 6f 75 74 73 69 64 65 20 75 6e  cdata outside un
0a10: 69 63 6f 64 65 7d 20 2d 62 6f 64 79 20 7b 0a 20  icode} -body {. 
0a20: 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20     set doc [dom 
0a30: 70 61 72 73 65 20 22 3c 64 6f 63 3e 26 23 78 31  parse "<doc>&#x1
0a40: 30 46 46 46 46 3b 3c 2f 64 6f 63 3e 22 5d 0a 20  0FFFF;</doc>"]. 
0a50: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24     set result [$
0a60: 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e  doc asXML -inden
0a70: 74 20 6e 6f 6e 65 20 2d 65 73 63 61 70 65 4e 6f  t none -escapeNo
0a80: 6e 41 53 43 49 49 5d 0a 20 20 20 20 24 64 6f 63  nASCII].    $doc
0a90: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20   delete.    set 
0aa0: 72 65 73 75 6c 74 0a 7d 20 2d 72 65 73 75 6c 74  result.} -result
0ab0: 20 22 3c 64 6f 63 3e 26 23 31 31 31 34 31 31 31   "<doc>&#1114111
0ac0: 3b 3c 2f 64 6f 63 3e 22 0a 0a 74 65 73 74 20 69  ;</doc>"..test i
0ad0: 31 38 6e 2d 31 2e 31 31 20 7b 70 63 64 61 74 61  18n-1.11 {pcdata
0ae0: 20 6f 75 74 73 69 64 65 20 75 6e 69 63 6f 64 65   outside unicode
0af0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65  } -body {.    se
0b00: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  t result [catch 
0b10: 7b 64 6f 6d 20 70 61 72 73 65 20 22 3c 64 6f 63  {dom parse "<doc
0b20: 3e 26 23 78 31 31 30 30 30 30 3b 3c 2f 64 6f 63  >&#x110000;</doc
0b30: 3e 22 7d 20 6d 73 67 5d 0a 20 20 20 20 73 65 74  >"} msg].    set
0b40: 20 6d 73 67 0a 7d 20 2d 6d 61 74 63 68 20 67 6c   msg.} -match gl
0b50: 6f 62 20 2d 72 65 73 75 6c 74 20 22 2a 72 65 66  ob -result "*ref
0b60: 65 72 65 6e 63 65 20 74 6f 20 69 6e 76 61 6c 69  erence to invali
0b70: 64 20 63 68 61 72 61 63 74 65 72 20 6e 75 6d 62  d character numb
0b80: 65 72 2a 22 0a 0a 23 20 63 6c 65 61 6e 75 70 0a  er*"..# cleanup.
0b90: 3a 3a 74 63 6c 74 65 73 74 3a 3a 63 6c 65 61 6e  ::tcltest::clean
0ba0: 75 70 54 65 73 74 73 0a 72 65 74 75 72 6e 0a 0a  upTests.return..