# Features covered: CDATA sections # # This file tests the parser's performance on CDATA sections. # Sourcing this file into Tcl runs the tests and generates output # for errors. No output means no errors were found. # # Copyright (c) 1998-2000 Zveno Pty Ltd. # # $Id: cdata.test,v 1.7 2003/09/16 22:58:15 rolf Exp $ source [file join [file dir [info script]] loadtdom.tcl] catch {unset result} proc pcdata data { append ::result $data } proc Estart {tagName attrList} { switch -- $tagName { Test { } default { incr ::element } } } proc EStop tagname { } test cdata-1.1 {Simple CDATA section} { set ::result {} set ::element 0 catch {rename xml::cdata-1.1 {}} set parser [xml::parser cdata-1.1 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { } list $::result $::element } {{This is CDATA} 0} test cdata-1.2 {CDATA test contributed by Richard Emberson (emberson@netintouch.com)} { set ::result {} set ::element 0 catch {rename xml::cdata-1.2 {}} set parser [xml::parser cdata-1.2 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { } list $::result $::element } {{ 928806871035 } 1} # Test bug: ']]>' is not valid character data (XML Rec. subsect. 2.4) - # this should produce a warning. test cdata-2.0 {CDATA section interpersed with comment} { set ::result {} set ::element 0 catch {rename xml::cdata-2.0 {}} set parser [xml::parser cdata-2.0 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { ]]> -->]]>} list $::result $::element } {{ ]]>} 0} test cdata-2.1 {CDATA section with an angle bracket} { set ::result {} set ::element 0 catch {rename xml::cdata-2.1 {}} set parser [xml::parser cdata-2.1 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { greater than sign]]> } list $::result $::element } {{This is a > greater than sign} 0} # Test case contributed by Marshall Rose (mrose@dbc.mtview.ca.us) test cdata-2.2 {CDATA section with multiple angle brackets} { set ::result {} set ::element 0 catch {rename xml::cdata-2.2 {}} set parser [xml::parser cdata-2.2 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { ... ]]> } list $::result $::element } {{ ... } 1} # Test case contributed by J. Linnenkohl (jlinnen@c-s-k.de) test cdata-2.3 {CDATA section with square brackets and curly braces} { set ::result {} set ::element 0 catch {rename xml::cdata-2.3 {}} set parser [xml::parser cdata-2.3 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { } list $::result $::element } {{ proc arithmetic_add {groups inputs outputs atts} { set ret_val "" set t "Hello World" set l [string length $t] return $ret_val } } 1} test cdata-2.4 {CDATA section with angle brackets and curly braces} { set ::result {} set ::element 0 catch {rename xml::cdata-2.4 {}} set parser [xml::parser cdata-2.4 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { 2] set t "Hello World" set l [string length $t] return $ret_val } ]]> } list $::result $::element } {{ proc arithmetic_add {groups inputs outputs atts} { set ret_val [expr 1 > 2] set t "Hello World" set l [string length $t] return $ret_val } } 1} test cdata-2.5 {CDATA section with angle brackets, Tcl specials trailing CDATA section} { set ::result {} set ::element 0 catch {rename xml::cdata-2.5 {}} set parser [xml::parser cdata-2.5 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { 2] set t "Hello World" set l [string length $t] return $ret_val } ]]> that is {jolly} $good } list $::result $::element } {{ proc arithmetic_add {groups inputs outputs atts} { set ret_val [expr 1 > 2] set t "Hello World" set l [string length $t] return $ret_val } that is {jolly} $good } 1} # Test case contributed by Marshall Rose (mrose@dbc.mtview.ca.us) test cdata-3.1 {CDATA section with PI and Tcl special characters} { set ::result {} set ::element 0 catch {rename xml::cdata-3.1 {}} set parser [xml::parser cdata-3.1 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { this is a \ test ]]> } list $::result $::element } {{ this is a \ test } 2} test cdata-4.1 {CDATA section with entity reference} { set ::result {} set ::element 0 catch {rename xml::cdata-4.1 {}} set parser [xml::parser cdata-4.1 \ -elementstartcommand Estart \ -elementendcommand EStop \ -characterdatacommand pcdata] $parser parse { } list $::result $::element } {{no entity <references>} 0} test cdata-5.1 {CDATA section whiteCDATAs} { set ::result {} set ::cdata {} catch {rename xml::cdata-5.1 {}} set parser [xml::parser cdata-5.1 \ -ignorewhitecdata 1 \ -characterdatacommand pcdata] $parser parse { foo } list $::result } {foo} test cdata-5.2 {CDATA section whiteCDATAs} { set ::result {} set ::cdata {} catch {rename xml::cdata-5.2 {}} set parser [xml::parser cdata-5.2 \ -characterdatacommand pcdata] $parser parse { foo } list $::result } {{ foo }} proc cdh-6.1 {suppliedData data} { if {$suppliedData == "first arg"} { set ::result 1 } else { set ::result 0 } } test cdata-6.1 {CDATA script} { set ::result 0 set p [xml::parser -characterdatacommand [list cdh-6.1 "first arg"]] $p parse {pcdata} $p free set ::result } {1} test cdata-6.2 {declare handler proc later} { catch {rename cdh-6.2 {}} catch {unset ::cdata} set p [xml::parser -characterdatacommand cdh-6.2] proc cdh-6.2 {data} { append ::cdata $data } $p parse {foodatamore data} $p free set ::cdata } {foodatamore data} foreach parser [info commands cdata-*] { $parser free } # cleanup ::tcltest::cleanupTests return