Artifact
a3efca3d0f095cfdeddc3e67734b9d79567b0fd1 :
File
tests/stackedhdl.test
— part of check-in
[34b677ad0b]
at
2014-11-19 21:59:25
on branch trunk
— Cleaned up test naming, removed a few duplicated tests.
(user:
rolf
size: 8218)
[more...]
0000: 23 20 46 65 61 74 75 72 65 73 20 63 6f 76 65 72 # Features cover
0010: 65 64 3a 20 73 74 61 63 6b 65 64 20 68 61 6e 64 ed: stacked hand
0020: 6c 65 72 2c 20 74 64 6f 6d 20 63 6f 6d 6d 61 6e ler, tdom comman
0030: 64 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 d.#.# This file
0040: 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6c 6c 65 contains a colle
0050: 63 74 69 6f 6e 20 6f 66 20 74 65 73 74 73 20 66 ction of tests f
0060: 6f 72 20 75 73 69 6e 67 20 73 65 76 65 72 61 6c or using several
0070: 20 68 61 6e 64 6c 65 72 20 73 63 72 69 70 74 73 handler scripts
0080: 0a 23 20 66 6f 72 20 61 6e 20 65 76 65 6e 74 2c .# for an event,
0090: 20 61 6e 64 20 74 68 65 20 6d 69 78 65 64 20 75 and the mixed u
00a0: 73 61 67 65 20 6f 66 20 74 63 6c 20 68 61 6e 64 sage of tcl hand
00b0: 6c 65 72 20 73 63 72 69 70 74 73 20 61 6e 64 20 ler scripts and
00c0: 43 20 63 6f 64 65 64 0a 23 20 70 61 72 73 65 72 C coded.# parser
00d0: 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 23 0a 23 extensions..#.#
00e0: 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 Copyright (c) 2
00f0: 30 30 32 20 52 6f 6c 66 20 41 64 65 2e 0a 23 0a 002 Rolf Ade..#.
0100: 23 20 52 43 53 3a 20 40 28 23 29 20 24 49 64 24 # RCS: @(#) $Id$
0110: 0a 0a 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a ..source [file j
0120: 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 20 5b 69 oin [file dir [i
0130: 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 6c 6f 61 nfo script]] loa
0140: 64 74 64 6f 6d 2e 74 63 6c 5d 0a 0a 70 72 6f 63 dtdom.tcl]..proc
0150: 20 43 6f 75 6e 74 20 7b 61 72 67 73 7d 20 7b 0a Count {args} {.
0160: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e
0170: 78 69 73 74 73 20 3a 3a 63 6f 75 6e 74 5d 7d 20 xists ::count]}
0180: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a {. set ::
0190: 63 6f 75 6e 74 20 31 0a 20 20 20 20 7d 20 65 6c count 1. } el
01a0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 63 se {. inc
01b0: 72 20 3a 3a 63 6f 75 6e 74 0a 20 20 20 20 7d 0a r ::count. }.
01c0: 7d 0a 0a 70 72 6f 63 20 43 68 61 72 43 6f 75 6e }..proc CharCoun
01d0: 74 20 7b 6e 61 6d 65 20 61 72 67 73 7d 20 7b 0a t {name args} {.
01e0: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e
01f0: 78 69 73 74 73 20 3a 3a 63 68 61 72 63 6f 75 6e xists ::charcoun
0200: 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 t]} {. se
0210: 74 20 3a 3a 63 68 61 72 63 6f 75 6e 74 20 5b 73 t ::charcount [s
0220: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 tring length $na
0230: 6d 65 5d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b me]. } else {
0240: 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 3a 3a . incr ::
0250: 63 68 61 72 63 6f 75 6e 74 20 5b 73 74 72 69 6e charcount [strin
0260: 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 0a g length $name].
0270: 20 20 20 20 7d 0a 7d 0a 0a 70 72 6f 63 20 43 44 }.}..proc CD
0280: 61 74 61 48 61 6e 64 6c 65 72 20 7b 64 61 74 61 ataHandler {data
0290: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e } {. if {![in
02a0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 64 61 74 fo exists ::cdat
02b0: 61 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 a]} {. se
02c0: 74 20 3a 3a 63 64 61 74 61 20 5b 73 74 72 69 6e t ::cdata [strin
02d0: 67 20 6c 65 6e 67 74 68 20 24 64 61 74 61 5d 0a g length $data].
02e0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
02f0: 20 20 20 20 20 69 6e 63 72 20 3a 3a 63 64 61 74 incr ::cdat
0300: 61 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 a [string length
0310: 20 24 64 61 74 61 5d 0a 20 20 20 20 7d 0a 7d 0a $data]. }.}.
0320: 0a 63 61 74 63 68 20 7b 75 6e 73 65 74 20 73 74 .catch {unset st
0330: 61 72 74 65 64 7d 0a 70 72 6f 63 20 53 74 61 72 arted}.proc Star
0340: 74 20 7b 6e 61 6d 65 20 61 74 4c 69 73 74 7d 20 t {name atList}
0350: 7b 0a 20 20 20 20 61 72 72 61 79 20 73 65 74 20 {. array set
0360: 61 74 74 73 20 24 61 74 4c 69 73 74 0a 0a 20 20 atts $atList..
0370: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi
0380: 73 74 73 20 3a 3a 73 74 61 72 74 65 64 28 24 6e sts ::started($n
0390: 61 6d 65 29 5d 7d 20 7b 0a 09 73 65 74 20 3a 3a ame)]} {..set ::
03a0: 73 74 61 72 74 65 64 28 24 6e 61 6d 65 29 20 31 started($name) 1
03b0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 69 . } else {..i
03c0: 6e 63 72 20 3a 3a 73 74 61 72 74 65 64 28 24 6e ncr ::started($n
03d0: 61 6d 65 29 0a 20 20 20 20 7d 0a 20 20 20 20 69 ame). }. i
03e0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists
03f0: 61 74 74 73 28 63 6c 61 73 73 29 5d 7d 20 7b 0a atts(class)]} {.
0400: 09 73 77 69 74 63 68 20 24 61 74 74 73 28 63 6c .switch $atts(cl
0410: 61 73 73 29 20 7b 0a 09 20 20 20 20 63 6f 6e 74 ass) {.. cont
0420: 69 6e 75 65 20 7b 0a 09 09 72 65 74 75 72 6e 20 inue {...return
0430: 2d 63 6f 64 65 20 63 6f 6e 74 69 6e 75 65 0a 09 -code continue..
0440: 20 20 20 20 7d 0a 09 20 20 20 20 62 72 65 61 6b }.. break
0450: 20 7b 0a 09 09 72 65 74 75 72 6e 20 2d 63 6f 64 {...return -cod
0460: 65 20 62 72 65 61 6b 0a 09 20 20 20 20 7d 0a 09 e break.. }..
0470: 20 20 20 20 65 72 72 6f 72 20 7b 0a 09 09 72 65 error {...re
0480: 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 turn -code error
0490: 20 22 65 72 72 6f 72 20 63 6f 6e 64 69 74 69 6f "error conditio
04a0: 6e 20 69 6e 20 63 61 6c 6c 62 61 63 6b 22 0a 09 n in callback"..
04b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 }.
04c0: 20 20 72 65 74 75 72 6e 20 7b 0a 20 20 20 20 20 return {.
04d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
04e0: 6e 20 2d 63 6f 64 65 20 72 65 74 75 72 6e 0a 20 n -code return.
04f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 }..
0500: 20 20 64 65 66 61 75 6c 74 20 7b 0a 09 09 72 65 default {...re
0510: 74 75 72 6e 20 2d 63 6f 64 65 20 24 61 74 74 73 turn -code $atts
0520: 28 63 6c 61 73 73 29 20 0a 09 20 20 20 20 7d 0a (class) .. }.
0530: 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 74 65 73 74 .}. }.}..test
0540: 20 73 74 61 63 6b 65 64 68 64 6c 2d 31 2e 31 20 stackedhdl-1.1
0550: 7b 74 77 6f 20 68 61 6e 64 6c 65 72 73 20 66 6f {two handlers fo
0560: 72 20 65 6c 65 6d 65 6e 74 20 73 74 61 72 74 7d r element start}
0570: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 75 6e {. catch {un
0580: 73 65 74 20 3a 3a 63 6f 75 6e 74 7d 20 0a 20 20 set ::count} .
0590: 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 3a catch {unset :
05a0: 3a 63 68 61 72 63 6f 75 6e 74 7d 0a 20 20 20 20 :charcount}.
05b0: 73 65 74 20 70 20 5b 65 78 70 61 74 20 2d 65 6c set p [expat -el
05c0: 65 6d 65 6e 74 73 74 61 72 74 63 6f 6d 6d 61 6e ementstartcomman
05d0: 64 20 43 6f 75 6e 74 20 5c 0a 20 20 20 20 20 20 d Count \.
05e0: 20 20 20 20 20 20 20 20 20 20 20 2d 68 61 6e 64 -hand
05f0: 6c 65 72 73 65 74 20 63 68 61 72 63 6f 75 6e 74 lerset charcount
0600: 20 2d 65 6c 65 6d 65 6e 74 73 74 61 72 74 63 6f -elementstartco
0610: 6d 6d 61 6e 64 20 43 68 61 72 43 6f 75 6e 74 5d mmand CharCount]
0620: 0a 20 20 20 20 24 70 20 70 61 72 73 65 20 7b 3c . $p parse {<
0630: 72 6f 6f 74 3e 3c 61 2f 3e 3c 61 3e 3c 2f 61 3e root><a/><a></a>
0640: 3c 2f 72 6f 6f 74 3e 7d 0a 20 20 20 20 6c 69 73 </root>}. lis
0650: 74 20 24 3a 3a 63 6f 75 6e 74 20 24 3a 3a 63 68 t $::count $::ch
0660: 61 72 63 6f 75 6e 74 0a 7d 20 7b 33 20 36 7d 0a arcount.} {3 6}.
0670: 0a 74 65 73 74 20 73 74 61 63 6b 65 64 68 64 6c .test stackedhdl
0680: 2d 31 2e 32 20 7b 74 77 6f 20 68 61 6e 64 6c 65 -1.2 {two handle
0690: 72 73 20 66 6f 72 20 65 6c 65 6d 65 6e 74 20 73 rs for element s
06a0: 74 61 72 74 7d 20 7b 0a 20 20 20 20 63 61 74 63 tart} {. catc
06b0: 68 20 7b 75 6e 73 65 74 20 3a 3a 63 6f 75 6e 74 h {unset ::count
06c0: 7d 20 0a 20 20 20 20 63 61 74 63 68 20 7b 75 6e } . catch {un
06d0: 73 65 74 20 3a 3a 63 68 61 72 63 6f 75 6e 74 7d set ::charcount}
06e0: 0a 20 20 20 20 73 65 74 20 70 20 5b 65 78 70 61 . set p [expa
06f0: 74 5d 0a 20 20 20 20 24 70 20 63 6f 6e 66 69 67 t]. $p config
0700: 75 72 65 20 2d 65 6c 65 6d 65 6e 74 73 74 61 72 ure -elementstar
0710: 74 63 6f 6d 6d 61 6e 64 20 43 6f 75 6e 74 0a 20 tcommand Count.
0720: 20 20 20 24 70 20 63 6f 6e 66 69 67 75 72 65 20 $p configure
0730: 2d 68 61 6e 64 6c 65 72 73 65 74 20 63 68 61 72 -handlerset char
0740: 63 6f 75 6e 74 20 2d 65 6c 65 6d 65 6e 74 73 74 count -elementst
0750: 61 72 74 63 6f 6d 6d 61 6e 64 20 43 68 61 72 43 artcommand CharC
0760: 6f 75 6e 74 0a 20 20 20 20 24 70 20 70 61 72 73 ount. $p pars
0770: 65 20 7b 3c 72 6f 6f 74 3e 3c 61 2f 3e 3c 61 3e e {<root><a/><a>
0780: 3c 2f 61 3e 3c 2f 72 6f 6f 74 3e 7d 0a 20 20 20 </a></root>}.
0790: 20 6c 69 73 74 20 24 3a 3a 63 6f 75 6e 74 20 24 list $::count $
07a0: 3a 3a 63 68 61 72 63 6f 75 6e 74 0a 7d 20 7b 33 ::charcount.} {3
07b0: 20 36 7d 0a 0a 74 65 73 74 20 73 74 61 63 6b 65 6}..test stacke
07c0: 64 68 64 6c 2d 31 2e 33 20 7b 74 77 6f 20 68 61 dhdl-1.3 {two ha
07d0: 6e 64 6c 65 72 73 20 66 6f 72 20 65 6c 65 6d 65 ndlers for eleme
07e0: 6e 74 20 73 74 61 72 74 7d 20 7b 0a 20 20 20 20 nt start} {.
07f0: 63 61 74 63 68 20 7b 75 6e 73 65 74 20 3a 3a 63 catch {unset ::c
0800: 6f 75 6e 74 7d 20 0a 20 20 20 20 63 61 74 63 68 ount} . catch
0810: 20 7b 75 6e 73 65 74 20 3a 3a 63 68 61 72 63 6f {unset ::charco
0820: 75 6e 74 7d 0a 20 20 20 20 73 65 74 20 70 20 5b unt}. set p [
0830: 65 78 70 61 74 5d 0a 20 20 20 20 24 70 20 63 6f expat]. $p co
0840: 6e 66 69 67 75 72 65 20 2d 68 61 6e 64 6c 65 72 nfigure -handler
0850: 73 65 74 20 63 68 61 72 63 6f 75 6e 74 20 2d 65 set charcount -e
0860: 6c 65 6d 65 6e 74 73 74 61 72 74 63 6f 6d 6d 61 lementstartcomma
0870: 6e 64 20 43 68 61 72 43 6f 75 6e 74 0a 20 20 20 nd CharCount.
0880: 20 24 70 20 63 6f 6e 66 69 67 75 72 65 20 2d 65 $p configure -e
0890: 6c 65 6d 65 6e 74 73 74 61 72 74 63 6f 6d 6d 61 lementstartcomma
08a0: 6e 64 20 43 6f 75 6e 74 0a 20 20 20 20 24 70 20 nd Count. $p
08b0: 70 61 72 73 65 20 7b 3c 72 6f 6f 74 3e 3c 61 2f parse {<root><a/
08c0: 3e 3c 61 3e 3c 2f 61 3e 3c 2f 72 6f 6f 74 3e 7d ><a></a></root>}
08d0: 0a 20 20 20 20 6c 69 73 74 20 24 3a 3a 63 6f 75 . list $::cou
08e0: 6e 74 20 24 3a 3a 63 68 61 72 63 6f 75 6e 74 0a nt $::charcount.
08f0: 7d 20 7b 33 20 36 7d 0a 0a 74 65 73 74 20 73 74 } {3 6}..test st
0900: 61 63 6b 65 64 68 64 6c 2d 31 2e 34 20 7b 74 77 ackedhdl-1.4 {tw
0910: 6f 20 68 61 6e 64 6c 65 72 73 20 66 6f 72 20 65 o handlers for e
0920: 6c 65 6d 65 6e 74 20 73 74 61 72 74 20 61 6e 64 lement start and
0930: 20 65 6e 64 7d 20 7b 0a 20 20 20 20 63 61 74 63 end} {. catc
0940: 68 20 7b 75 6e 73 65 74 20 3a 3a 63 6f 75 6e 74 h {unset ::count
0950: 7d 20 0a 20 20 20 20 63 61 74 63 68 20 7b 75 6e } . catch {un
0960: 73 65 74 20 3a 3a 63 68 61 72 63 6f 75 6e 74 7d set ::charcount}
0970: 0a 20 20 20 20 73 65 74 20 70 20 5b 65 78 70 61 . set p [expa
0980: 74 20 2d 65 6c 65 6d 65 6e 74 73 74 61 72 74 63 t -elementstartc
0990: 6f 6d 6d 61 6e 64 20 43 6f 75 6e 74 20 2d 65 6c ommand Count -el
09a0: 65 6d 65 6e 74 65 6e 64 63 6f 6d 6d 61 6e 64 20 ementendcommand
09b0: 43 6f 75 6e 74 20 5c 0a 20 20 20 20 20 20 20 20 Count \.
09c0: 20 20 20 20 20 20 20 20 20 2d 68 61 6e 64 6c 65 -handle
09d0: 72 73 65 74 20 63 68 61 72 63 6f 75 6e 74 20 2d rset charcount -
09e0: 65 6c 65 6d 65 6e 74 73 74 61 72 74 63 6f 6d 6d elementstartcomm
09f0: 61 6e 64 20 43 68 61 72 43 6f 75 6e 74 20 5c 0a and CharCount \.
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a10: 20 2d 65 6c 65 6d 65 6e 74 65 6e 64 63 6f 6d 6d -elementendcomm
0a20: 61 6e 64 20 43 68 61 72 43 6f 75 6e 74 5d 0a 20 and CharCount].
0a30: 20 20 20 24 70 20 70 61 72 73 65 20 7b 3c 72 6f $p parse {<ro
0a40: 6f 74 3e 3c 61 2f 3e 3c 61 3e 3c 2f 61 3e 3c 2f ot><a/><a></a></
0a50: 72 6f 6f 74 3e 7d 0a 20 20 20 20 6c 69 73 74 20 root>}. list
0a60: 24 3a 3a 63 6f 75 6e 74 20 24 3a 3a 63 68 61 72 $::count $::char
0a70: 63 6f 75 6e 74 0a 7d 20 7b 36 20 31 32 7d 0a 0a count.} {6 12}..
0a80: 74 65 73 74 20 73 74 61 63 6b 65 64 68 64 6c 2d test stackedhdl-
0a90: 31 2e 35 20 7b 74 77 6f 20 68 61 6e 64 6c 65 72 1.5 {two handler
0aa0: 73 20 66 6f 72 20 65 6c 65 6d 65 6e 74 20 73 74 s for element st
0ab0: 61 72 74 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 art} {. catch
0ac0: 20 7b 75 6e 73 65 74 20 3a 3a 63 6f 75 6e 74 7d {unset ::count}
0ad0: 20 0a 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 . catch {uns
0ae0: 65 74 20 3a 3a 63 68 61 72 63 6f 75 6e 74 7d 0a et ::charcount}.
0af0: 20 20 20 20 73 65 74 20 70 20 5b 65 78 70 61 74 set p [expat
0b00: 5d 0a 20 20 20 20 24 70 20 63 6f 6e 66 69 67 75 ]. $p configu
0b10: 72 65 20 2d 65 6c 65 6d 65 6e 74 73 74 61 72 74 re -elementstart
0b20: 63 6f 6d 6d 61 6e 64 20 43 6f 75 6e 74 20 2d 65 command Count -e
0b30: 6c 65 6d 65 6e 74 65 6e 64 63 6f 6d 6d 61 6e 64 lementendcommand
0b40: 20 43 6f 75 6e 74 0a 20 20 20 20 24 70 20 63 6f Count. $p co
0b50: 6e 66 69 67 75 72 65 20 2d 68 61 6e 64 6c 65 72 nfigure -handler
0b60: 73 65 74 20 63 68 61 72 63 6f 75 6e 74 20 2d 65 set charcount -e
0b70: 6c 65 6d 65 6e 74 73 74 61 72 74 63 6f 6d 6d 61 lementstartcomma
0b80: 6e 64 20 43 68 61 72 43 6f 75 6e 74 20 5c 0a 20 nd CharCount \.
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ba0: 2d 65 6c 65 6d 65 6e 74 65 6e 64 63 6f 6d 6d 61 -elementendcomma
0bb0: 6e 64 20 43 68 61 72 43 6f 75 6e 74 0a 20 20 20 nd CharCount.
0bc0: 20 24 70 20 70 61 72 73 65 20 7b 3c 72 6f 6f 74 $p parse {<root
0bd0: 3e 3c 61 2f 3e 3c 61 3e 3c 2f 61 3e 3c 2f 72 6f ><a/><a></a></ro
0be0: 6f 74 3e 7d 0a 20 20 20 20 6c 69 73 74 20 24 3a ot>}. list $:
0bf0: 3a 63 6f 75 6e 74 20 24 3a 3a 63 68 61 72 63 6f :count $::charco
0c00: 75 6e 74 0a 7d 20 7b 36 20 31 32 7d 0a 0a 74 65 unt.} {6 12}..te
0c10: 73 74 20 73 74 61 63 6b 65 64 68 64 6c 2d 31 2e st stackedhdl-1.
0c20: 36 20 7b 74 77 6f 20 68 61 6e 64 6c 65 72 73 20 6 {two handlers
0c30: 66 6f 72 20 65 6c 65 6d 65 6e 74 20 73 74 61 72 for element star
0c40: 74 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b t} {. catch {
0c50: 75 6e 73 65 74 20 3a 3a 63 6f 75 6e 74 7d 20 0a unset ::count} .
0c60: 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 catch {unset
0c70: 20 3a 3a 63 68 61 72 63 6f 75 6e 74 7d 0a 20 20 ::charcount}.
0c80: 20 20 73 65 74 20 70 20 5b 65 78 70 61 74 5d 0a set p [expat].
0c90: 20 20 20 20 24 70 20 63 6f 6e 66 69 67 75 72 65 $p configure
0ca0: 20 2d 68 61 6e 64 6c 65 72 73 65 74 20 63 68 61 -handlerset cha
0cb0: 72 63 6f 75 6e 74 20 2d 65 6c 65 6d 65 6e 74 73 rcount -elements
0cc0: 74 61 72 74 63 6f 6d 6d 61 6e 64 20 43 68 61 72 tartcommand Char
0cd0: 43 6f 75 6e 74 20 5c 0a 20 20 20 20 20 20 20 20 Count \.
0ce0: 20 20 20 20 20 20 20 20 20 2d 65 6c 65 6d 65 6e -elemen
0cf0: 74 65 6e 64 63 6f 6d 6d 61 6e 64 20 43 68 61 72 tendcommand Char
0d00: 43 6f 75 6e 74 0a 20 20 20 20 24 70 20 63 6f 6e Count. $p con
0d10: 66 69 67 75 72 65 20 2d 65 6c 65 6d 65 6e 74 73 figure -elements
0d20: 74 61 72 74 63 6f 6d 6d 61 6e 64 20 43 6f 75 6e tartcommand Coun
0d30: 74 20 2d 65 6c 65 6d 65 6e 74 65 6e 64 63 6f 6d t -elementendcom
0d40: 6d 61 6e 64 20 43 6f 75 6e 74 0a 20 20 20 20 24 mand Count. $
0d50: 70 20 70 61 72 73 65 20 7b 3c 72 6f 6f 74 3e 3c p parse {<root><
0d60: 61 2f 3e 3c 61 3e 3c 2f 61 3e 3c 2f 72 6f 6f 74 a/><a></a></root
0d70: 3e 7d 0a 20 20 20 20 6c 69 73 74 20 24 3a 3a 63 >}. list $::c
0d80: 6f 75 6e 74 20 24 3a 3a 63 68 61 72 63 6f 75 6e ount $::charcoun
0d90: 74 0a 7d 20 7b 36 20 31 32 7d 0a 0a 74 65 73 74 t.} {6 12}..test
0da0: 20 73 74 61 63 6b 65 64 68 64 6c 2d 31 2e 37 20 stackedhdl-1.7
0db0: 7b 74 77 6f 20 68 61 6e 64 6c 65 72 73 20 66 6f {two handlers fo
0dc0: 72 20 65 6c 65 6d 65 6e 74 20 73 74 61 72 74 7d r element start}
0dd0: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 75 6e {. catch {un
0de0: 73 65 74 20 3a 3a 63 6f 75 6e 74 7d 20 0a 20 20 set ::count} .
0df0: 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 3a catch {unset :
0e00: 3a 63 68 61 72 63 6f 75 6e 74 7d 0a 20 20 20 20 :charcount}.
0e10: 73 65 74 20 70 20 5b 65 78 70 61 74 5d 0a 20 20 set p [expat].
0e20: 20 20 24 70 20 63 6f 6e 66 69 67 75 72 65 20 2d $p configure -
0e30: 68 61 6e 64 6c 65 72 73 65 74 20 63 68 61 72 63 handlerset charc
0e40: 6f 75 6e 74 20 2d 65 6c 65 6d 65 6e 74 73 74 61 ount -elementsta
0e50: 72 74 63 6f 6d 6d 61 6e 64 20 43 68 61 72 43 6f rtcommand CharCo
0e60: 75 6e 74 0a 20 20 20 20 24 70 20 63 6f 6e 66 69 unt. $p confi
0e70: 67 75 72 65 20 2d 65 6c 65 6d 65 6e 74 73 74 61 gure -elementsta
0e80: 72 74 63 6f 6d 6d 61 6e 64 20 43 6f 75 6e 74 0a rtcommand Count.
0e90: 20 20 20 20 24 70 20 63 6f 6e 66 69 67 75 72 65 $p configure
0ea0: 20 2d 68 61 6e 64 6c 65 72 73 65 74 20 63 68 61 -handlerset cha
0eb0: 72 63 6f 75 6e 74 20 2d 65 6c 65 6d 65 6e 74 65 rcount -elemente
0ec0: 6e 64 63 6f 6d 6d 61 6e 64 20 43 68 61 72 43 6f ndcommand CharCo
0ed0: 75 6e 74 0a 20 20 20 20 24 70 20 63 6f 6e 66 69 unt. $p confi
0ee0: 67 75 72 65 20 2d 65 6c 65 6d 65 6e 74 65 6e 64 gure -elementend
0ef0: 63 6f 6d 6d 61 6e 64 20 43 6f 75 6e 74 0a 20 20 command Count.
0f00: 20 20 24 70 20 70 61 72 73 65 20 7b 3c 72 6f 6f $p parse {<roo
0f10: 74 3e 3c 61 2f 3e 3c 61 3e 3c 2f 61 3e 3c 2f 72 t><a/><a></a></r
0f20: 6f 6f 74 3e 7d 0a 20 20 20 20 6c 69 73 74 20 24 oot>}. list $
0f30: 3a 3a 63 6f 75 6e 74 20 24 3a 3a 63 68 61 72 63 ::count $::charc
0f40: 6f 75 6e 74 0a 7d 20 7b 36 20 31 32 7d 0a 0a 0a ount.} {6 12}...
0f50: 74 65 73 74 20 73 74 61 63 6b 65 64 68 64 6c 2d test stackedhdl-
0f60: 31 2e 38 20 7b 73 61 6d 65 20 68 61 6e 64 6c 65 1.8 {same handle
0f70: 72 20 73 63 72 69 70 74 20 66 6f 72 20 74 68 65 r script for the
0f80: 20 73 61 6d 65 20 65 76 65 6e 74 20 69 6e 20 64 same event in d
0f90: 69 66 66 65 72 65 6e 20 68 61 6e 64 6c 65 72 20 ifferen handler
0fa0: 73 65 74 73 7d 20 7b 0a 20 20 20 20 63 61 74 63 sets} {. catc
0fb0: 68 20 7b 75 6e 73 65 74 20 3a 3a 63 6f 75 6e 74 h {unset ::count
0fc0: 7d 20 0a 20 20 20 20 73 65 74 20 70 20 5b 65 78 } . set p [ex
0fd0: 70 61 74 20 2d 65 6c 65 6d 65 6e 74 73 74 61 72 pat -elementstar
0fe0: 74 63 6f 6d 6d 61 6e 64 20 43 6f 75 6e 74 20 5c tcommand Count \
0ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1000: 20 20 2d 68 61 6e 64 6c 65 72 73 65 74 20 63 68 -handlerset ch
1010: 61 72 63 6f 75 6e 74 20 2d 65 6c 65 6d 65 6e 74 arcount -element
1020: 73 74 61 72 74 63 6f 6d 6d 61 6e 64 20 43 6f 75 startcommand Cou
1030: 6e 74 5d 0a 20 20 20 20 24 70 20 70 61 72 73 65 nt]. $p parse
1040: 20 7b 3c 72 6f 6f 74 3e 3c 61 2f 3e 3c 61 3e 3c {<root><a/><a><
1050: 2f 61 3e 3c 2f 72 6f 6f 74 3e 7d 0a 20 20 20 20 /a></root>}.
1060: 73 65 74 20 3a 3a 63 6f 75 6e 74 0a 7d 20 7b 36 set ::count.} {6
1070: 7d 0a 0a 74 65 73 74 20 73 74 61 63 6b 65 64 68 }..test stackedh
1080: 64 6c 2d 31 2e 39 20 7b 73 61 6d 65 20 68 61 6e dl-1.9 {same han
1090: 64 6c 65 72 20 73 63 72 69 70 74 20 66 6f 72 20 dler script for
10a0: 74 68 65 20 73 61 6d 65 20 65 76 65 6e 74 20 69 the same event i
10b0: 6e 20 64 69 66 66 65 72 65 6e 20 68 61 6e 64 6c n differen handl
10c0: 65 72 20 73 65 74 73 7d 20 7b 0a 20 20 20 20 63 er sets} {. c
10d0: 61 74 63 68 20 7b 75 6e 73 65 74 20 3a 3a 63 6f atch {unset ::co
10e0: 75 6e 74 7d 20 0a 20 20 20 20 73 65 74 20 70 20 unt} . set p
10f0: 5b 65 78 70 61 74 20 2d 65 6c 65 6d 65 6e 74 65 [expat -elemente
1100: 6e 64 63 6f 6d 6d 61 6e 64 20 43 6f 75 6e 74 20 ndcommand Count
1110: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
1120: 20 20 20 2d 68 61 6e 64 6c 65 72 73 65 74 20 63 -handlerset c
1130: 68 61 72 63 6f 75 6e 74 20 2d 65 6c 65 6d 65 6e harcount -elemen
1140: 74 65 6e 64 63 6f 6d 6d 61 6e 64 20 43 6f 75 6e tendcommand Coun
1150: 74 5d 0a 20 20 20 20 24 70 20 70 61 72 73 65 20 t]. $p parse
1160: 7b 3c 72 6f 6f 74 3e 3c 61 2f 3e 3c 61 3e 3c 2f {<root><a/><a></
1170: 61 3e 3c 2f 72 6f 6f 74 3e 7d 0a 20 20 20 20 73 a></root>}. s
1180: 65 74 20 3a 3a 63 6f 75 6e 74 0a 7d 20 7b 36 7d et ::count.} {6}
1190: 0a 0a 74 65 73 74 20 73 74 61 63 6b 65 64 68 64 ..test stackedhd
11a0: 6c 2d 31 2e 31 30 20 7b 6c 6f 74 73 20 6f 66 20 l-1.10 {lots of
11b0: 68 61 6e 64 6c 65 72 20 73 65 74 73 2c 20 77 69 handler sets, wi
11c0: 74 68 6f 75 74 20 64 65 66 61 75 6c 74 20 68 61 thout default ha
11d0: 6e 64 6c 65 72 20 73 65 74 7d 20 7b 0a 20 20 20 ndler set} {.
11e0: 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 3a 3a catch {unset ::
11f0: 63 6f 75 6e 74 7d 20 0a 20 20 20 20 63 61 74 63 count} . catc
1200: 68 20 7b 75 6e 73 65 74 20 3a 3a 63 68 61 72 63 h {unset ::charc
1210: 6f 75 6e 74 7d 0a 20 20 20 20 63 61 74 63 68 20 ount}. catch
1220: 7b 75 6e 73 65 74 20 3a 3a 63 64 61 74 61 7d 0a {unset ::cdata}.
1230: 20 20 20 20 73 65 74 20 70 20 5b 65 78 70 61 74 set p [expat
1240: 5d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 78 ]. for {set x
1250: 20 30 7d 20 7b 24 78 20 3c 20 31 30 30 7d 20 7b 0} {$x < 100} {
1260: 69 6e 63 72 20 78 7d 20 7b 0a 20 20 20 20 20 20 incr x} {.
1270: 20 20 24 70 20 63 6f 6e 66 69 67 75 72 65 20 2d $p configure -
1280: 68 61 6e 64 6c 65 72 73 65 74 20 73 65 74 24 78 handlerset set$x
1290: 20 2d 65 6c 65 6d 65 6e 74 73 74 61 72 74 63 6f -elementstartco
12a0: 6d 6d 61 6e 64 20 43 6f 75 6e 74 20 5c 0a 20 20 mmand Count \.
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12c0: 20 20 20 2d 65 6c 65 6d 65 6e 74 65 6e 64 63 6f -elementendco
12d0: 6d 6d 61 6e 64 20 43 68 61 72 43 6f 75 6e 74 20 mmand CharCount
12e0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
12f0: 20 20 20 20 20 20 20 2d 63 68 61 72 61 63 74 65 -characte
1300: 72 64 61 74 61 63 6f 6d 6d 61 6e 64 20 43 44 61 rdatacommand CDa
1310: 74 61 48 61 6e 64 6c 65 72 0a 20 20 20 20 7d 0a taHandler. }.
1320: 20 20 20 20 24 70 20 70 61 72 73 65 20 7b 3c 72 $p parse {<r
1330: 6f 6f 74 3e 20 20 3c 61 2f 3e 3c 61 3e 3c 2f 61 oot> <a/><a></a
1340: 3e 3c 2f 72 6f 6f 74 3e 7d 0a 20 20 20 20 6c 69 ></root>}. li
1350: 73 74 20 24 3a 3a 63 6f 75 6e 74 20 24 3a 3a 63 st $::count $::c
1360: 68 61 72 63 6f 75 6e 74 20 24 3a 3a 63 64 61 74 harcount $::cdat
1370: 61 0a 7d 20 7b 33 30 30 20 36 30 30 20 32 30 30 a.} {300 600 200
1380: 7d 0a 0a 74 65 73 74 20 73 74 61 63 6b 65 64 68 }..test stackedh
1390: 64 6c 2d 32 2e 31 20 7b 74 63 6c 20 68 61 6e 64 dl-2.1 {tcl hand
13a0: 6c 65 72 20 61 6e 64 20 43 20 63 6f 64 65 64 20 ler and C coded
13b0: 70 61 72 73 65 72 20 65 78 74 65 6e 73 69 6f 6e parser extension
13c0: 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 75 } {. catch {u
13d0: 6e 73 65 74 20 3a 3a 63 6f 75 6e 74 7d 0a 20 20 nset ::count}.
13e0: 20 20 73 65 74 20 70 20 5b 65 78 70 61 74 20 2d set p [expat -
13f0: 65 6c 65 6d 65 6e 74 73 74 61 72 74 63 6f 6d 6d elementstartcomm
1400: 61 6e 64 20 43 6f 75 6e 74 5d 0a 20 20 20 20 74 and Count]. t
1410: 64 6f 6d 20 24 70 20 65 6e 61 62 6c 65 0a 20 20 dom $p enable.
1420: 20 20 24 70 20 70 61 72 73 65 20 7b 3c 72 6f 6f $p parse {<roo
1430: 74 3e 3c 61 2f 3e 3c 61 3e 62 6f 6f 3c 2f 61 3e t><a/><a>boo</a>
1440: 3c 2f 72 6f 6f 74 3e 7d 0a 20 20 20 20 73 65 74 </root>}. set
1450: 20 64 6f 63 20 5b 74 64 6f 6d 20 24 70 20 67 65 doc [tdom $p ge
1460: 74 64 6f 63 5d 0a 20 20 20 20 73 65 74 20 72 6f tdoc]. set ro
1470: 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e ot [$doc documen
1480: 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 tElement]. se
1490: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 t result [list $
14a0: 3a 3a 63 6f 75 6e 74 20 5b 6c 6c 65 6e 67 74 68 ::count [llength
14b0: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 4e 6f 64 [$root childNod
14c0: 65 73 5d 5d 5d 0a 20 20 20 20 24 64 6f 63 20 64 es]]]. $doc d
14d0: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 elete. set re
14e0: 73 75 6c 74 0a 7d 20 7b 33 20 32 7d 0a 0a 74 65 sult.} {3 2}..te
14f0: 73 74 20 73 74 61 63 6b 65 64 68 64 6c 2d 32 2e st stackedhdl-2.
1500: 32 20 7b 74 63 6c 20 68 61 6e 64 6c 65 72 20 61 2 {tcl handler a
1510: 6e 64 20 43 20 63 6f 64 65 64 20 70 61 72 73 65 nd C coded parse
1520: 72 20 65 78 74 65 6e 73 69 6f 6e 7d 20 7b 0a 20 r extension} {.
1530: 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 catch {unset
1540: 3a 3a 63 6f 75 6e 74 7d 0a 20 20 20 20 73 65 74 ::count}. set
1550: 20 70 20 5b 65 78 70 61 74 20 2d 65 6c 65 6d 65 p [expat -eleme
1560: 6e 74 73 74 61 72 74 63 6f 6d 6d 61 6e 64 20 43 ntstartcommand C
1570: 6f 75 6e 74 5d 0a 20 20 20 20 74 64 6f 6d 20 24 ount]. tdom $
1580: 70 20 65 6e 61 62 6c 65 0a 20 20 20 20 24 70 20 p enable. $p
1590: 70 61 72 73 65 20 7b 3c 72 6f 6f 74 3e 3c 61 2f parse {<root><a/
15a0: 3e 3c 61 3e 62 6f 6f 3c 2f 61 3e 3c 2f 72 6f 6f ><a>boo</a></roo
15b0: 74 3e 7d 0a 20 20 20 20 73 65 74 20 64 6f 63 20 t>}. set doc
15c0: 5b 74 64 6f 6d 20 24 70 20 67 65 74 64 6f 63 5d [tdom $p getdoc]
15d0: 0a 20 20 20 20 24 70 20 66 72 65 65 0a 20 20 20 . $p free.
15e0: 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 set root [$doc
15f0: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d documentElement]
1600: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
1610: 5b 6c 69 73 74 20 24 3a 3a 63 6f 75 6e 74 20 5b [list $::count [
1620: 6c 6c 65 6e 67 74 68 20 5b 24 72 6f 6f 74 20 63 llength [$root c
1630: 68 69 6c 64 4e 6f 64 65 73 5d 5d 5d 0a 20 20 20 hildNodes]]].
1640: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
1650: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 33 set result.} {3
1660: 20 32 7d 0a 0a 74 65 73 74 20 73 74 61 63 6b 65 2}..test stacke
1670: 64 68 64 6c 2d 32 2e 33 20 7b 72 65 74 75 72 6e dhdl-2.3 {return
1680: 20 2d 63 6f 64 65 20 72 65 74 75 72 6e 20 77 69 -code return wi
1690: 74 68 20 74 63 6c 20 61 6e 64 20 43 20 63 6f 64 th tcl and C cod
16a0: 65 64 20 68 61 6e 64 6c 65 72 7d 20 2d 73 65 74 ed handler} -set
16b0: 75 70 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b up {. catch {
16c0: 75 6e 73 65 74 20 73 74 61 72 74 65 64 7d 0a 7d unset started}.}
16d0: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 74 -body {. set
16e0: 20 70 20 5b 65 78 70 61 74 20 2d 65 6c 65 6d 65 p [expat -eleme
16f0: 6e 74 73 74 61 72 74 63 6f 6d 6d 61 6e 64 20 53 ntstartcommand S
1700: 74 61 72 74 5d 0a 20 20 20 20 74 64 6f 6d 20 24 tart]. tdom $
1710: 70 20 65 6e 61 62 6c 65 0a 20 20 20 20 73 65 74 p enable. set
1720: 20 72 65 73 75 6c 74 63 6f 64 65 20 5b 63 61 74 resultcode [cat
1730: 63 68 20 7b 24 70 20 70 61 72 73 65 20 7b 3c 64 ch {$p parse {<d
1740: 6f 63 3e 3c 65 2f 3e 3c 65 20 63 6c 61 73 73 3d oc><e/><e class=
1750: 22 72 65 74 75 72 6e 22 2f 3e 3c 65 2f 3e 3c 2f "return"/><e/></
1760: 64 6f 63 3e 7d 7d 5d 0a 20 20 20 20 73 65 74 20 doc>}}]. set
1770: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 72 65 result [list $re
1780: 73 75 6c 74 63 6f 64 65 20 24 3a 3a 73 74 61 72 sultcode $::star
1790: 74 65 64 28 65 29 20 5b 5b 74 64 6f 6d 20 24 70 ted(e) [[tdom $p
17a0: 20 67 65 74 64 6f 63 5d 20 61 73 58 4d 4c 20 2d getdoc] asXML -
17b0: 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 5d 0a 20 20 indent none]].
17c0: 20 20 24 70 20 66 72 65 65 0a 20 20 20 20 73 65 $p free. se
17d0: 74 20 72 65 73 75 6c 74 0a 7d 20 2d 72 65 73 75 t result.} -resu
17e0: 6c 74 20 7b 30 20 32 20 7b 3c 64 6f 63 3e 3c 65 lt {0 2 {<doc><e
17f0: 2f 3e 3c 65 20 63 6c 61 73 73 3d 22 72 65 74 75 /><e class="retu
1800: 72 6e 22 2f 3e 3c 2f 64 6f 63 3e 7d 7d 0a 0a 74 rn"/></doc>}}..t
1810: 65 73 74 20 73 74 61 63 6b 65 64 68 64 6c 2d 32 est stackedhdl-2
1820: 2e 34 20 7b 72 65 74 75 72 6e 20 2d 63 6f 64 65 .4 {return -code
1830: 20 65 72 72 6f 72 20 77 69 74 68 20 74 63 6c 20 error with tcl
1840: 61 6e 64 20 43 20 63 6f 64 65 64 20 68 61 6e 64 and C coded hand
1850: 6c 65 72 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 ler} -setup {.
1860: 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 73 catch {unset s
1870: 74 61 72 74 65 64 7d 0a 7d 20 2d 62 6f 64 79 20 tarted}.} -body
1880: 7b 0a 20 20 20 20 73 65 74 20 70 20 5b 65 78 70 {. set p [exp
1890: 61 74 20 2d 65 6c 65 6d 65 6e 74 73 74 61 72 74 at -elementstart
18a0: 63 6f 6d 6d 61 6e 64 20 53 74 61 72 74 5d 0a 20 command Start].
18b0: 20 20 20 74 64 6f 6d 20 24 70 20 65 6e 61 62 6c tdom $p enabl
18c0: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 e. set result
18d0: 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 24 70 20 code [catch {$p
18e0: 70 61 72 73 65 20 7b 3c 64 6f 63 3e 3c 65 2f 3e parse {<doc><e/>
18f0: 3c 65 20 63 6c 61 73 73 3d 22 65 72 72 6f 72 22 <e class="error"
1900: 2f 3e 3c 65 2f 3e 3c 2f 64 6f 63 3e 7d 7d 20 6d /><e/></doc>}} m
1910: 73 67 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 sg]. set resu
1920: 6c 74 20 5b 6c 69 73 74 20 24 72 65 73 75 6c 74 lt [list $result
1930: 63 6f 64 65 20 24 6d 73 67 20 24 3a 3a 73 74 61 code $msg $::sta
1940: 72 74 65 64 28 65 29 20 5b 5b 74 64 6f 6d 20 24 rted(e) [[tdom $
1950: 70 20 67 65 74 64 6f 63 5d 20 61 73 58 4d 4c 20 p getdoc] asXML
1960: 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 5d 0a 20 -indent none]].
1970: 20 20 20 24 70 20 66 72 65 65 0a 20 20 20 20 73 $p free. s
1980: 65 74 20 72 65 73 75 6c 74 0a 7d 20 2d 72 65 73 et result.} -res
1990: 75 6c 74 20 7b 31 20 7b 65 72 72 6f 72 20 63 6f ult {1 {error co
19a0: 6e 64 69 74 69 6f 6e 20 69 6e 20 63 61 6c 6c 62 ndition in callb
19b0: 61 63 6b 7d 20 32 20 7b 3c 64 6f 63 3e 3c 65 2f ack} 2 {<doc><e/
19c0: 3e 3c 65 20 63 6c 61 73 73 3d 22 65 72 72 6f 72 ><e class="error
19d0: 22 2f 3e 3c 2f 64 6f 63 3e 7d 7d 0a 0a 74 65 73 "/></doc>}}..tes
19e0: 74 20 73 74 61 63 6b 65 64 68 64 6c 2d 32 2e 35 t stackedhdl-2.5
19f0: 20 7b 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 72 {return -code r
1a00: 65 74 75 72 6e 20 77 69 74 68 20 74 63 6c 20 61 eturn with tcl a
1a10: 6e 64 20 43 20 63 6f 64 65 64 20 68 61 6e 64 6c nd C coded handl
1a20: 65 72 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 er} -setup {.
1a30: 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 73 74 catch {unset st
1a40: 61 72 74 65 64 7d 0a 7d 20 2d 62 6f 64 79 20 7b arted}.} -body {
1a50: 0a 20 20 20 20 73 65 74 20 70 20 5b 65 78 70 61 . set p [expa
1a60: 74 20 2d 65 6c 65 6d 65 6e 74 73 74 61 72 74 63 t -elementstartc
1a70: 6f 6d 6d 61 6e 64 20 53 74 61 72 74 5d 0a 20 20 ommand Start].
1a80: 20 20 74 64 6f 6d 20 24 70 20 65 6e 61 62 6c 65 tdom $p enable
1a90: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 63 . set resultc
1aa0: 6f 64 65 20 5b 63 61 74 63 68 20 7b 24 70 20 70 ode [catch {$p p
1ab0: 61 72 73 65 20 7b 3c 64 6f 63 3e 3c 65 2f 3e 3c arse {<doc><e/><
1ac0: 65 20 63 6c 61 73 73 3d 22 72 65 74 75 72 6e 22 e class="return"
1ad0: 2f 3e 3c 65 2f 3e 3c 2f 64 6f 63 3e 7d 7d 5d 0a /><e/></doc>}}].
1ae0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
1af0: 6c 69 73 74 20 24 72 65 73 75 6c 74 63 6f 64 65 list $resultcode
1b00: 20 24 3a 3a 73 74 61 72 74 65 64 28 65 29 20 5b $::started(e) [
1b10: 5b 74 64 6f 6d 20 24 70 20 67 65 74 64 6f 63 5d [tdom $p getdoc]
1b20: 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e asXML -indent n
1b30: 6f 6e 65 5d 5d 0a 20 20 20 20 24 70 20 72 65 73 one]]. $p res
1b40: 65 74 0a 20 20 20 20 63 61 74 63 68 20 7b 75 6e et. catch {un
1b50: 73 65 74 20 73 74 61 72 74 65 64 7d 0a 20 20 20 set started}.
1b60: 20 73 65 74 20 72 65 73 75 6c 74 63 6f 64 65 20 set resultcode
1b70: 5b 63 61 74 63 68 20 7b 24 70 20 70 61 72 73 65 [catch {$p parse
1b80: 20 7b 3c 64 6f 63 3e 3c 65 2f 3e 3c 65 2f 3e 3c {<doc><e/><e/><
1b90: 65 2f 3e 3c 2f 64 6f 63 3e 7d 7d 5d 0a 20 20 20 e/></doc>}}].
1ba0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
1bb0: 24 72 65 73 75 6c 74 63 6f 64 65 20 24 3a 3a 73 $resultcode $::s
1bc0: 74 61 72 74 65 64 28 65 29 20 5b 5b 74 64 6f 6d tarted(e) [[tdom
1bd0: 20 24 70 20 67 65 74 64 6f 63 5d 20 61 73 58 4d $p getdoc] asXM
1be0: 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a L -indent none].
1bf0: 20 20 20 20 24 70 20 66 72 65 65 0a 20 20 20 20 $p free.
1c00: 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 2d 72 65 set result.} -re
1c10: 73 75 6c 74 20 7b 30 20 32 20 7b 3c 64 6f 63 3e sult {0 2 {<doc>
1c20: 3c 65 2f 3e 3c 65 20 63 6c 61 73 73 3d 22 72 65 <e/><e class="re
1c30: 74 75 72 6e 22 2f 3e 3c 2f 64 6f 63 3e 7d 20 30 turn"/></doc>} 0
1c40: 20 33 20 3c 64 6f 63 3e 3c 65 2f 3e 3c 65 2f 3e 3 <doc><e/><e/>
1c50: 3c 65 2f 3e 3c 2f 64 6f 63 3e 7d 0a 0a 74 65 73 <e/></doc>}..tes
1c60: 74 20 73 74 61 63 6b 65 64 68 64 6c 2d 32 2e 36 t stackedhdl-2.6
1c70: 20 7b 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 {return -code e
1c80: 72 72 6f 72 20 77 69 74 68 20 74 63 6c 20 61 6e rror with tcl an
1c90: 64 20 43 20 63 6f 64 65 64 20 68 61 6e 64 6c 65 d C coded handle
1ca0: 72 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 r} -setup {.
1cb0: 63 61 74 63 68 20 7b 75 6e 73 65 74 20 73 74 61 catch {unset sta
1cc0: 72 74 65 64 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a rted}.} -body {.
1cd0: 20 20 20 20 73 65 74 20 70 20 5b 65 78 70 61 74 set p [expat
1ce0: 20 2d 65 6c 65 6d 65 6e 74 73 74 61 72 74 63 6f -elementstartco
1cf0: 6d 6d 61 6e 64 20 53 74 61 72 74 5d 0a 20 20 20 mmand Start].
1d00: 20 74 64 6f 6d 20 24 70 20 65 6e 61 62 6c 65 0a tdom $p enable.
1d10: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 63 6f set resultco
1d20: 64 65 20 5b 63 61 74 63 68 20 7b 24 70 20 70 61 de [catch {$p pa
1d30: 72 73 65 20 7b 3c 64 6f 63 3e 3c 65 2f 3e 3c 65 rse {<doc><e/><e
1d40: 20 63 6c 61 73 73 3d 22 65 72 72 6f 72 22 2f 3e class="error"/>
1d50: 3c 65 2f 3e 3c 2f 64 6f 63 3e 7d 7d 20 6d 73 67 <e/></doc>}} msg
1d60: 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 ]. set result
1d70: 20 5b 6c 69 73 74 20 24 72 65 73 75 6c 74 63 6f [list $resultco
1d80: 64 65 20 24 6d 73 67 20 24 3a 3a 73 74 61 72 74 de $msg $::start
1d90: 65 64 28 65 29 20 5b 5b 74 64 6f 6d 20 24 70 20 ed(e) [[tdom $p
1da0: 67 65 74 64 6f 63 5d 20 61 73 58 4d 4c 20 2d 69 getdoc] asXML -i
1db0: 6e 64 65 6e 74 20 6e 6f 6e 65 5d 5d 0a 20 20 20 ndent none]].
1dc0: 20 24 70 20 72 65 73 65 74 0a 20 20 20 20 63 61 $p reset. ca
1dd0: 74 63 68 20 7b 75 6e 73 65 74 20 73 74 61 72 74 tch {unset start
1de0: 65 64 7d 0a 20 20 20 20 73 65 74 20 72 65 73 75 ed}. set resu
1df0: 6c 74 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 24 ltcode [catch {$
1e00: 70 20 70 61 72 73 65 20 7b 3c 64 6f 63 3e 3c 65 p parse {<doc><e
1e10: 2f 3e 3c 65 2f 3e 3c 65 2f 3e 3c 2f 64 6f 63 3e /><e/><e/></doc>
1e20: 7d 7d 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 }}]. lappend
1e30: 72 65 73 75 6c 74 20 24 72 65 73 75 6c 74 63 6f result $resultco
1e40: 64 65 20 24 3a 3a 73 74 61 72 74 65 64 28 65 29 de $::started(e)
1e50: 20 5b 5b 74 64 6f 6d 20 24 70 20 67 65 74 64 6f [[tdom $p getdo
1e60: 63 5d 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 c] asXML -indent
1e70: 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 70 20 66 72 none]. $p fr
1e80: 65 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c ee. set resul
1e90: 74 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20 7b t.} -result {1 {
1ea0: 65 72 72 6f 72 20 63 6f 6e 64 69 74 69 6f 6e 20 error condition
1eb0: 69 6e 20 63 61 6c 6c 62 61 63 6b 7d 20 32 20 7b in callback} 2 {
1ec0: 3c 64 6f 63 3e 3c 65 2f 3e 3c 65 20 63 6c 61 73 <doc><e/><e clas
1ed0: 73 3d 22 65 72 72 6f 72 22 2f 3e 3c 2f 64 6f 63 s="error"/></doc
1ee0: 3e 7d 20 30 20 33 20 3c 64 6f 63 3e 3c 65 2f 3e >} 0 3 <doc><e/>
1ef0: 3c 65 2f 3e 3c 65 2f 3e 3c 2f 64 6f 63 3e 7d 0a <e/><e/></doc>}.
1f00: 0a 74 65 73 74 20 73 74 61 63 6b 65 64 68 64 6c .test stackedhdl
1f10: 2d 33 2e 31 20 7b 64 6f 6e 27 74 20 72 65 71 75 -3.1 {don't requ
1f20: 65 73 74 20 74 68 65 20 44 4f 4d 20 74 72 65 65 est the DOM tree
1f30: 20 66 72 6f 6d 20 61 20 74 64 6f 6d 20 65 6e 61 from a tdom ena
1f40: 62 6c 65 64 20 70 61 72 73 65 72 7d 20 7b 0a 20 bled parser} {.
1f50: 20 20 20 73 65 74 20 70 20 5b 65 78 70 61 74 5d set p [expat]
1f60: 0a 20 20 20 20 74 64 6f 6d 20 24 70 20 65 6e 61 . tdom $p ena
1f70: 62 6c 65 0a 20 20 20 20 24 70 20 70 61 72 73 65 ble. $p parse
1f80: 20 7b 3c 72 6f 6f 74 3e 3c 61 2f 3e 3c 61 3e 62 {<root><a/><a>b
1f90: 6f 6f 3c 2f 61 3e 3c 2f 72 6f 6f 74 3e 7d 0a 20 oo</a></root>}.
1fa0: 20 20 20 24 70 20 66 72 65 65 0a 7d 20 7b 7d 0a $p free.} {}.
1fb0: 0a 66 6f 72 65 61 63 68 20 70 61 72 73 65 72 20 .foreach parser
1fc0: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 78 [info commands x
1fd0: 6d 6c 70 61 72 73 65 72 2a 5d 20 7b 0a 20 20 20 mlparser*] {.
1fe0: 20 24 70 61 72 73 65 72 20 66 72 65 65 0a 7d 0a $parser free.}.
1ff0: 0a 23 20 63 6c 65 61 6e 75 70 0a 3a 3a 74 63 6c .# cleanup.::tcl
2000: 74 65 73 74 3a 3a 63 6c 65 61 6e 75 70 54 65 73 test::cleanupTes
2010: 74 73 0a 72 65 74 75 72 6e 0a ts.return.