# Features covered: Entities # # This file contains a collection of tests for the TclXML parser. # This file tests the parser's performance on entities. # 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: entity.test,v 1.8 2001/08/02 05:11:53 balls Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { source [file join [pwd] [file dirname [info script]] defs.tcl] } set testlibdir [file dirname [file dirname [file join [pwd] [info script]]]] if {[lsearch $auto_path $testlibdir] < 0} { lappend auto_path $testlibdir } if { ![llength [info commands ::xml::parser]] } { catch {puts stderr "You havent loaded a valid parser class before running this test"} return } proc Start {name attrList args} { incr ::elements } proc pcdata text { append ::result $text } proc EntityRef name { lappend ::references $name append ::result ##entityreference## return {} } test entity-1.1 {parameter entity in document entity} { set ::result {} catch {rename xml::entity-1.1 {}} set parser [xml::parser entity-1.1 \ -characterdatacommand pcdata] $parser parse { ]> %wrong;} set ::result } {%wrong;} test entity-1.2 {character entities in hex} { set ::result {} catch {rename xml::entity-1.2 {}} set parser [xml::parser entity-1.2 \ -characterdatacommand pcdata] $parser parse {A<>$[]} set ::result } {A<>$[]} test entity-1.3 {character entities in decimal} { set ::result {} catch {rename xml::entity-1.3 {}} set parser [xml::parser entity-1.3 \ -characterdatacommand pcdata] $parser parse {A<>$[]} set ::result } {A<>$[]} test entity-1.4 {illegal character entity} { set ::result {} catch {rename xml::entity-1.4 {}} set parser [xml::parser entity-1.4 \ -characterdatacommand pcdata] set err [catch {$parser parse {&#blah;}}] list $err $::result } {1 {}} test entity-2.1 {predefined general entities} { set ::result {} catch {rename xml::entity-2.1 {}} set parser [xml::parser entity-2.1 \ -characterdatacommand pcdata] $parser parse {<>&"'} set ::result } {<>&"'} test entity-2.2 {undefined general entities - no callback} { set ::result {} catch {rename xml::entity-2.2 {}} set parser [xml::parser entity-2.2 \ -characterdatacommand pcdata] set errcode [catch { $parser parse {&undefined;} } msg] list $errcode [regexp {undefined entity} $msg] $::result } {1 1 {}} test entity-2.3 {undefined general entities - with callback} { set ::result {} set ::references {} catch {rename xml::entity-2.3 {}} set parser [xml::parser entity-2.3 \ -characterdatacommand pcdata \ -entityreferencecommand EntityRef \ ] set errcode [catch { $parser parse {&undefined;} } msg] list $::result $::references $errcode $msg } {##entityreference## undefined 0 {}} # This example is from the XML Recommendation, Appendix D p. 29. set example1_p_content {An ampersand (&) may be escaped numerically (&) or with a general entity (&).} test entity-3.1 {replacement text with element markup} { set ::result {} catch {unset ::elements} set ::elements 0 catch {rename xml::entity-3.1 {}} set parser [xml::parser entity-3.1 \ -elementstartcommand Start \ -characterdatacommand pcdata] $parser parse {An ampersand (&#38;) may be escaped numerically (&#38;#38;) or with a general entity (&amp;).

"> ]> &example;} list $::result $::elements } [list $example1_p_content 2] test entity-4.1 {entity references} { set ::result {} set ::references {} catch {rename xml::entity-4.1 {}} set parser [xml::parser entity-4.1 \ -characterdatacommand pcdata \ -entityreferencecommand EntityRef] $parser parse {undefined &myentity; reference} list $::result $::references } {{undefined ##entityreference## reference} myentity} # Test case from bug #431353 submitted by Shaun Lowry #puts stderr "\n\n*** TEST 5.1\n\n" test entity-5.1 {entity references w/- Tcl special characters} { set ::result {} catch {rename xml::entity-5.1 {}} set parser [xml::parser entity-5.1 \ -characterdatacommand pcdata] $parser parse [format { & %s } \{] set ::result } [format { & %s } \{] test entity-5.2 {entity references w/- Tcl special characters} { set ::result {} catch {rename xml::entity-5.2 {}} set parser [xml::parser entity-5.2 \ -characterdatacommand pcdata] $parser parse [format { & %s } \[] set ::result } [format { & %s } \[] test entity-5.3 {entity references w/- Tcl special characters} { set ::result {} catch {rename xml::entity-5.3 {}} set parser [xml::parser entity-5.3 \ -characterdatacommand pcdata] $parser parse [format { & %s } \\] set ::result } [format { & %s } \\] test entity-5.4 {entity references w/- Tcl special characters} { set ::result {} catch {rename xml::entity-5.4 {}} set parser [xml::parser entity-5.4 \ -characterdatacommand pcdata] $parser parse [format { & %s%s } \\ \{] set ::result } [format { & %s%s } \\ \{] # cleanup ::tcltest::cleanupTests return