1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
# 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-2003 Zveno Pty Ltd.
#
# $Id: entity.test,v 1.9 2003/12/03 20:06:36 balls Exp $
package require tcltest
source [file join [tcltest::workingDirectory] tclxmlutils.tcl]
testPackage $::tcltest::parser
namespace eval ::xml::entityTest {
namespace import -force ::tcltest::*
variable SETUP {
variable elements 0
variable result {}
variable references {}
proc Start {name attrList args} {
variable elements
incr elements
}
proc pcdata text {
variable result
append result $text
}
proc EntityRef name {
variable references
variable result
lappend references $name
append result ##entityreference##
return {}
}
set parser [xml::parser \
-characterdatacommand [namespace code pcdata]]
}
variable CLEANUP {
catch {unset elements}
catch {unset result}
catch {unset references}
rename EntityRef {}
rename Start {}
rename pcdata {}
$parser free
}
test entity-1.1 {parameter entity in document entity} -setup $SETUP -body {
$parser parse {<!DOCTYPE Test [
<!ENTITY % Wrong "This is wrong">
]>
<Test>%wrong;</Test>}
set result
} -cleanup $CLEANUP -result {%wrong;}
test entity-1.2 {character entities in hex} -setup $SETUP -body {
$parser parse {<Test>A<>$[]</Test>}
set result
} -cleanup $CLEANUP -result {A<>$[]}
test entity-1.3 {character entities in decimal} -setup $SETUP -body {
$parser parse {<Test>A<>$[]</Test>}
set result
} -cleanup $CLEANUP -result {A<>$[]}
test entity-1.4 {illegal character entity} -setup $SETUP -match regexp -body {
expectError {
$parser parse {<Test>&#blah;</Test>}
}
} -cleanup $CLEANUP -result {(invalid decimal value)|(malformed character entity)}
test entity-2.1 {predefined general entities} -setup $SETUP -body {
$parser parse {<Test><>&"'</Test>}
set result
} -cleanup $CLEANUP -result {<>&"'}
test entity-2.2 {undefined general entities - no callback} -setup $SETUP -match regexp -body {
expectError {
$parser parse {<Test>&undefined;</Test>}
}
} -cleanup $CLEANUP -result {(Entity 'undefined' not defined)|(undefined entity reference)}
test entity-2.3 {undefined general entities - with callback} -setup $SETUP -constraints {!xml_libxml2} -body {
$parser configure \
-entityreferencecommand [namespace code EntityRef]
$parser parse {<Test>&undefined;</Test>}
list $result $references
} -cleanup $CLEANUP -result {##entityreference## undefined}
# This example is from the XML Recommendation, Appendix D p. 29.
variable example1_p_content {An ampersand (&) may be escaped
numerically (&) or with a general entity
(&).}
test entity-3.1 {replacement text with element markup} -setup $SETUP -constraints {!xml_libxml2} -body {
$parser configure \
-elementstartcommand [namespace code Start]
$parser parse {<!DOCTYPE Test [
<!ENTITY example "<p>An ampersand (&#38;) may be escaped
numerically (&#38;#38;) or with a general entity
(&amp;).</p>">
]>
<Test>&example;</Test>}
list $result $elements
} -cleanup $CLEANUP -result [list $example1_p_content 2]
test entity-4.1 {entity references} -setup $SETUP -constraints {!xml_libxml2} -body {
$parser configure \
-entityreferencecommand [namespace code EntityRef]
$parser parse {<Test>undefined &myentity; reference</Test>}
list $result $references
} -cleanup $CLEANUP -result {{undefined ##entityreference## reference} myentity}
# Test case from bug #431353 submitted by Shaun Lowry
test entity-5.1 {entity references w/- Tcl special characters} -setup $SETUP -body {
$parser parse [format {<?xml version="1.0" standalone="no"?>
<!DOCTYPE MyDoc>
<MyDoc>
& %s
</MyDoc>} \{]
set result
} -cleanup $CLEANUP -result [format {
& %s
} \{]
test entity-5.2 {entity references w/- Tcl special characters} -setup $SETUP -body {
$parser parse [format {<?xml version="1.0" standalone="no"?>
<!DOCTYPE MyDoc>
<MyDoc>
& %s
</MyDoc>} \[]
set result
} -cleanup $CLEANUP -result [format {
& %s
} \[]
test entity-5.3 {entity references w/- Tcl special characters} -setup $SETUP -body {
$parser parse [format {<?xml version="1.0" standalone="no"?>
<!DOCTYPE MyDoc>
<MyDoc>
& %s
</MyDoc>} \\]
set result
} -cleanup $CLEANUP -result [format {
& %s
} \\]
test entity-5.4 {entity references w/- Tcl special characters} -setup $SETUP -body {
$parser parse [format {<?xml version="1.0" standalone="no"?>
<!DOCTYPE MyDoc>
<MyDoc>
& %s%s
</MyDoc>} \\ \{]
set result
} -cleanup $CLEANUP -result [format {
& %s%s
} \\ \{]
cleanupTests
}
namespace delete ::xml::entityTest
return
|