# Features covered: CDATA sections # # This file contains a collection of tests for the TclXML parser. # 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 2001/02/12 11:10:10 balls Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } if { ![llength [info commands ::xml::parser]] } { catch {puts stderr "You havent loaded a valid parser class before running this test"} return } 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) # SRB 2001-02-11: Test had to modified (slightly) to due non-well-formedness 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 case from bug #130127 reported by rnurmi@users.sourceforge.net test cdata-3.2 {CDATA with Tcl special character} { set ::result {} catch {rename xml::cdata-3.2 {}} set parser [xml::parser cdata-3.2 \ -characterdatacommand pcdata] $parser parse [format { } \\] set ::result } [format %s \\] # Test case from bug #130127 reported by rnurmi@users.sourceforge.net test cdata-3.3 {CDATA with Tcl regular expression} { set ::result {} catch {rename xml::cdata-3.3 {}} set parser [xml::parser cdata-3.3 \ -characterdatacommand pcdata] $parser parse [format {([^<]*)[^%sn]*>([^<]*)[^%sn]*>([-+][0-9]*%s.[0-9][0-9]|-)[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]+)[^%sn]*%s>([0-9]*)%s.[0-9][0-9])]]>} \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\] set ::result } [format {NOWRAP ALIGN=LEFT>([^<]*)[^%sn]*>([^<]*)[^%sn]*>([-+][0-9]*%s.[0-9][0-9]|-)[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]*%s.[0-9][0-9])[^%sn]*>([0-9]+)[^%sn]*%s>([0-9]*)%s.[0-9][0-9])} \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\] 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} # cleanup ::tcltest::cleanupTests return