# Features covered: Elements # # This file tests the parser's performance on elements. # Sourcing this file into Tcl runs the tests and generates output # for errors. No output means no errors were found. # # Copyright (c) 1999-2000 Zveno Pty Ltd. # # $Id: element.test,v 1.5 2003/09/16 22:58:15 rolf Exp $ source [file join [file dir [info script]] loadtdom.tcl] proc parray arrayName { upvar #0 $arrayName arr foreach key [lsort [array names $arrayName]] { lappend result $key $arr($key) } return $result } catch {unset started} proc Start {name atList args} { array set opts $args if {![info exists ::started($name)]} { set ::started($name) 1 } else { incr ::started($name) } } catch {unset ended} proc End {name args} { array set opts $args if {![info exists ::ended($name)]} { set ::ended($name) 1 } else { incr ::ended($name) } } catch {unset elList} proc ElStart {name atList args} { array set opts {-empty 0} array set opts $args lappend ::elList start $name $opts(-empty) } proc ElEnd {name args} { array set opts {-empty 0} array set opts $args lappend ::elList end $name $opts(-empty) } test element-1.1 {document element} { catch {unset ::started} catch {unset ::ended} catch {rename xml::element-1.1 {}} set parser [xml::parser element-1.1 \ -elementstartcommand Start \ -elementendcommand End] $parser parse {} list [array get ::started] [array get ::ended] } {{Test 1} {Test 1}} test element-1.2 {distinct elements} { catch {unset ::started} catch {unset ::ended} catch {rename xml::element-1.2 {}} set parser [xml::parser element-1.2 \ -elementstartcommand Start \ -elementendcommand End] $parser parse {} list [parray ::started] [parray ::ended] } {{Child1 1 Child2 1 Test 1} {Child1 1 Child2 1 Test 1}} proc esh-2.1 {parsername name attlist} { if {$parsername == "element-2.1"} { set ::result 1 } else { set ::result 0 } } test element-2.1 {handler script} { set ::result 0 set p [expat element-2.1 -elementstartcommand [list esh-2.1 element-2.1]] $p parse $p free set ::result } {1} proc eeh-2.2 {parsername name} { if {$parsername == "element-2.2"} { set ::result 1 } else { set ::result 0 } } test element-2.2 {handler script} { set ::result 0 set p [expat element-2.2] $p configure -elementendcommand [list eeh-2.2 element-2.2] $p parse $p free set ::result } {1} test element-2.3 {declare handler proc later} { set ::eshcounter 0 set ::eehcounter 0 catch {rename esh-2.3 {}} catch {rename eeh-2.3 {}} set p [expat -elementstartcommand esh-2.3 -elementendcommand eeh-2.3] proc esh-2.3 {args} { incr ::eshcounter } proc eeh-2.3 {args} { incr ::eehcounter } $p parse {} $p free list $::eshcounter $::eehcounter } {3 3} foreach parser [info commands element-*] { $parser free } # cleanup ::tcltest::cleanupTests return