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 <refe
18d0: 72 65 6e 63 65 73 26 67 74 3b 5d 5d 3e 3c 2f 54 rences>]]></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 <references
1920: 26 67 74 3b 7d 20 30 7d 0a 0a 0a 74 65 73 74 20 >} 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.