Artifact 5a1dc3bee6353700186d12f0d11b15914849c6be:

  • File tests/cdata.test — part of check-in [87dde9d70b] at 2003-09-16 22:58:15 on branch trunk — Added a few tests related to the new flexibility of the -elementstartcommand, -elementendcommand and -characterdatacommand scripts. (user: rolf size: 7827)

0000: 23 20 46 65 61 74 75 72 65 73 20 63 6f 76 65 72  # Features cover
0010: 65 64 3a 20 20 43 44 41 54 41 20 73 65 63 74 69  ed:  CDATA secti
0020: 6f 6e 73 0a 23 0a 23 20 54 68 69 73 20 66 69 6c  ons.#.# This fil
0030: 65 20 74 65 73 74 73 20 74 68 65 20 70 61 72 73  e tests the pars
0040: 65 72 27 73 20 70 65 72 66 6f 72 6d 61 6e 63 65  er's performance
0050: 20 6f 6e 20 43 44 41 54 41 20 73 65 63 74 69 6f   on CDATA sectio
0060: 6e 73 2e 0a 23 20 53 6f 75 72 63 69 6e 67 20 74  ns..# Sourcing t
0070: 68 69 73 20 66 69 6c 65 20 69 6e 74 6f 20 54 63  his file into Tc
0080: 6c 20 72 75 6e 73 20 74 68 65 20 74 65 73 74 73  l runs the tests
0090: 20 61 6e 64 20 67 65 6e 65 72 61 74 65 73 20 6f   and generates o
00a0: 75 74 70 75 74 0a 23 20 66 6f 72 20 65 72 72 6f  utput.# for erro
00b0: 72 73 2e 20 20 4e 6f 20 6f 75 74 70 75 74 20 6d  rs.  No output m
00c0: 65 61 6e 73 20 6e 6f 20 65 72 72 6f 72 73 20 77  eans no errors w
00d0: 65 72 65 20 66 6f 75 6e 64 2e 0a 23 0a 23 20 43  ere found..#.# C
00e0: 6f 70 79 72 69 67 68 74 20 28 63 29 20 31 39 39  opyright (c) 199
00f0: 38 2d 32 30 30 30 20 5a 76 65 6e 6f 20 50 74 79  8-2000 Zveno Pty
0100: 20 4c 74 64 2e 0a 23 0a 23 20 24 49 64 24 0a 0a   Ltd..#.# $Id$..
0110: 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69  source [file joi
0120: 6e 20 5b 66 69 6c 65 20 64 69 72 20 5b 69 6e 66  n [file dir [inf
0130: 6f 20 73 63 72 69 70 74 5d 5d 20 6c 6f 61 64 74  o script]] loadt
0140: 64 6f 6d 2e 74 63 6c 5d 0a 0a 63 61 74 63 68 20  dom.tcl]..catch 
0150: 7b 75 6e 73 65 74 20 72 65 73 75 6c 74 7d 0a 70  {unset result}.p
0160: 72 6f 63 20 70 63 64 61 74 61 20 64 61 74 61 20  roc pcdata data 
0170: 7b 0a 20 20 20 20 61 70 70 65 6e 64 20 3a 3a 72  {.    append ::r
0180: 65 73 75 6c 74 20 24 64 61 74 61 0a 7d 0a 70 72  esult $data.}.pr
0190: 6f 63 20 45 73 74 61 72 74 20 7b 74 61 67 4e 61  oc Estart {tagNa
01a0: 6d 65 20 61 74 74 72 4c 69 73 74 7d 20 7b 0a 20  me attrList} {. 
01b0: 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 74 61     switch -- $ta
01c0: 67 4e 61 6d 65 20 7b 0a 09 54 65 73 74 20 7b 0a  gName {..Test {.
01d0: 09 7d 0a 09 64 65 66 61 75 6c 74 20 7b 0a 09 20  .}..default {.. 
01e0: 20 20 20 69 6e 63 72 20 3a 3a 65 6c 65 6d 65 6e     incr ::elemen
01f0: 74 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 70 72  t..}.    }.}..pr
0200: 6f 63 20 45 53 74 6f 70 20 74 61 67 6e 61 6d 65  oc EStop tagname
0210: 20 7b 0a 7d 0a 0a 74 65 73 74 20 63 64 61 74 61   {.}..test cdata
0220: 2d 31 2e 31 20 7b 53 69 6d 70 6c 65 20 43 44 41  -1.1 {Simple CDA
0230: 54 41 20 73 65 63 74 69 6f 6e 7d 20 7b 0a 20 20  TA section} {.  
0240: 20 20 73 65 74 20 3a 3a 72 65 73 75 6c 74 20 7b    set ::result {
0250: 7d 0a 20 20 20 20 73 65 74 20 3a 3a 65 6c 65 6d  }.    set ::elem
0260: 65 6e 74 20 30 0a 0a 20 20 20 20 63 61 74 63 68  ent 0..    catch
0270: 20 7b 72 65 6e 61 6d 65 20 78 6d 6c 3a 3a 63 64   {rename xml::cd
0280: 61 74 61 2d 31 2e 31 20 7b 7d 7d 0a 20 20 20 20  ata-1.1 {}}.    
0290: 73 65 74 20 70 61 72 73 65 72 20 5b 78 6d 6c 3a  set parser [xml:
02a0: 3a 70 61 72 73 65 72 20 63 64 61 74 61 2d 31 2e  :parser cdata-1.
02b0: 31 20 5c 0a 09 2d 65 6c 65 6d 65 6e 74 73 74 61  1 \..-elementsta
02c0: 72 74 63 6f 6d 6d 61 6e 64 20 45 73 74 61 72 74  rtcommand Estart
02d0: 20 5c 0a 09 2d 65 6c 65 6d 65 6e 74 65 6e 64 63   \..-elementendc
02e0: 6f 6d 6d 61 6e 64 20 45 53 74 6f 70 20 5c 0a 09  ommand EStop \..
02f0: 2d 63 68 61 72 61 63 74 65 72 64 61 74 61 63 6f  -characterdataco
0300: 6d 6d 61 6e 64 20 70 63 64 61 74 61 5d 0a 20 20  mmand pcdata].  
0310: 20 20 24 70 61 72 73 65 72 20 70 61 72 73 65 20    $parser parse 
0320: 7b 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22  {<?xml version="
0330: 31 2e 30 22 3f 3e 0a 3c 21 44 4f 43 54 59 50 45  1.0"?>.<!DOCTYPE
0340: 20 54 65 73 74 3e 0a 3c 54 65 73 74 3e 3c 21 5b   Test>.<Test><![
0350: 43 44 41 54 41 5b 54 68 69 73 20 69 73 20 43 44  CDATA[This is CD
0360: 41 54 41 5d 5d 3e 3c 2f 54 65 73 74 3e 0a 7d 0a  ATA]]></Test>.}.
0370: 20 20 20 20 6c 69 73 74 20 24 3a 3a 72 65 73 75      list $::resu
0380: 6c 74 20 24 3a 3a 65 6c 65 6d 65 6e 74 0a 7d 20  lt $::element.} 
0390: 7b 7b 54 68 69 73 20 69 73 20 43 44 41 54 41 7d  {{This is CDATA}
03a0: 20 30 7d 0a 0a 74 65 73 74 20 63 64 61 74 61 2d   0}..test cdata-
03b0: 31 2e 32 20 7b 43 44 41 54 41 20 74 65 73 74 20  1.2 {CDATA test 
03c0: 63 6f 6e 74 72 69 62 75 74 65 64 20 62 79 20 52  contributed by R
03d0: 69 63 68 61 72 64 20 45 6d 62 65 72 73 6f 6e 20  ichard Emberson 
03e0: 28 65 6d 62 65 72 73 6f 6e 40 6e 65 74 69 6e 74  (emberson@netint
03f0: 6f 75 63 68 2e 63 6f 6d 29 7d 20 7b 0a 20 20 20  ouch.com)} {.   
0400: 20 73 65 74 20 3a 3a 72 65 73 75 6c 74 20 7b 7d   set ::result {}
0410: 0a 20 20 20 20 73 65 74 20 3a 3a 65 6c 65 6d 65  .    set ::eleme
0420: 6e 74 20 30 0a 0a 20 20 20 20 63 61 74 63 68 20  nt 0..    catch 
0430: 7b 72 65 6e 61 6d 65 20 78 6d 6c 3a 3a 63 64 61  {rename xml::cda
0440: 74 61 2d 31 2e 32 20 7b 7d 7d 0a 20 20 20 20 73  ta-1.2 {}}.    s
0450: 65 74 20 70 61 72 73 65 72 20 5b 78 6d 6c 3a 3a  et parser [xml::
0460: 70 61 72 73 65 72 20 63 64 61 74 61 2d 31 2e 32  parser cdata-1.2
0470: 20 5c 0a 09 2d 65 6c 65 6d 65 6e 74 73 74 61 72   \..-elementstar
0480: 74 63 6f 6d 6d 61 6e 64 20 45 73 74 61 72 74 20  tcommand Estart 
0490: 5c 0a 09 2d 65 6c 65 6d 65 6e 74 65 6e 64 63 6f  \..-elementendco
04a0: 6d 6d 61 6e 64 20 45 53 74 6f 70 20 5c 0a 09 2d  mmand EStop \..-
04b0: 63 68 61 72 61 63 74 65 72 64 61 74 61 63 6f 6d  characterdatacom
04c0: 6d 61 6e 64 20 70 63 64 61 74 61 5d 0a 20 20 20  mand pcdata].   
04d0: 20 24 70 61 72 73 65 72 20 70 61 72 73 65 20 7b   $parser parse {
04e0: 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31  <?xml version="1
04f0: 2e 30 22 3f 3e 0a 20 20 3c 54 4f 50 3e 0a 20 20  .0"?>.  <TOP>.  
0500: 20 20 3c 21 5b 43 44 41 54 41 5b 39 32 38 38 30    <![CDATA[92880
0510: 36 38 37 31 30 33 35 5d 5d 3e 0a 20 20 3c 2f 54  6871035]]>.  </T
0520: 4f 50 3e 0a 7d 0a 20 20 20 20 6c 69 73 74 20 24  OP>.}.    list $
0530: 3a 3a 72 65 73 75 6c 74 20 24 3a 3a 65 6c 65 6d  ::result $::elem
0540: 65 6e 74 0a 7d 20 7b 7b 0a 20 20 20 20 39 32 38  ent.} {{.    928
0550: 38 30 36 38 37 31 30 33 35 0a 20 20 7d 20 31 7d  806871035.  } 1}
0560: 0a 0a 23 20 54 65 73 74 20 62 75 67 3a 20 27 5d  ..# Test bug: ']
0570: 5d 3e 27 20 69 73 20 6e 6f 74 20 76 61 6c 69 64  ]>' is not valid
0580: 20 63 68 61 72 61 63 74 65 72 20 64 61 74 61 20   character data 
0590: 28 58 4d 4c 20 52 65 63 2e 20 73 75 62 73 65 63  (XML Rec. subsec
05a0: 74 2e 20 32 2e 34 29 20 2d 20 0a 23 20 74 68 69  t. 2.4) - .# thi
05b0: 73 20 73 68 6f 75 6c 64 20 70 72 6f 64 75 63 65  s should produce
05c0: 20 61 20 77 61 72 6e 69 6e 67 2e 0a 74 65 73 74   a warning..test
05d0: 20 63 64 61 74 61 2d 32 2e 30 20 7b 43 44 41 54   cdata-2.0 {CDAT
05e0: 41 20 73 65 63 74 69 6f 6e 20 69 6e 74 65 72 70  A section interp
05f0: 65 72 73 65 64 20 77 69 74 68 20 63 6f 6d 6d 65  ersed with comme
0600: 6e 74 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  nt} {.    set ::
0610: 72 65 73 75 6c 74 20 7b 7d 0a 20 20 20 20 73 65  result {}.    se
0620: 74 20 3a 3a 65 6c 65 6d 65 6e 74 20 30 0a 0a 20  t ::element 0.. 
0630: 20 20 20 63 61 74 63 68 20 7b 72 65 6e 61 6d 65     catch {rename
0640: 20 78 6d 6c 3a 3a 63 64 61 74 61 2d 32 2e 30 20   xml::cdata-2.0 
0650: 7b 7d 7d 0a 20 20 20 20 73 65 74 20 70 61 72 73  {}}.    set pars
0660: 65 72 20 5b 78 6d 6c 3a 3a 70 61 72 73 65 72 20  er [xml::parser 
0670: 63 64 61 74 61 2d 32 2e 30 20 5c 0a 09 2d 65 6c  cdata-2.0 \..-el
0680: 65 6d 65 6e 74 73 74 61 72 74 63 6f 6d 6d 61 6e  ementstartcomman
0690: 64 20 45 73 74 61 72 74 20 5c 0a 09 2d 65 6c 65  d Estart \..-ele
06a0: 6d 65 6e 74 65 6e 64 63 6f 6d 6d 61 6e 64 20 45  mentendcommand E
06b0: 53 74 6f 70 20 5c 0a 09 2d 63 68 61 72 61 63 74  Stop \..-charact
06c0: 65 72 64 61 74 61 63 6f 6d 6d 61 6e 64 20 70 63  erdatacommand pc
06d0: 64 61 74 61 5d 0a 20 20 20 20 24 70 61 72 73 65  data].    $parse
06e0: 72 20 70 61 72 73 65 20 7b 3c 3f 78 6d 6c 20 76  r parse {<?xml v
06f0: 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3f 3e 0a 3c  ersion="1.0"?>.<
0700: 21 44 4f 43 54 59 50 45 20 54 65 73 74 3e 0a 3c  !DOCTYPE Test>.<
0710: 54 65 73 74 3e 3c 21 5b 43 44 41 54 41 5b 3c 21  Test><![CDATA[<!
0720: 2d 2d 20 54 68 69 73 20 69 73 20 6e 6f 74 20 61  -- This is not a
0730: 20 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 5d 5d 3e 0a   comment -->]]>.
0740: 3c 21 2d 2d 20 54 68 69 73 20 69 73 20 61 20 63  <!-- This is a c
0750: 6f 6d 6d 65 6e 74 20 3c 21 5b 43 44 41 54 41 5b  omment <![CDATA[
0760: 54 68 69 73 20 69 73 20 6e 6f 74 20 43 44 41 54  This is not CDAT
0770: 41 5d 5d 3e 2d 2d 3e 0a 3c 21 5b 43 44 41 54 41  A]]>-->.<![CDATA
0780: 5b 3c 21 2d 2d 20 5d 5d 3e 2d 2d 3e 5d 5d 26 67  [<!-- ]]>-->]]&g
0790: 74 3b 3c 2f 54 65 73 74 3e 7d 0a 20 20 20 20 6c  t;</Test>}.    l
07a0: 69 73 74 20 24 3a 3a 72 65 73 75 6c 74 20 24 3a  ist $::result $:
07b0: 3a 65 6c 65 6d 65 6e 74 0a 7d 20 7b 7b 3c 21 2d  :element.} {{<!-
07c0: 2d 20 54 68 69 73 20 69 73 20 6e 6f 74 20 61 20  - This is not a 
07d0: 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 0a 0a 3c 21 2d  comment -->..<!-
07e0: 2d 20 2d 2d 3e 5d 5d 3e 7d 20 30 7d 0a 0a 74 65  - -->]]>} 0}..te
07f0: 73 74 20 63 64 61 74 61 2d 32 2e 31 20 7b 43 44  st cdata-2.1 {CD
0800: 41 54 41 20 73 65 63 74 69 6f 6e 20 77 69 74 68  ATA section with
0810: 20 61 6e 20 61 6e 67 6c 65 20 62 72 61 63 6b 65   an angle bracke
0820: 74 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 72  t} {.    set ::r
0830: 65 73 75 6c 74 20 7b 7d 0a 20 20 20 20 73 65 74  esult {}.    set
0840: 20 3a 3a 65 6c 65 6d 65 6e 74 20 30 0a 0a 20 20   ::element 0..  
0850: 20 20 63 61 74 63 68 20 7b 72 65 6e 61 6d 65 20    catch {rename 
0860: 78 6d 6c 3a 3a 63 64 61 74 61 2d 32 2e 31 20 7b  xml::cdata-2.1 {
0870: 7d 7d 0a 20 20 20 20 73 65 74 20 70 61 72 73 65  }}.    set parse
0880: 72 20 5b 78 6d 6c 3a 3a 70 61 72 73 65 72 20 63  r [xml::parser c
0890: 64 61 74 61 2d 32 2e 31 20 5c 0a 09 2d 65 6c 65  data-2.1 \..-ele
08a0: 6d 65 6e 74 73 74 61 72 74 63 6f 6d 6d 61 6e 64  mentstartcommand
08b0: 20 45 73 74 61 72 74 20 5c 0a 09 2d 65 6c 65 6d   Estart \..-elem
08c0: 65 6e 74 65 6e 64 63 6f 6d 6d 61 6e 64 20 45 53  entendcommand ES
08d0: 74 6f 70 20 5c 0a 09 2d 63 68 61 72 61 63 74 65  top \..-characte
08e0: 72 64 61 74 61 63 6f 6d 6d 61 6e 64 20 70 63 64  rdatacommand pcd
08f0: 61 74 61 5d 0a 20 20 20 20 24 70 61 72 73 65 72  ata].    $parser
0900: 20 70 61 72 73 65 20 7b 3c 3f 78 6d 6c 20 76 65   parse {<?xml ve
0910: 72 73 69 6f 6e 3d 22 31 2e 30 22 3f 3e 0a 3c 21  rsion="1.0"?>.<!
0920: 44 4f 43 54 59 50 45 20 54 65 73 74 3e 0a 3c 54  DOCTYPE Test>.<T
0930: 65 73 74 3e 3c 21 5b 43 44 41 54 41 5b 54 68 69  est><![CDATA[Thi
0940: 73 20 69 73 20 61 20 3e 20 67 72 65 61 74 65 72  s is a > greater
0950: 20 74 68 61 6e 20 73 69 67 6e 5d 5d 3e 3c 2f 54   than sign]]></T
0960: 65 73 74 3e 0a 7d 0a 20 20 20 20 6c 69 73 74 20  est>.}.    list 
0970: 24 3a 3a 72 65 73 75 6c 74 20 24 3a 3a 65 6c 65  $::result $::ele
0980: 6d 65 6e 74 0a 7d 20 7b 7b 54 68 69 73 20 69 73  ment.} {{This is
0990: 20 61 20 3e 20 67 72 65 61 74 65 72 20 74 68 61   a > greater tha
09a0: 6e 20 73 69 67 6e 7d 20 30 7d 0a 0a 23 20 54 65  n sign} 0}..# Te
09b0: 73 74 20 63 61 73 65 20 63 6f 6e 74 72 69 62 75  st case contribu
09c0: 74 65 64 20 62 79 20 4d 61 72 73 68 61 6c 6c 20  ted by Marshall 
09d0: 52 6f 73 65 20 28 6d 72 6f 73 65 40 64 62 63 2e  Rose (mrose@dbc.
09e0: 6d 74 76 69 65 77 2e 63 61 2e 75 73 29 0a 74 65  mtview.ca.us).te
09f0: 73 74 20 63 64 61 74 61 2d 32 2e 32 20 7b 43 44  st cdata-2.2 {CD
0a00: 41 54 41 20 73 65 63 74 69 6f 6e 20 77 69 74 68  ATA section with
0a10: 20 6d 75 6c 74 69 70 6c 65 20 61 6e 67 6c 65 20   multiple angle 
0a20: 62 72 61 63 6b 65 74 73 7d 20 7b 0a 20 20 20 20  brackets} {.    
0a30: 73 65 74 20 3a 3a 72 65 73 75 6c 74 20 7b 7d 0a  set ::result {}.
0a40: 20 20 20 20 73 65 74 20 3a 3a 65 6c 65 6d 65 6e      set ::elemen
0a50: 74 20 30 0a 0a 20 20 20 20 63 61 74 63 68 20 7b  t 0..    catch {
0a60: 72 65 6e 61 6d 65 20 78 6d 6c 3a 3a 63 64 61 74  rename xml::cdat
0a70: 61 2d 32 2e 32 20 7b 7d 7d 0a 20 20 20 20 73 65  a-2.2 {}}.    se
0a80: 74 20 70 61 72 73 65 72 20 5b 78 6d 6c 3a 3a 70  t parser [xml::p
0a90: 61 72 73 65 72 20 63 64 61 74 61 2d 32 2e 32 20  arser cdata-2.2 
0aa0: 5c 0a 09 2d 65 6c 65 6d 65 6e 74 73 74 61 72 74  \..-elementstart
0ab0: 63 6f 6d 6d 61 6e 64 20 45 73 74 61 72 74 20 5c  command Estart \
0ac0: 0a 09 2d 65 6c 65 6d 65 6e 74 65 6e 64 63 6f 6d  ..-elementendcom
0ad0: 6d 61 6e 64 20 45 53 74 6f 70 20 5c 0a 09 2d 63  mand EStop \..-c
0ae0: 68 61 72 61 63 74 65 72 64 61 74 61 63 6f 6d 6d  haracterdatacomm
0af0: 61 6e 64 20 70 63 64 61 74 61 5d 0a 20 20 20 20  and pcdata].    
0b00: 24 70 61 72 73 65 72 20 70 61 72 73 65 20 7b 3c  $parser parse {<
0b10: 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e  ?xml version="1.
0b20: 30 22 20 3f 3e 0a 3c 21 44 4f 43 54 59 50 45 20  0" ?>.<!DOCTYPE 
0b30: 54 65 73 74 3e 0a 3c 54 65 73 74 3e 0a 3c 61 72  Test>.<Test>.<ar
0b40: 74 77 6f 72 6b 3e 3c 21 5b 43 44 41 54 41 5b 0a  twork><![CDATA[.
0b50: 20 20 20 20 3c 3f 78 6d 6c 20 76 65 72 73 69 6f      <?xml versio
0b60: 6e 3d 22 31 2e 30 22 3e 0a 20 20 20 20 3c 21 44  n="1.0">.    <!D
0b70: 4f 43 54 59 50 45 20 72 66 63 20 53 59 53 54 45  OCTYPE rfc SYSTE
0b80: 4d 20 22 72 66 63 58 58 58 58 2e 64 74 64 22 3e  M "rfcXXXX.dtd">
0b90: 0a 20 20 20 20 3c 72 66 63 3e 0a 20 20 20 20 2e  .    <rfc>.    .
0ba0: 2e 2e 0a 0a 20 20 20 20 3c 2f 72 66 63 3e 0a 5d  ....    </rfc>.]
0bb0: 5d 3e 3c 2f 61 72 74 77 6f 72 6b 3e 0a 3c 2f 54  ]></artwork>.</T
0bc0: 65 73 74 3e 7d 0a 20 20 20 20 6c 69 73 74 20 24  est>}.    list $
0bd0: 3a 3a 72 65 73 75 6c 74 20 24 3a 3a 65 6c 65 6d  ::result $::elem
0be0: 65 6e 74 0a 7d 20 7b 7b 0a 0a 20 20 20 20 3c 3f  ent.} {{..    <?
0bf0: 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30  xml version="1.0
0c00: 22 3e 0a 20 20 20 20 3c 21 44 4f 43 54 59 50 45  ">.    <!DOCTYPE
0c10: 20 72 66 63 20 53 59 53 54 45 4d 20 22 72 66 63   rfc SYSTEM "rfc
0c20: 58 58 58 58 2e 64 74 64 22 3e 0a 20 20 20 20 3c  XXXX.dtd">.    <
0c30: 72 66 63 3e 0a 20 20 20 20 2e 2e 2e 0a 0a 20 20  rfc>.    .....  
0c40: 20 20 3c 2f 72 66 63 3e 0a 0a 7d 20 31 7d 0a 0a    </rfc>..} 1}..
0c50: 23 20 54 65 73 74 20 63 61 73 65 20 63 6f 6e 74  # Test case cont
0c60: 72 69 62 75 74 65 64 20 62 79 20 4a 2e 20 4c 69  ributed by J. Li
0c70: 6e 6e 65 6e 6b 6f 68 6c 20 28 6a 6c 69 6e 6e 65  nnenkohl (jlinne
0c80: 6e 40 63 2d 73 2d 6b 2e 64 65 29 0a 74 65 73 74  n@c-s-k.de).test
0c90: 20 63 64 61 74 61 2d 32 2e 33 20 7b 43 44 41 54   cdata-2.3 {CDAT
0ca0: 41 20 73 65 63 74 69 6f 6e 20 77 69 74 68 20 73  A section with s
0cb0: 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 61  quare brackets a
0cc0: 6e 64 20 63 75 72 6c 79 20 62 72 61 63 65 73 7d  nd curly braces}
0cd0: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 72 65 73   {.    set ::res
0ce0: 75 6c 74 20 7b 7d 0a 20 20 20 20 73 65 74 20 3a  ult {}.    set :
0cf0: 3a 65 6c 65 6d 65 6e 74 20 30 0a 0a 20 20 20 20  :element 0..    
0d00: 63 61 74 63 68 20 7b 72 65 6e 61 6d 65 20 78 6d  catch {rename xm
0d10: 6c 3a 3a 63 64 61 74 61 2d 32 2e 33 20 7b 7d 7d  l::cdata-2.3 {}}
0d20: 0a 20 20 20 20 73 65 74 20 70 61 72 73 65 72 20  .    set parser 
0d30: 5b 78 6d 6c 3a 3a 70 61 72 73 65 72 20 63 64 61  [xml::parser cda
0d40: 74 61 2d 32 2e 33 20 5c 0a 09 2d 65 6c 65 6d 65  ta-2.3 \..-eleme
0d50: 6e 74 73 74 61 72 74 63 6f 6d 6d 61 6e 64 20 45  ntstartcommand E
0d60: 73 74 61 72 74 20 5c 0a 09 2d 65 6c 65 6d 65 6e  start \..-elemen
0d70: 74 65 6e 64 63 6f 6d 6d 61 6e 64 20 45 53 74 6f  tendcommand ESto
0d80: 70 20 5c 0a 09 2d 63 68 61 72 61 63 74 65 72 64  p \..-characterd
0d90: 61 74 61 63 6f 6d 6d 61 6e 64 20 70 63 64 61 74  atacommand pcdat
0da0: 61 5d 0a 20 20 20 20 24 70 61 72 73 65 72 20 70  a].    $parser p
0db0: 61 72 73 65 20 7b 3c 3f 78 6d 6c 20 76 65 72 73  arse {<?xml vers
0dc0: 69 6f 6e 3d 22 31 2e 30 22 20 3f 3e 0a 3c 54 63  ion="1.0" ?>.<Tc
0dd0: 6c 3e 0a 3c 21 5b 43 44 41 54 41 5b 0a 70 72 6f  l>.<![CDATA[.pro
0de0: 63 20 61 72 69 74 68 6d 65 74 69 63 5f 61 64 64  c arithmetic_add
0df0: 20 7b 67 72 6f 75 70 73 20 69 6e 70 75 74 73 20   {groups inputs 
0e00: 6f 75 74 70 75 74 73 20 61 74 74 73 7d 20 7b 0a  outputs atts} {.
0e10: 20 20 20 20 73 65 74 20 72 65 74 5f 76 61 6c 20      set ret_val 
0e20: 22 22 0a 20 20 20 20 73 65 74 20 74 20 22 48 65  "".    set t "He
0e30: 6c 6c 6f 20 57 6f 72 6c 64 22 0a 20 20 20 20 73  llo World".    s
0e40: 65 74 20 6c 20 5b 73 74 72 69 6e 67 20 6c 65 6e  et l [string len
0e50: 67 74 68 20 24 74 5d 0a 20 20 20 20 72 65 74 75  gth $t].    retu
0e60: 72 6e 20 24 72 65 74 5f 76 61 6c 0a 7d 0a 5d 5d  rn $ret_val.}.]]
0e70: 3e 0a 3c 2f 54 63 6c 3e 0a 7d 0a 20 20 20 20 6c  >.</Tcl>.}.    l
0e80: 69 73 74 20 24 3a 3a 72 65 73 75 6c 74 20 24 3a  ist $::result $:
0e90: 3a 65 6c 65 6d 65 6e 74 0a 7d 20 7b 7b 0a 0a 70  :element.} {{..p
0ea0: 72 6f 63 20 61 72 69 74 68 6d 65 74 69 63 5f 61  roc arithmetic_a
0eb0: 64 64 20 7b 67 72 6f 75 70 73 20 69 6e 70 75 74  dd {groups input
0ec0: 73 20 6f 75 74 70 75 74 73 20 61 74 74 73 7d 20  s outputs atts} 
0ed0: 7b 0a 20 20 20 20 73 65 74 20 72 65 74 5f 76 61  {.    set ret_va
0ee0: 6c 20 22 22 0a 20 20 20 20 73 65 74 20 74 20 22  l "".    set t "
0ef0: 48 65 6c 6c 6f 20 57 6f 72 6c 64 22 0a 20 20 20  Hello World".   
0f00: 20 73 65 74 20 6c 20 5b 73 74 72 69 6e 67 20 6c   set l [string l
0f10: 65 6e 67 74 68 20 24 74 5d 0a 20 20 20 20 72 65  ength $t].    re
0f20: 74 75 72 6e 20 24 72 65 74 5f 76 61 6c 0a 7d 0a  turn $ret_val.}.
0f30: 0a 7d 20 31 7d 0a 0a 74 65 73 74 20 63 64 61 74  .} 1}..test cdat
0f40: 61 2d 32 2e 34 20 7b 43 44 41 54 41 20 73 65 63  a-2.4 {CDATA sec
0f50: 74 69 6f 6e 20 77 69 74 68 20 61 6e 67 6c 65 20  tion with angle 
0f60: 62 72 61 63 6b 65 74 73 20 61 6e 64 20 63 75 72  brackets and cur
0f70: 6c 79 20 62 72 61 63 65 73 7d 20 7b 0a 20 20 20  ly braces} {.   
0f80: 20 73 65 74 20 3a 3a 72 65 73 75 6c 74 20 7b 7d   set ::result {}
0f90: 0a 20 20 20 20 73 65 74 20 3a 3a 65 6c 65 6d 65  .    set ::eleme
0fa0: 6e 74 20 30 0a 0a 20 20 20 20 63 61 74 63 68 20  nt 0..    catch 
0fb0: 7b 72 65 6e 61 6d 65 20 78 6d 6c 3a 3a 63 64 61  {rename xml::cda
0fc0: 74 61 2d 32 2e 34 20 7b 7d 7d 0a 20 20 20 20 73  ta-2.4 {}}.    s
0fd0: 65 74 20 70 61 72 73 65 72 20 5b 78 6d 6c 3a 3a  et parser [xml::
0fe0: 70 61 72 73 65 72 20 63 64 61 74 61 2d 32 2e 34  parser cdata-2.4
0ff0: 20 5c 0a 09 2d 65 6c 65 6d 65 6e 74 73 74 61 72   \..-elementstar
1000: 74 63 6f 6d 6d 61 6e 64 20 45 73 74 61 72 74 20  tcommand Estart 
1010: 5c 0a 09 2d 65 6c 65 6d 65 6e 74 65 6e 64 63 6f  \..-elementendco
1020: 6d 6d 61 6e 64 20 45 53 74 6f 70 20 5c 0a 09 2d  mmand EStop \..-
1030: 63 68 61 72 61 63 74 65 72 64 61 74 61 63 6f 6d  characterdatacom
1040: 6d 61 6e 64 20 70 63 64 61 74 61 5d 0a 20 20 20  mand pcdata].   
1050: 20 24 70 61 72 73 65 72 20 70 61 72 73 65 20 7b   $parser parse {
1060: 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31  <?xml version="1
1070: 2e 30 22 20 3f 3e 0a 3c 54 63 6c 3e 0a 3c 21 5b  .0" ?>.<Tcl>.<![
1080: 43 44 41 54 41 5b 0a 70 72 6f 63 20 61 72 69 74  CDATA[.proc arit
1090: 68 6d 65 74 69 63 5f 61 64 64 20 7b 67 72 6f 75  hmetic_add {grou
10a0: 70 73 20 69 6e 70 75 74 73 20 6f 75 74 70 75 74  ps inputs output
10b0: 73 20 61 74 74 73 7d 20 7b 0a 20 20 20 20 73 65  s atts} {.    se
10c0: 74 20 72 65 74 5f 76 61 6c 20 5b 65 78 70 72 20  t ret_val [expr 
10d0: 31 20 3e 20 32 5d 0a 20 20 20 20 73 65 74 20 74  1 > 2].    set t
10e0: 20 22 48 65 6c 6c 6f 20 57 6f 72 6c 64 22 0a 20   "Hello World". 
10f0: 20 20 20 73 65 74 20 6c 20 5b 73 74 72 69 6e 67     set l [string
1100: 20 6c 65 6e 67 74 68 20 24 74 5d 0a 20 20 20 20   length $t].    
1110: 72 65 74 75 72 6e 20 24 72 65 74 5f 76 61 6c 0a  return $ret_val.
1120: 7d 0a 5d 5d 3e 0a 3c 2f 54 63 6c 3e 0a 7d 0a 20  }.]]>.</Tcl>.}. 
1130: 20 20 20 6c 69 73 74 20 24 3a 3a 72 65 73 75 6c     list $::resul
1140: 74 20 24 3a 3a 65 6c 65 6d 65 6e 74 0a 7d 20 7b  t $::element.} {
1150: 7b 0a 0a 70 72 6f 63 20 61 72 69 74 68 6d 65 74  {..proc arithmet
1160: 69 63 5f 61 64 64 20 7b 67 72 6f 75 70 73 20 69  ic_add {groups i
1170: 6e 70 75 74 73 20 6f 75 74 70 75 74 73 20 61 74  nputs outputs at
1180: 74 73 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65  ts} {.    set re
1190: 74 5f 76 61 6c 20 5b 65 78 70 72 20 31 20 3e 20  t_val [expr 1 > 
11a0: 32 5d 0a 20 20 20 20 73 65 74 20 74 20 22 48 65  2].    set t "He
11b0: 6c 6c 6f 20 57 6f 72 6c 64 22 0a 20 20 20 20 73  llo World".    s
11c0: 65 74 20 6c 20 5b 73 74 72 69 6e 67 20 6c 65 6e  et l [string len
11d0: 67 74 68 20 24 74 5d 0a 20 20 20 20 72 65 74 75  gth $t].    retu
11e0: 72 6e 20 24 72 65 74 5f 76 61 6c 0a 7d 0a 0a 7d  rn $ret_val.}..}
11f0: 20 31 7d 0a 0a 74 65 73 74 20 63 64 61 74 61 2d   1}..test cdata-
1200: 32 2e 35 20 7b 43 44 41 54 41 20 73 65 63 74 69  2.5 {CDATA secti
1210: 6f 6e 20 77 69 74 68 20 61 6e 67 6c 65 20 62 72  on with angle br
1220: 61 63 6b 65 74 73 2c 20 54 63 6c 20 73 70 65 63  ackets, Tcl spec
1230: 69 61 6c 73 20 74 72 61 69 6c 69 6e 67 20 43 44  ials trailing CD
1240: 41 54 41 20 73 65 63 74 69 6f 6e 7d 20 7b 0a 20  ATA section} {. 
1250: 20 20 20 73 65 74 20 3a 3a 72 65 73 75 6c 74 20     set ::result 
1260: 7b 7d 0a 20 20 20 20 73 65 74 20 3a 3a 65 6c 65  {}.    set ::ele
1270: 6d 65 6e 74 20 30 0a 0a 20 20 20 20 63 61 74 63  ment 0..    catc
1280: 68 20 7b 72 65 6e 61 6d 65 20 78 6d 6c 3a 3a 63  h {rename xml::c
1290: 64 61 74 61 2d 32 2e 35 20 7b 7d 7d 0a 20 20 20  data-2.5 {}}.   
12a0: 20 73 65 74 20 70 61 72 73 65 72 20 5b 78 6d 6c   set parser [xml
12b0: 3a 3a 70 61 72 73 65 72 20 63 64 61 74 61 2d 32  ::parser cdata-2
12c0: 2e 35 20 5c 0a 09 2d 65 6c 65 6d 65 6e 74 73 74  .5 \..-elementst
12d0: 61 72 74 63 6f 6d 6d 61 6e 64 20 45 73 74 61 72  artcommand Estar
12e0: 74 20 5c 0a 09 2d 65 6c 65 6d 65 6e 74 65 6e 64  t \..-elementend
12f0: 63 6f 6d 6d 61 6e 64 20 45 53 74 6f 70 20 5c 0a  command EStop \.
1300: 09 2d 63 68 61 72 61 63 74 65 72 64 61 74 61 63  .-characterdatac
1310: 6f 6d 6d 61 6e 64 20 70 63 64 61 74 61 5d 0a 20  ommand pcdata]. 
1320: 20 20 20 24 70 61 72 73 65 72 20 70 61 72 73 65     $parser parse
1330: 20 7b 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d   {<?xml version=
1340: 22 31 2e 30 22 20 3f 3e 0a 3c 54 63 6c 3e 0a 3c  "1.0" ?>.<Tcl>.<
1350: 21 5b 43 44 41 54 41 5b 0a 70 72 6f 63 20 61 72  ![CDATA[.proc ar
1360: 69 74 68 6d 65 74 69 63 5f 61 64 64 20 7b 67 72  ithmetic_add {gr
1370: 6f 75 70 73 20 69 6e 70 75 74 73 20 6f 75 74 70  oups inputs outp
1380: 75 74 73 20 61 74 74 73 7d 20 7b 0a 20 20 20 20  uts atts} {.    
1390: 73 65 74 20 72 65 74 5f 76 61 6c 20 5b 65 78 70  set ret_val [exp
13a0: 72 20 31 20 3e 20 32 5d 0a 20 20 20 20 73 65 74  r 1 > 2].    set
13b0: 20 74 20 22 48 65 6c 6c 6f 20 57 6f 72 6c 64 22   t "Hello World"
13c0: 0a 20 20 20 20 73 65 74 20 6c 20 5b 73 74 72 69  .    set l [stri
13d0: 6e 67 20 6c 65 6e 67 74 68 20 24 74 5d 0a 20 20  ng length $t].  
13e0: 20 20 72 65 74 75 72 6e 20 24 72 65 74 5f 76 61    return $ret_va
13f0: 6c 0a 7d 0a 5d 5d 3e 20 74 68 61 74 20 69 73 20  l.}.]]> that is 
1400: 7b 6a 6f 6c 6c 79 7d 20 24 67 6f 6f 64 0a 3c 2f  {jolly} $good.</
1410: 54 63 6c 3e 0a 7d 0a 20 20 20 20 6c 69 73 74 20  Tcl>.}.    list 
1420: 24 3a 3a 72 65 73 75 6c 74 20 24 3a 3a 65 6c 65  $::result $::ele
1430: 6d 65 6e 74 0a 7d 20 7b 7b 0a 0a 70 72 6f 63 20  ment.} {{..proc 
1440: 61 72 69 74 68 6d 65 74 69 63 5f 61 64 64 20 7b  arithmetic_add {
1450: 67 72 6f 75 70 73 20 69 6e 70 75 74 73 20 6f 75  groups inputs ou
1460: 74 70 75 74 73 20 61 74 74 73 7d 20 7b 0a 20 20  tputs atts} {.  
1470: 20 20 73 65 74 20 72 65 74 5f 76 61 6c 20 5b 65    set ret_val [e
1480: 78 70 72 20 31 20 3e 20 32 5d 0a 20 20 20 20 73  xpr 1 > 2].    s
1490: 65 74 20 74 20 22 48 65 6c 6c 6f 20 57 6f 72 6c  et t "Hello Worl
14a0: 64 22 0a 20 20 20 20 73 65 74 20 6c 20 5b 73 74  d".    set l [st
14b0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 74 5d 0a  ring length $t].
14c0: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 74 5f      return $ret_
14d0: 76 61 6c 0a 7d 0a 20 74 68 61 74 20 69 73 20 7b  val.}. that is {
14e0: 6a 6f 6c 6c 79 7d 20 24 67 6f 6f 64 0a 7d 20 31  jolly} $good.} 1
14f0: 7d 0a 0a 23 20 54 65 73 74 20 63 61 73 65 20 63  }..# Test case c
1500: 6f 6e 74 72 69 62 75 74 65 64 20 62 79 20 4d 61  ontributed by Ma
1510: 72 73 68 61 6c 6c 20 52 6f 73 65 20 28 6d 72 6f  rshall Rose (mro
1520: 73 65 40 64 62 63 2e 6d 74 76 69 65 77 2e 63 61  se@dbc.mtview.ca
1530: 2e 75 73 29 0a 74 65 73 74 20 63 64 61 74 61 2d  .us).test cdata-
1540: 33 2e 31 20 7b 43 44 41 54 41 20 73 65 63 74 69  3.1 {CDATA secti
1550: 6f 6e 20 77 69 74 68 20 50 49 20 61 6e 64 20 54  on with PI and T
1560: 63 6c 20 73 70 65 63 69 61 6c 20 63 68 61 72 61  cl special chara
1570: 63 74 65 72 73 7d 20 7b 0a 20 20 20 20 73 65 74  cters} {.    set
1580: 20 3a 3a 72 65 73 75 6c 74 20 7b 7d 0a 20 20 20   ::result {}.   
1590: 20 73 65 74 20 3a 3a 65 6c 65 6d 65 6e 74 20 30   set ::element 0
15a0: 0a 0a 20 20 20 20 63 61 74 63 68 20 7b 72 65 6e  ..    catch {ren
15b0: 61 6d 65 20 78 6d 6c 3a 3a 63 64 61 74 61 2d 33  ame xml::cdata-3
15c0: 2e 31 20 7b 7d 7d 0a 20 20 20 20 73 65 74 20 70  .1 {}}.    set p
15d0: 61 72 73 65 72 20 5b 78 6d 6c 3a 3a 70 61 72 73  arser [xml::pars
15e0: 65 72 20 63 64 61 74 61 2d 33 2e 31 20 5c 0a 09  er cdata-3.1 \..
15f0: 2d 65 6c 65 6d 65 6e 74 73 74 61 72 74 63 6f 6d  -elementstartcom
1600: 6d 61 6e 64 20 45 73 74 61 72 74 20 5c 0a 09 2d  mand Estart \..-
1610: 65 6c 65 6d 65 6e 74 65 6e 64 63 6f 6d 6d 61 6e  elementendcomman
1620: 64 20 45 53 74 6f 70 20 5c 0a 09 2d 63 68 61 72  d EStop \..-char
1630: 61 63 74 65 72 64 61 74 61 63 6f 6d 6d 61 6e 64  acterdatacommand
1640: 20 70 63 64 61 74 61 5d 0a 20 20 20 20 24 70 61   pcdata].    $pa
1650: 72 73 65 72 20 70 61 72 73 65 20 7b 3c 3f 78 6d  rser parse {<?xm
1660: 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3f  l version="1.0"?
1670: 3e 0a 3c 3f 78 6d 6c 32 72 66 63 20 74 6f 63 3d  >.<?xml2rfc toc=
1680: 22 79 65 73 22 3f 3e 0a 3c 21 44 4f 43 54 59 50  "yes"?>.<!DOCTYP
1690: 45 20 54 65 73 74 3e 0a 3c 54 65 73 74 3e 0a 3c  E Test>.<Test>.<
16a0: 74 3e 74 68 69 73 20 69 73 20 61 20 5c 20 74 65  t>this is a \ te
16b0: 73 74 3c 2f 74 3e 0a 3c 61 72 74 77 6f 72 6b 3e  st</t>.<artwork>
16c0: 3c 21 5b 43 44 41 54 41 5b 0a 20 20 20 20 3c 64  <![CDATA[.    <d
16d0: 61 74 65 20 6d 6f 6e 74 68 3d 22 44 65 63 65 6d  ate month="Decem
16e0: 62 65 72 22 20 79 65 61 72 3d 22 31 39 39 38 22  ber" year="1998"
16f0: 2f 3e 0a 5d 5d 3e 3c 2f 61 72 74 77 6f 72 6b 3e  />.]]></artwork>
1700: 0a 3c 2f 54 65 73 74 3e 7d 0a 20 20 20 20 6c 69  .</Test>}.    li
1710: 73 74 20 24 3a 3a 72 65 73 75 6c 74 20 24 3a 3a  st $::result $::
1720: 65 6c 65 6d 65 6e 74 0a 7d 20 7b 7b 0a 74 68 69  element.} {{.thi
1730: 73 20 69 73 20 61 20 5c 20 74 65 73 74 0a 0a 20  s is a \ test.. 
1740: 20 20 20 3c 64 61 74 65 20 6d 6f 6e 74 68 3d 22     <date month="
1750: 44 65 63 65 6d 62 65 72 22 20 79 65 61 72 3d 22  December" year="
1760: 31 39 39 38 22 2f 3e 0a 0a 7d 20 32 7d 0a 0a 74  1998"/>..} 2}..t
1770: 65 73 74 20 63 64 61 74 61 2d 34 2e 31 20 7b 43  est cdata-4.1 {C
1780: 44 41 54 41 20 73 65 63 74 69 6f 6e 20 77 69 74  DATA section wit
1790: 68 20 65 6e 74 69 74 79 20 72 65 66 65 72 65 6e  h entity referen
17a0: 63 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  ce} {.    set ::
17b0: 72 65 73 75 6c 74 20 7b 7d 0a 20 20 20 20 73 65  result {}.    se
17c0: 74 20 3a 3a 65 6c 65 6d 65 6e 74 20 30 0a 0a 20  t ::element 0.. 
17d0: 20 20 20 63 61 74 63 68 20 7b 72 65 6e 61 6d 65     catch {rename
17e0: 20 78 6d 6c 3a 3a 63 64 61 74 61 2d 34 2e 31 20   xml::cdata-4.1 
17f0: 7b 7d 7d 0a 20 20 20 20 73 65 74 20 70 61 72 73  {}}.    set pars
1800: 65 72 20 5b 78 6d 6c 3a 3a 70 61 72 73 65 72 20  er [xml::parser 
1810: 63 64 61 74 61 2d 34 2e 31 20 5c 0a 09 2d 65 6c  cdata-4.1 \..-el
1820: 65 6d 65 6e 74 73 74 61 72 74 63 6f 6d 6d 61 6e  ementstartcomman
1830: 64 20 45 73 74 61 72 74 20 5c 0a 09 2d 65 6c 65  d Estart \..-ele
1840: 6d 65 6e 74 65 6e 64 63 6f 6d 6d 61 6e 64 20 45  mentendcommand E
1850: 53 74 6f 70 20 5c 0a 09 2d 63 68 61 72 61 63 74  Stop \..-charact
1860: 65 72 64 61 74 61 63 6f 6d 6d 61 6e 64 20 70 63  erdatacommand pc
1870: 64 61 74 61 5d 0a 20 20 20 20 24 70 61 72 73 65  data].    $parse
1880: 72 20 70 61 72 73 65 20 7b 3c 3f 78 6d 6c 20 76  r parse {<?xml v
1890: 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3f 3e 0a 3c  ersion="1.0"?>.<
18a0: 21 44 4f 43 54 59 50 45 20 54 65 73 74 3e 0a 3c  !DOCTYPE Test>.<
18b0: 54 65 73 74 3e 3c 21 5b 43 44 41 54 41 5b 6e 6f  Test><![CDATA[no
18c0: 20 65 6e 74 69 74 79 20 26 6c 74 3b 72 65 66 65   entity &lt;refe
18d0: 72 65 6e 63 65 73 26 67 74 3b 5d 5d 3e 3c 2f 54  rences&gt;]]></T
18e0: 65 73 74 3e 7d 0a 20 20 20 20 6c 69 73 74 20 24  est>}.    list $
18f0: 3a 3a 72 65 73 75 6c 74 20 24 3a 3a 65 6c 65 6d  ::result $::elem
1900: 65 6e 74 0a 7d 20 7b 7b 6e 6f 20 65 6e 74 69 74  ent.} {{no entit
1910: 79 20 26 6c 74 3b 72 65 66 65 72 65 6e 63 65 73  y &lt;references
1920: 26 67 74 3b 7d 20 30 7d 0a 0a 0a 74 65 73 74 20  &gt;} 0}...test 
1930: 63 64 61 74 61 2d 35 2e 31 20 7b 43 44 41 54 41  cdata-5.1 {CDATA
1940: 20 73 65 63 74 69 6f 6e 20 77 68 69 74 65 43 44   section whiteCD
1950: 41 54 41 73 7d 20 7b 0a 20 20 20 20 73 65 74 20  ATAs} {.    set 
1960: 3a 3a 72 65 73 75 6c 74 20 7b 7d 0a 20 20 20 20  ::result {}.    
1970: 73 65 74 20 3a 3a 63 64 61 74 61 20 7b 7d 0a 0a  set ::cdata {}..
1980: 20 20 20 20 63 61 74 63 68 20 7b 72 65 6e 61 6d      catch {renam
1990: 65 20 78 6d 6c 3a 3a 63 64 61 74 61 2d 35 2e 31  e xml::cdata-5.1
19a0: 20 7b 7d 7d 0a 20 20 20 20 73 65 74 20 70 61 72   {}}.    set par
19b0: 73 65 72 20 5b 78 6d 6c 3a 3a 70 61 72 73 65 72  ser [xml::parser
19c0: 20 63 64 61 74 61 2d 35 2e 31 20 5c 0a 20 20 20   cdata-5.1 \.   
19d0: 20 20 20 20 20 20 20 20 20 2d 69 67 6e 6f 72 65           -ignore
19e0: 77 68 69 74 65 63 64 61 74 61 20 31 20 5c 0a 20  whitecdata 1 \. 
19f0: 20 20 20 20 20 20 20 20 20 20 20 2d 63 68 61 72             -char
1a00: 61 63 74 65 72 64 61 74 61 63 6f 6d 6d 61 6e 64  acterdatacommand
1a10: 20 70 63 64 61 74 61 5d 0a 20 20 20 20 24 70 61   pcdata].    $pa
1a20: 72 73 65 72 20 70 61 72 73 65 20 7b 3c 72 6f 6f  rser parse {<roo
1a30: 74 3e 20 20 20 20 20 20 20 0a 3c 74 65 73 74 3e  t>       .<test>
1a40: 66 6f 6f 3c 2f 74 65 73 74 3e 0a 3c 2f 72 6f 6f  foo</test>.</roo
1a50: 74 3e 7d 0a 20 20 20 20 6c 69 73 74 20 24 3a 3a  t>}.    list $::
1a60: 72 65 73 75 6c 74 0a 7d 20 7b 66 6f 6f 7d 20 20  result.} {foo}  
1a70: 20 20 0a 0a 74 65 73 74 20 63 64 61 74 61 2d 35    ..test cdata-5
1a80: 2e 32 20 7b 43 44 41 54 41 20 73 65 63 74 69 6f  .2 {CDATA sectio
1a90: 6e 20 77 68 69 74 65 43 44 41 54 41 73 7d 20 7b  n whiteCDATAs} {
1aa0: 0a 20 20 20 20 73 65 74 20 3a 3a 72 65 73 75 6c  .    set ::resul
1ab0: 74 20 7b 7d 0a 20 20 20 20 73 65 74 20 3a 3a 63  t {}.    set ::c
1ac0: 64 61 74 61 20 7b 7d 0a 0a 20 20 20 20 63 61 74  data {}..    cat
1ad0: 63 68 20 7b 72 65 6e 61 6d 65 20 78 6d 6c 3a 3a  ch {rename xml::
1ae0: 63 64 61 74 61 2d 35 2e 32 20 7b 7d 7d 0a 20 20  cdata-5.2 {}}.  
1af0: 20 20 73 65 74 20 70 61 72 73 65 72 20 5b 78 6d    set parser [xm
1b00: 6c 3a 3a 70 61 72 73 65 72 20 63 64 61 74 61 2d  l::parser cdata-
1b10: 35 2e 32 20 5c 0a 20 20 20 20 20 20 20 20 20 20  5.2 \.          
1b20: 20 20 2d 63 68 61 72 61 63 74 65 72 64 61 74 61    -characterdata
1b30: 63 6f 6d 6d 61 6e 64 20 70 63 64 61 74 61 5d 0a  command pcdata].
1b40: 20 20 20 20 24 70 61 72 73 65 72 20 70 61 72 73      $parser pars
1b50: 65 20 7b 3c 72 6f 6f 74 3e 20 3c 74 65 73 74 3e  e {<root> <test>
1b60: 66 6f 6f 3c 2f 74 65 73 74 3e 20 3c 2f 72 6f 6f  foo</test> </roo
1b70: 74 3e 7d 0a 20 20 20 20 6c 69 73 74 20 24 3a 3a  t>}.    list $::
1b80: 72 65 73 75 6c 74 0a 7d 20 7b 7b 20 66 6f 6f 20  result.} {{ foo 
1b90: 7d 7d 20 20 20 20 0a 0a 70 72 6f 63 20 63 64 68  }}    ..proc cdh
1ba0: 2d 36 2e 31 20 7b 73 75 70 70 6c 69 65 64 44 61  -6.1 {suppliedDa
1bb0: 74 61 20 64 61 74 61 7d 20 7b 0a 20 20 20 20 69  ta data} {.    i
1bc0: 66 20 7b 24 73 75 70 70 6c 69 65 64 44 61 74 61  f {$suppliedData
1bd0: 20 3d 3d 20 22 66 69 72 73 74 20 61 72 67 22 7d   == "first arg"}
1be0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
1bf0: 3a 72 65 73 75 6c 74 20 31 0a 20 20 20 20 7d 20  :result 1.    } 
1c00: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 73  else {.        s
1c10: 65 74 20 3a 3a 72 65 73 75 6c 74 20 30 0a 20 20  et ::result 0.  
1c20: 20 20 7d 0a 7d 0a 0a 74 65 73 74 20 63 64 61 74    }.}..test cdat
1c30: 61 2d 36 2e 31 20 7b 43 44 41 54 41 20 73 63 72  a-6.1 {CDATA scr
1c40: 69 70 74 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a  ipt} {.    set :
1c50: 3a 72 65 73 75 6c 74 20 30 0a 20 20 20 20 73 65  :result 0.    se
1c60: 74 20 70 20 5b 78 6d 6c 3a 3a 70 61 72 73 65 72  t p [xml::parser
1c70: 20 2d 63 68 61 72 61 63 74 65 72 64 61 74 61 63   -characterdatac
1c80: 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 63 64 68  ommand [list cdh
1c90: 2d 36 2e 31 20 22 66 69 72 73 74 20 61 72 67 22  -6.1 "first arg"
1ca0: 5d 5d 0a 20 20 20 20 24 70 20 70 61 72 73 65 20  ]].    $p parse 
1cb0: 7b 3c 72 6f 6f 74 3e 70 63 64 61 74 61 3c 2f 72  {<root>pcdata</r
1cc0: 6f 6f 74 3e 7d 0a 20 20 20 20 24 70 20 66 72 65  oot>}.    $p fre
1cd0: 65 0a 20 20 20 20 73 65 74 20 3a 3a 72 65 73 75  e.    set ::resu
1ce0: 6c 74 0a 7d 20 7b 31 7d 0a 0a 74 65 73 74 20 63  lt.} {1}..test c
1cf0: 64 61 74 61 2d 36 2e 32 20 7b 64 65 63 6c 61 72  data-6.2 {declar
1d00: 65 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 20 6c  e handler proc l
1d10: 61 74 65 72 7d 20 7b 0a 20 20 20 20 63 61 74 63  ater} {.    catc
1d20: 68 20 7b 72 65 6e 61 6d 65 20 63 64 68 2d 36 2e  h {rename cdh-6.
1d30: 32 20 7b 7d 7d 0a 20 20 20 20 63 61 74 63 68 20  2 {}}.    catch 
1d40: 7b 75 6e 73 65 74 20 3a 3a 63 64 61 74 61 7d 0a  {unset ::cdata}.
1d50: 20 20 20 20 73 65 74 20 70 20 5b 78 6d 6c 3a 3a      set p [xml::
1d60: 70 61 72 73 65 72 20 2d 63 68 61 72 61 63 74 65  parser -characte
1d70: 72 64 61 74 61 63 6f 6d 6d 61 6e 64 20 63 64 68  rdatacommand cdh
1d80: 2d 36 2e 32 5d 0a 20 20 20 20 70 72 6f 63 20 63  -6.2].    proc c
1d90: 64 68 2d 36 2e 32 20 7b 64 61 74 61 7d 20 7b 0a  dh-6.2 {data} {.
1da0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 3a          append :
1db0: 3a 63 64 61 74 61 20 24 64 61 74 61 0a 20 20 20  :cdata $data.   
1dc0: 20 7d 0a 20 20 20 20 24 70 20 70 61 72 73 65 20   }.    $p parse 
1dd0: 7b 3c 72 6f 6f 74 3e 66 6f 6f 3c 61 2f 3e 64 61  {<root>foo<a/>da
1de0: 74 61 3c 62 3e 6d 6f 72 65 20 64 61 74 61 3c 2f  ta<b>more data</
1df0: 62 3e 3c 2f 72 6f 6f 74 3e 7d 0a 20 20 20 20 24  b></root>}.    $
1e00: 70 20 66 72 65 65 0a 20 20 20 20 73 65 74 20 3a  p free.    set :
1e10: 3a 63 64 61 74 61 0a 7d 20 7b 66 6f 6f 64 61 74  :cdata.} {foodat
1e20: 61 6d 6f 72 65 20 64 61 74 61 7d 0a 0a 66 6f 72  amore data}..for
1e30: 65 61 63 68 20 70 61 72 73 65 72 20 5b 69 6e 66  each parser [inf
1e40: 6f 20 63 6f 6d 6d 61 6e 64 73 20 63 64 61 74 61  o commands cdata
1e50: 2d 2a 5d 20 7b 0a 20 20 20 20 24 70 61 72 73 65  -*] {.    $parse
1e60: 72 20 66 72 65 65 0a 7d 0a 0a 23 20 63 6c 65 61  r free.}..# clea
1e70: 6e 75 70 0a 3a 3a 74 63 6c 74 65 73 74 3a 3a 63  nup.::tcltest::c
1e80: 6c 65 61 6e 75 70 54 65 73 74 73 0a 72 65 74 75  leanupTests.retu
1e90: 72 6e 0a                                         rn.