# Features covered: PCDATA
#
# This file contains a collection of tests for the TclXML parser.
# This file tests the parser's performance on PCDATA.
# Sourcing this file into Tcl runs the tests and generates output
# for errors. No output means no errors were found.
#
# Copyright (c) 1998-2002 Zveno Pty Ltd.
#
# $Id: pcdata.test,v 1.7 2002/09/06 23:15:57 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
incr ::pcdataCounter
}
proc Estart {tagName attrList} {
switch -- $tagName {
Test {
}
default {
incr ::element
}
}
}
proc EStop tagname {
}
test pcdata-1.1 {Simple PCDATA} {
set ::result {}
set ::element 0
set ::pcdataCounter 0
catch {rename xml::pcdata-1.1 {}}
set parser [xml::parser pcdata-1.1 \
-elementstartcommand Estart \
-elementendcommand EStop \
-characterdatacommand pcdata]
$parser parse {
This is PCDATA
}
list $::result $::element
} {{This is PCDATA} 0}
test pcdata-1.2 {PCDATA section with Tcl specials} {
set ::result {}
set ::element 0
set ::pcdataCounter 0
catch {rename xml::pcdata-1.2 {}}
set parser [xml::parser pcdata-1.2 \
-elementstartcommand Estart \
-elementendcommand EStop \
-characterdatacommand pcdata]
$parser parse {
Dollar $ backslash \ square brackets [ ] braces { }
}
list $::result $::element
} {{Dollar $ backslash \ square brackets [ ] braces { }} 0}
# Requested by Marshall Rose, 20/3/1999
test pcdata-1.3 {PCDATA with no entity expansion} {
set ::result {}
set ::element 0
set ::pcdataCounter 0
catch {rename xml::pcdata-1.3 {}}
set parser [xml::parser pcdata-1.3 \
-elementstartcommand Estart \
-elementendcommand EStop \
-characterdatacommand pcdata \
-defaultexpandinternalentities 0]
$parser parse {
This is <PCDATA>
}
list $::result $::pcdataCounter
} {{This is <PCDATA>} 1}
# Test case from bug #468029 contributed by kenstir@users.sourceforge.net
test pcdata-1.4 {PCDATA with Tcl special character} {
set ::result {}
catch {rename xml::pcdata-1.4 {}}
set parser [xml::parser pcdata-1.4 \
-characterdatacommand pcdata]
$parser parse {UPPER('new')$UPPER(TKT_STATE)}
set ::result
} {UPPER('new')$UPPER(TKT_STATE)}
# Test case from bug #515972 contributed by kenstir@users.sourceforge.net
# Similar to #468029
test pcdata-1.5 {PCDATA with Tcl special character} {
set ::result {}
catch {rename xml::pcdata-1.5 {}}
set parser [xml::parser pcdata-1.5 \
-characterdatacommand pcdata]
$parser parse {Welcome $to [\{]asd &asd f@af!a.htm}
set ::result
} {Welcome $to [\{]asd &asd f@af!a.htm}
test pcdata-2.1 {Bad PCDATA: illegal Unicode character} {
set ::result {}
catch {rename xml::pcdata-2.1 {}}
set parser [xml::parser pcdata-2.1 \
-characterdatacommand pcdata]
catch {$parser parse [format {Bad %s character} \x04]}
} 1
test pcdata-2.2 {Bad PCDATA: entity resolves to illegal Unicode character} {
set ::result {}
catch {rename xml::pcdata-2.2 {}}
set parser [xml::parser pcdata-2.2 \
-characterdatacommand pcdata]
catch {$parser parse {Bad character}}
} 1
# cleanup
::tcltest::cleanupTests
return