home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / xuibuilder / TclXML-1.1.1 / tests / attribute.test < prev    next >
Text File  |  2000-11-02  |  6KB  |  229 lines

  1. # Features covered:  Attribute Lists
  2. #
  3. # This file contains a collection of tests for the TclXML parser.
  4. # This file tests the parser's performance on Attribute Lists.
  5. # Sourcing this file into Tcl runs the tests and generates output
  6. # for errors.  No output means no errors were found.
  7. #
  8. # Copyright (c) 1998 Zveno Pty Ltd.
  9. #
  10. # $Id: attribute.test,v 1.1.1.1 1996/02/22 06:06:14 daniel Exp $
  11.  
  12. if {[string compare test [info procs test]] == 1} then {source defs}
  13.  
  14. if {[catch {package require xml 1.6}]} {
  15.     catch {puts stderr "Cannot load xml 1.6 package"}
  16.     return
  17. }
  18.  
  19. catch {unset result}
  20. proc EStart {tagName attrList} {
  21.     global result
  22.     #puts stderr [list EStart $tagName $attrList]
  23.     foreach {name value} $attrList {
  24.     set result($tagName,$name) $value
  25.     }
  26. }
  27. catch {unset ::pcdata}
  28. proc pcdata t {
  29.     append ::pcdata $t
  30. }
  31.  
  32. test attrList-1.1 {empty attribute list} {
  33.     catch {unset ::result}
  34.  
  35.     catch {rename xml::attrList-1.1 {}}
  36.     set parser [xml::parser attrList-1.1 \
  37.     -elementstartcommand EStart]
  38.     $parser parse {<?xml version="1.0"?>
  39. <!DOCTYPE Test>
  40. <Test></Test>
  41. }
  42.     array size result
  43. } 0
  44.  
  45. test attrList-1.2 {single attribute} {
  46.     catch {unset ::result}
  47.  
  48.     catch {rename xml::attrList-1.2 {}}
  49.     set parser [xml::parser attrList-1.2 \
  50.     -elementstartcommand EStart]
  51.     $parser parse {<?xml version="1.0"?>
  52. <!DOCTYPE Test>
  53. <Test attr="1"></Test>
  54. }
  55.  
  56.     array get result
  57. } {Test,attr 1}
  58.  
  59. test attrList-1.3 {multiple distinct attributes} {
  60.     catch {unset ::result}
  61.  
  62.     catch {rename xml::attrList-1.3 {}}
  63.     set parser [xml::parser attrList-1.3 \
  64.     -elementstartcommand EStart]
  65.     $parser parse {<?xml version="1.0"?>
  66. <!DOCTYPE Test>
  67. <Test first="1" second='2'></Test>
  68. }
  69.  
  70.     list [array size result] $result(Test,first) $result(Test,second)
  71. } {2 1 2}
  72.  
  73. test attrList-1.4 {hyphen in attribute name} {
  74.     catch {unset ::result}
  75.  
  76.     catch {rename xml::attrList-1.4 {}}
  77.     set parser [xml::parser attrList-1.4 \
  78.     -elementstartcommand EStart]
  79.     $parser parse {<?xml version="1.0"?>
  80. <!DOCTYPE Test>
  81. <Test first-attr="1"></Test>
  82. }
  83.  
  84.     array get result
  85. } {Test,first-attr 1}
  86.  
  87. test attrList-2.1 {right angle bracket in attribute value} {
  88.     catch {unset ::result}
  89.  
  90.     catch {rename xml::attrList-2.1 {}}
  91.     set parser [xml::parser attrList-2.1 \
  92.     -elementstartcommand EStart]
  93.     $parser parse {<?xml version="1.0"?>
  94. <!DOCTYPE Test>
  95. <Test attr="value>"></Test>
  96. }
  97.  
  98.     array get result
  99. } {Test,attr value>}
  100.  
  101. test attrList-2.2 {right angle bracket in attribute value} {
  102.     catch {unset ::result}
  103.  
  104.     catch {rename xml::attrList-2.2 {}}
  105.     set parser [xml::parser attrList-2.2 \
  106.     -elementstartcommand EStart]
  107.     $parser parse {<?xml version="1.0"?>
  108. <!DOCTYPE Test>
  109. <Test attr="value1>value2"></Test>
  110. }
  111.  
  112.     array get result
  113. } {Test,attr value1>value2}
  114.  
  115. test attrList-2.3 {right angle bracket in attribute value} {
  116.     catch {unset ::result}
  117.  
  118.     catch {rename xml::attrList-2.3 {}}
  119.     set parser [xml::parser attrList-2.3 \
  120.     -elementstartcommand EStart]
  121.     $parser parse {<?xml version="1.0"?>
  122. <!DOCTYPE Test>
  123. <Test attr1="value1" attr2="value2>"></Test>
  124. }
  125.  
  126.     array get result
  127. } {Test,attr1 value1 Test,attr2 value2>}
  128.  
  129. test attrList-2.4 {right angle bracket in attribute value} {
  130.     catch {unset ::result}
  131.  
  132.     catch {rename xml::attrList-2.4 {}}
  133.     set parser [xml::parser attrList-2.4 \
  134.     -elementstartcommand EStart]
  135.     $parser parse {<?xml version="1.0"?>
  136. <!DOCTYPE Test>
  137. <Test attr2="value2>" attr1="value1"></Test>
  138. }
  139.  
  140.     array get result
  141. } {Test,attr1 value1 Test,attr2 value2>}
  142.  
  143. test attrList-2.5 {right angle brackets in attribute values} {
  144.     catch {unset ::result}
  145.  
  146.     catch {rename xml::attrList-2.5 {}}
  147.     set parser [xml::parser attrList-2.5 \
  148.     -elementstartcommand EStart]
  149.     $parser parse {<?xml version="1.0"?>
  150. <!DOCTYPE Test>
  151. <Test attr1="value>1" attr2="value>2"></Test>
  152. }
  153.  
  154.     array get result
  155. } {Test,attr1 value>1 Test,attr2 value>2}
  156.  
  157. test attrList-2.6 {right angle brackets in attribute values} {
  158.     catch {unset ::result}
  159.     catch {unset ::pcdata}
  160.  
  161.     catch {rename xml::attrList-2.6 {}}
  162.     set parser [xml::parser attrList-2.6 \
  163.     -elementstartcommand EStart \
  164.     -characterdatacommand pcdata]
  165.     $parser parse {<?xml version="1.0"?>
  166. <!DOCTYPE Test>
  167. <Test attr1="value>1">some text</Test>
  168. }
  169.  
  170.     list [array get result] $::pcdata
  171. } {{Test,attr1 value>1} {some text}}
  172.  
  173. test attrList-3.1 {unnested left brace in attribute value} {
  174.     catch {unset ::result}
  175.  
  176.     catch {rename xml::attrList-3.1 {}}
  177.     set parser [xml::parser attrList-3.1 \
  178.     -elementstartcommand EStart]
  179.     $parser parse [format {<?xml version="1.0"?>
  180. <!DOCTYPE Test>
  181. <Test attr="%svalue"></Test>
  182. } \{]
  183.  
  184.     array get result
  185. } [list Test,attr [format {%svalue} \{]]
  186.  
  187. test attrList-3.2 {unnested right brace in attribute value} {
  188.     catch {unset ::result}
  189.  
  190.     catch {rename xml::attrList-3.2 {}}
  191.     set parser [xml::parser attrList-3.2 \
  192.     -elementstartcommand EStart]
  193.     $parser parse [format {<?xml version="1.0"?>
  194. <!DOCTYPE Test>
  195. <Test attr="value%s"></Test>
  196. } \}]
  197.  
  198.     array get result
  199. } [list Test,attr [format {value%s} \}]]
  200.  
  201. test attrList-3.3 {Tcl special characters in attribute value} {
  202.     catch {unset ::result}
  203.  
  204.     catch {rename xml::attrList-3.3 {}}
  205.     set parser [xml::parser attrList-3.3 \
  206.     -elementstartcommand EStart]
  207.     $parser parse {<?xml version="1.0"?>
  208. <!DOCTYPE Test>
  209. <Test attr="dollar $ backslash \ brackets [puts hello]"></Test>
  210. }
  211.  
  212.     array get result
  213. } {Test,attr {dollar $ backslash \\ brackets [puts hello]}}
  214.  
  215. test attrList-4.1 {Unquoted attribute value} {
  216.     catch {unset ::result}
  217.  
  218.     catch {rename xml::attrList-3.3 {}}
  219.     set parser [xml::parser attrList-3.3 \
  220.     -elementstartcommand EStart]
  221.     set result [catch {
  222.     $parser parse {<?xml version="1.0"?>
  223. <!DOCTYPE Test>
  224. <Test attr=noquotes></Test>
  225. }} msg]
  226.  
  227.     list $result $msg
  228. } [list 1 {{invalid value for attribute "attr"} around line 2}]
  229.