1# Features covered: domDoc and docObj command 2# 3# This file contains a collection of tests for the two interfaces to 4# DOM docs, the token interface (the domDoc command) and the tcl 5# command interface ([$docObj method ...]). 6# 7# domDoc-1.*: asXML, asHTML 8# domDoc-2.*: publicId, systemId 9# domDoc-3.*: toXSLTcmd 10# domDoc-4.*: asText 11# domDoc-5.*: normalize 12# domDoc-6.*: nodetype 13# domDoc-7.*: insertBefore 14# domDoc-8.*: insertBeforeFromScript 15# domDoc-9.*: replaceChild 16# domDoc-10.*: getElementById 17# domDoc-11.*: firstChild 18# domDoc-12.*: lastChild 19# domDoc-13.*: appendChild 20# domDoc-14.*: removeChild 21# domDoc-15.*: hasChildNodes 22# domDoc-16.*: childNodes 23# domDoc-17.*: ownerDocument 24# domDoc-18.*: appendFromList 25# domDoc-19.*: appendXML 26# domDoc-20.*: selectNodes 27# domDoc-21.*: baseURI 28# domDoc-22.*: appendFromScript 29# domDoc-23.*: getElementsByTagNameNS 30# domDoc-24.*: cdataSectionElements 31# domDoc-25.*: selectNodesNamespaces 32# domDoc-26.*: fragments list 33# domDoc-27.*: deleteXPathCache 34# domDoc-28.*: createElementNS 35# 36# Copyright (c) 2004 - 2007 Rolf Ade. 37 38source [file join [file dir [info script]] loadtdom.tcl] 39 40test domDoc-1.1 {asXML -escapeNonASCII} {need_i18n} { 41 set doc [dom parse [tdom::xmlReadFile \ 42 [file join [file dir [info script]] data/i18n_1.xml]]] 43 set result [$doc asXML -escapeNonASCII] 44 $doc delete 45 set result 46} {<test>абвгдежзий</test> 47} 48 49test domDoc-1.2 {asXML -escapeNonASCII; comments and PI's are not altered} {need_i18n} { 50 set doc [dom parse [tdom::xmlReadFile \ 51 [file join [file dir [info script]] data/i18n_2.xml]]] 52 set result [$doc asXML -indent none -escapeNonASCII] 53 $doc delete 54 set result 55} "<root withUmlauts=\"äöüß\"><!-- A comment with german umlauts: \u00E4\u00F6\u00FC\u00DF --><?\u00E4\u00F6\u00FC\u00DF A processing node with german umlauts?> 56german umlauts: äöüß 57</root>" 58 59test domDoc-1.3 {asHTML -escapeNonASCII -htmlEntities} {need_i18n} { 60 set doc [dom parse {<html><body>äü„‟†</body></html>}] 61 set result [$doc asHTML -escapeNonASCII -htmlEntities] 62 $doc delete 63 set result 64} {<html><body>äü„‟†</body></html>} 65 66 67set doc [dom parse <root/>] 68 69test domDoc-1.4 {asXML -doctypeDeclaration} { 70 $doc asXML -doctypeDeclaration 1 71} {<!DOCTYPE root> 72<root/> 73} 74 75test domDoc-1.5 {asXML -doctypeDeclaration without boolean value (error)} { 76 set errMsg "" 77 catch {$doc asXML -doctypeDeclaration} errMsg 78 set errMsg 79} {-doctypeDeclaration must have a boolean value as argument} 80 81test domDoc-1.6 {asXML -doctypeDeclaration 0} { 82 $doc asXML -doctypeDeclaration 0 83} {<root/> 84} 85 86$doc delete 87 88test domDoc-1.7 {asXML -doctypeDeclaration} { 89 set doc [dom parse {<!DOCTYPE root PUBLIC "-//foo//DTD bar x.y//EN" 90 "file:///boo.baz"><root/>}] 91 set result [$doc asXML -doctypeDeclaration 1] 92 $doc delete 93 set result 94} {<!DOCTYPE root PUBLIC "-//foo//DTD bar x.y//EN" "file:///boo.baz"> 95<root/> 96} 97 98test domDoc-1.8 {asXML -doctypeDeclaration} { 99 set doc [dom parse {<!DOCTYPE root SYSTEM "file:///boo.baz"><root/>}] 100 set result [$doc asXML -doctypeDeclaration 1] 101 $doc delete 102 set result 103} {<!DOCTYPE root SYSTEM "file:///boo.baz"> 104<root/> 105} 106 107test domDoc-1.9 {asXML -doctypeDeclaration} { 108 set doc [dom parse {<!DOCTYPE root SYSTEM "file:///boo.baz"><root/>}] 109 set result [$doc asXML -doctypeDeclaration true] 110 $doc delete 111 set result 112} {<!DOCTYPE root SYSTEM "file:///boo.baz"> 113<root/> 114} 115 116test domDoc-1.10 {asXML - unknown option} { 117 set doc [dom parse {<!DOCTYPE root SYSTEM "file:///boo.baz"><root/>}] 118 set errMsg "" 119 catch {$doc asXML -fooOption 1} errMsg 120 $doc delete 121 set errMsg 122} {bad option "-fooOption": must be -indent, -channel, -escapeNonASCII, -doctypeDeclaration, -xmlDeclaration, -encString, -escapeAllQuot, -indentAttrs, -nogtescape, or -noEmptyElementTag} 123 124test domDoc-1.11 {asXML - non boolean value to -doctypeDeclaration} { 125 set doc [dom parse {<!DOCTYPE root SYSTEM "file:///boo.baz"><root/>}] 126 set errMsg "" 127 catch {$doc asXML -doctypeDeclaration foo} errMsg 128 $doc delete 129 set errMsg 130} {expected boolean value but got "foo"} 131 132test domDoc-1.12 {asXML - shortened option} { 133 set doc [dom parse {<!DOCTYPE root SYSTEM "file:///boo.baz"><root/>}] 134 set result [$doc asXML -doctype 1] 135 $doc delete 136 set result 137} {<!DOCTYPE root SYSTEM "file:///boo.baz"> 138<root/> 139} 140 141test domDoc-1.13 {asHTML -doctypeDeclaration} { 142 set doc [dom createDocument HTML] 143 set result [$doc asHTML -doctypeDeclaration 1] 144 $doc delete 145 set result 146} {<!DOCTYPE HTML> 147<html></html>} 148 149test domDoc-1.14 {asHTML -doctypeDeclaration} { 150 set doc [dom parse {<!DOCTYPE HTML 151 PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" 152 "http://www.w3.org/TR/REC-html40/loose.dtd"> 153 <html><body><p>boo</p></body></html>}] 154 set result [$doc asHTML -doctypeDeclaration 1] 155 $doc delete 156 set result 157} {<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 158<html><body><p>boo</p></body></html>} 159 160test domDoc-1.15 {asXML - processing-instruction without pi value} { 161 set doc [dom parse {<doc><?p?></doc>}] 162 set result [$doc asXML -indent none] 163 $doc delete 164 set result 165} {<doc><?p ?></doc>} 166 167test domDoc-1.16 {asXML - processing-instruction without pi value} { 168 set doc [dom parse {<doc><?p ?></doc>}] 169 set result [$doc asXML -indent none] 170 $doc delete 171 set result 172} {<doc><?p ?></doc>} 173 174test domDoc-1.17 {asHTML - content of script/style tags} { 175 set doc [dom parse { 176 <html><script>a & b</script><style>foo < bar</style></html> 177 }] 178 set result [$doc asHTML] 179 $doc delete 180 set result 181} {<html> 182<script>a & b</script><style>foo < bar</style> 183</html>} 184 185test domDoc-1.18 {asXML -escapeAllQuot} { 186 set doc [dom parse {<doc>This is "strange"</doc>}] 187 set result [$doc asXML -escapeAllQuot] 188 $doc delete 189 set result 190} {<doc>This is "strange"</doc> 191} 192 193test domDoc-1.19 {asXML -escapeAllQuot} { 194 set doc [dom parse {<doc>This is "strange"</doc>}] 195 set result [$doc asXML] 196 $doc delete 197 set result 198} {<doc>This is "strange"</doc> 199} 200 201test domDoc-1.20 {asXML - indentation of comments} { 202 set doc [dom parse {<doc> 203<!--Comment 1--> 204<e1/> 205<!--Comment 2--></doc>}] 206 set result [$doc asXML -indent 4] 207 $doc delete 208 set result 209} {<doc> 210 <!--Comment 1--> 211 <e1/> 212 <!--Comment 2--> 213</doc> 214} 215 216test domDoc-1.21 {asXML -indentAttrs} { 217 set doc [dom parse {<Element attr1="val1" attr2="val2"/>}] 218 set result [$doc asXML -indentAttrs 4] 219 $doc delete 220 set result 221} {<Element 222 attr1="val1" 223 attr2="val2"/> 224} 225 226test domDoc-1.22 {asXML} { 227 set doc [dom createDocument doc] 228 set result [$doc asXML] 229 $doc delete 230 set result 231} {<doc/> 232} 233 234test domDoc-1.23 {asXML -xmlDeclaration} { 235 set doc [dom createDocument doc] 236 set result [$doc asXML -xmlDeclaration 1] 237 $doc delete 238 set result 239} {<?xml version="1.0"?> 240<doc/> 241} 242 243test domDoc-1.23 {asXML -xmlDeclaration} { 244 set doc [dom createDocument doc] 245 set result [$doc asXML -xmlDeclaration 1] 246 $doc delete 247 set result 248} {<?xml version="1.0"?> 249<doc/> 250} 251 252test domDoc-1.24 {asXML just -encString without -xmlDeclaration} { 253 set doc [dom createDocument doc] 254 set result [$doc asXML -encString foo] 255 $doc delete 256 set result 257} {<doc/> 258} 259 260test domDoc-1.25 {asXML -xmlDeclaration -encString} { 261 set doc [dom createDocument doc] 262 set result [$doc asXML -xmlDeclaration 1 -encString foo] 263 $doc delete 264 set result 265} {<?xml version="1.0" encoding="foo"?> 266<doc/> 267} 268 269test domDoc-1.26 {asXML -xmlDeclaration, encoding set by encoding method} { 270 set doc [dom createDocument doc] 271 $doc encoding "foo" 272 set result [$doc asXML -xmlDeclaration 1] 273 $doc delete 274 set result 275} {<?xml version="1.0" encoding="foo"?> 276<doc/> 277} 278 279test domDoc-1.27 {asXML -xmlDeclaration -encString} { 280 set doc [dom createDocument doc] 281 set result [catch { 282 [$doc asXML -xmlDeclaration 1 -encString foo \ 283 -encString bar -wrongOption] 284 }] 285 $doc delete 286 set result 287} 1 288 289test domDoc-1.28 {asXML -xmlDeclaration not xml compliant -encString} { 290 set doc [dom createDocument doc] 291 set result [$doc asXML -xmlDeclaration 1 -encString 1\u2345] 292 $doc delete 293 set result 294} [subst -nocommands -novariables {<?xml version="1.0" encoding="1\u2345"?> 295<doc/> 296}] 297 298test domDoc-1.29 {asXML -nogtescape} { 299 set doc [dom parse {<doc attr="foo>bar">></doc>}] 300 set result [$doc asXML -nogtescape -indent none] 301 $doc delete 302 set result 303} {<doc attr="foo>bar">></doc>} 304 305test domDoc-1.30 {asXML -noEmptyElementTag} { 306 set doc [dom parse {<doc><elm/></doc>}] 307 set result [$doc asXML -noEmptyElementTag -indent none] 308 $doc delete 309 set result 310} {<doc><elm></elm></doc>} 311 312test domDoc-1.31 {asXML '"' in attribute value} { 313 # emacs: " 314 set doc [dom createDocument doc] 315 set root [$doc documentElement] 316 $root setAttribute attr "foo\"bar" 317 set result [$doc asXML -indent none] 318 $doc delete 319 set result 320} {<doc attr="foo"bar"/>} 321 322set doc [dom parse <root/>] 323 324test domDoc-2.1 {publicId - no publicId there} { 325 $doc publicId 326} {} 327 328test domDoc-2.2 {systemId - no systemId there} { 329 $doc systemId 330} {} 331 332$doc delete 333set doc [dom parse {<!DOCTYPE root PUBLIC "-//foo//DTD bar x.y//EN" "file:///boo.baz"><root/>}] 334 335test domDoc-2.3 {publicId from parsed document} { 336 $doc publicId 337} {-//foo//DTD bar x.y//EN} 338 339test domDoc-2.4 {systemId from parsed document} { 340 $doc systemId 341} {file:///boo.baz} 342 343$doc delete 344set doc [dom parse {<!DOCTYPE root SYSTEM "file:///boo.baz"><root/>}] 345 346test domDoc-2.5 {publicId but document has only SYSTEM} { 347 $doc publicId 348} {} 349 350test domDoc-2.6 {systemId, document has only SYSTEM} { 351 $doc systemId 352} {file:///boo.baz} 353 354test domDoc-2.7 {publicId - set public identifier} { 355 set result [$doc publicId "file:///woo.hoo"] 356 append result " [$doc publicId]" 357} { file:///woo.hoo} 358 359test domDoc-2.8 {publicId - set public identifier} { 360 $doc publicId "http://www.tdom.org" 361 $doc asXML -indent no -doctypeDeclaration 1 362} {<!DOCTYPE root PUBLIC "http://www.tdom.org" "file:///boo.baz"> 363<root/>} 364 365test domDoc-2.9 {systemId - set system identifier} { 366 set result [$doc systemId "file:///woo.hoo"] 367 append result " [$doc systemId]" 368} {file:///boo.baz file:///woo.hoo} 369 370test domDoc-2.10 {systemId - set system identifier} { 371 $doc systemId "file:///whooze.moo" 372 $doc asXML -indent no -doctypeDeclaration 1 373} {<!DOCTYPE root PUBLIC "http://www.tdom.org" "file:///whooze.moo"> 374<root/>} 375 376test domDoc-2.11 {publicId - set to empty string} { 377 $doc publicId "" 378 $doc asXML -indent no -doctypeDeclaration 1 379} {<!DOCTYPE root SYSTEM "file:///whooze.moo"> 380<root/>} 381 382test domDoc-2.12 {systemId - set to empty string} { 383 $doc systemId "" 384 $doc asXML -indent no -doctypeDeclaration 1 385} {<!DOCTYPE root> 386<root/>} 387 388$doc delete 389 390 391set doc [dom parse <root/>] 392 393set xslt1 { 394<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 395 <xsl:param name="param1" select="'param1Default'"/> 396 <xsl:param name="param2" select="'param2Default'"/> 397 <xsl:param name="param3" select="'param3Default'"/> 398 <xsl:template match="/"> 399 <xsl:value-of select="$param1"/> 400 <xsl:text> </xsl:text> 401 <xsl:value-of select="$param2"/> 402 <xsl:text> </xsl:text> 403 <xsl:value-of select="$param3"/> 404 <xsl:text> </xsl:text> 405 </xsl:template> 406</xsl:stylesheet>} 407 408test domDoc-3.1 {toXSLTcmd} { 409 set xslt [dom parse -keepEmpties $xslt1] 410 set xsltCmd [$xslt toXSLTcmd] 411 412 $xsltCmd -parameters {param2 newValue param3 "this Value"} $doc resultDoc 413 set result [$resultDoc asXML -indent none] 414 $resultDoc delete 415 $xsltCmd -parameters {param1 "that Value"} $doc resultDoc 416 append result [$resultDoc asXML -indent none] 417 $resultDoc delete 418 $xsltCmd -parameters {param3 "another" param1 "and this"} $doc resultDoc 419 append result [$resultDoc asXML -indent none] 420 $resultDoc delete 421 rename $xsltCmd {} 422 set result 423} {param1Default newValue this Value that Value param2Default param3Default and this param2Default another } 424 425set xslt2 { 426<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 427 <xsl:template match="/"> 428 <xsl:text>dummy result</xsl:text> 429 <xsl:message>This is from xsl:message</xsl:message> 430 </xsl:template> 431</xsl:stylesheet>} 432 433proc msgCmd1 {msg terminate} { 434 global result 435 append result "msgCmd1: $msg " 436} 437 438proc msgCmd2 {msg terminate} { 439 global result 440 append result "msgCmd2: $msg" 441} 442 443test domDoc-3.2 {toXSLTcmd} { 444 set xslt [dom parse -keepEmpties $xslt2] 445 set xsltCmd [$xslt toXSLTcmd] 446 447 set result "" 448 $xsltCmd -xsltmessagecmd msgCmd1 $doc resultDoc 449 $resultDoc delete 450 $xsltCmd -xsltmessagecmd msgCmd2 $doc resultDoc 451 $resultDoc delete 452 rename $xsltCmd {} 453 set result 454} {msgCmd1: This is from xsl:message msgCmd2: This is from xsl:message} 455 456test domDoc-3.3 {toXSLTcmd} { 457 set xslt [dom parse -keepEmpties $xslt1] 458 set xsltCmd [$xslt toXSLTcmd] 459 460 set result [catch {$xsltCmd -bogusOption foo $doc resultDoc} errMsg] 461 lappend result $errMsg 462 lappend result [catch {$xsltCmd $doc resultDoc}] 463 lappend result [$resultDoc asXML -indent none] 464 $resultDoc delete 465 rename $xsltCmd {} 466 set result 467} {1 {bad option "-bogusOption": must be -parameters, -ignoreUndeclaredParameters, -maxApplyDepth, or -xsltmessagecmd} 0 {param1Default param2Default param3Default }} 468 469test domDoc-3.4 {toXSLTcmd} { 470 set xslt [dom parse -keepEmpties $xslt1] 471 set xsltCmd [$xslt toXSLTcmd] 472 473 set result [catch {$xsltCmd -xsltmessagecmd msgCmd1} errMsg] 474 rename $xsltCmd {} 475 lappend result $errMsg 476} {1 {wrong # args: should be "?-parameters parameterList? ?-ignoreUndeclaredParameters? ?-maxApplyDepth int? ?-xsltmessagecmd cmd? <xmlDocObj> ?objVar?"}} 477 478test domDoc-3.5 {toXSLTcmd} { 479 set xslt [dom parse -keepEmpties $xslt1] 480 set xsltCmd [$xslt toXSLTcmd] 481 482 set result [catch {$xsltCmd $doc resultDoc bogus} errMsg] 483 rename $xsltCmd {} 484 lappend result $errMsg 485} {1 {wrong # args: should be "?-parameters parameterList? ?-ignoreUndeclaredParameters? ?-maxApplyDepth int? ?-xsltmessagecmd cmd? <xmlDocObj> ?objVar?"}} 486 487test domDoc-3.6 {toXSLTcmd} { 488 set xslt [dom parse -keepEmpties $xslt1] 489 set xsltCmd [$xslt toXSLTcmd] 490 491 set result [catch {$xsltCmd -parameters {param1 foo} -parameters {param2 foo} $doc resultDoc} errMsg] 492 rename $xsltCmd {} 493 lappend result $errMsg 494} {1 {only one -parameters option allowed}} 495 496test domDoc-3.7 {toXSLTcmd} { 497 set xslt [dom parse -keepEmpties $xslt1] 498 set xsltCmd [$xslt toXSLTcmd] 499 500 set result [catch {$xsltCmd}] 501 $xsltCmd delete 502 set result 503} {1} 504 505test domDoc-3.8 {toXSLTcmd} { 506 set xslt [dom parse -keepEmpties $xslt1] 507 set xsltCmd [$xslt toXSLTcmd] 508 509 set result [catch {$xsltCmd delete bogus}] 510 $xsltCmd delete 511 set result 512} {1} 513 514test domDoc-3.9 {toXSLTcmd} { 515 set xslt [dom parse -keepEmpties $xslt1] 516 set xsltCmd [$xslt toXSLTcmd] 517 518 set result [catch {$xsltCmd transform} errMsg] 519 $xsltCmd delete 520 set result 521} {1} 522 523test domDoc-3.10 {toXSLTcmd} { 524 set xslt [dom parse -keepEmpties $xslt1] 525 set xsltCmd [$xslt toXSLTcmd] 526 $xsltCmd transform $doc resultDoc 527 set result [$resultDoc asXML -indent none] 528 $resultDoc delete 529 $xsltCmd delete 530 set result 531} {param1Default param2Default param3Default } 532 533set xslt3 {<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 534 version="1.0"> 535 <xsl:output cdata-section-elements="foo 536 doc b bar"/> 537 <xsl:template match="/"> 538 <doc>mixed element <b>this is</b> more text</doc> 539 </xsl:template> 540</xsl:stylesheet>} 541 542test domDoc-3.11 {toXSLTcmd} { 543 set xslt [dom parse -keepEmpties $xslt3] 544 set xsltCmd [$xslt toXSLTcmd] 545 set result [list] 546 for {set x 0} {$x < 2} {incr x} { 547 $xsltCmd $doc resultDoc 548 lappend result [lsort [$resultDoc cdataSectionElements *]] 549 lappend result [$resultDoc asXML -indent none] 550 $resultDoc delete 551 } 552 $xsltCmd delete 553 set result 554} {{b bar doc foo} {<doc><![CDATA[mixed element ]]><b><![CDATA[this is]]></b><![CDATA[ more text]]></doc>} {b bar doc foo} {<doc><![CDATA[mixed element ]]><b><![CDATA[this is]]></b><![CDATA[ more text]]></doc>}} 555 556$doc delete 557 558test domDoc-4.1 {asText - syntax check} { 559 dom parse <root/> doc 560 set result [catch {$doc asText foo}] 561 $doc delete 562 set result 563} {1} 564 565test domDoc-4.2 {asText} { 566 dom parse {<root>pcdata <child>foo bar grill</child></root>} doc 567 set result [$doc asText] 568 $doc delete 569 set result 570} {pcdata foo bar grill} 571 572test domDoc-4.3 {asText} { 573 dom parse {<root>pcdata <![CDATA[<greeting>Hello, world!</greeting>]]> 574 more pcdata</root>} doc 575 set result [$doc asText] 576 $doc delete 577 set result 578} {pcdata <greeting>Hello, world!</greeting> 579 more pcdata} 580 581test domDoc-4.4 {asText} { 582 dom parse {<root>pcdata</root>} doc 583 $doc documentElement root 584 set newCDATAnode \ 585 [$doc createCDATASection "<greeting>Hello, world!</greeting>"] 586 $root appendChild $newCDATAnode 587 set result [$doc asText] 588 $doc delete 589 set result 590} {pcdata} 591 592test domDoc-4.5 {asText} { 593 dom parse {<root>encoded chars: > < & " '</root>} doc 594 set result [$doc asText] 595 $doc delete 596 set result 597} {encoded chars: > < & " '} 598# emacs: " 599 600test domDoc-5.1 {normalize} { 601 set doc [dom parse <root><child>text</child></root>] 602 $doc documentElement root 603 set cdataNode [$doc createCDATASection "cdata section text"] 604 set child [$root firstChild] 605 $child appendChild $cdataNode 606 $doc normalize 607 set result [llength [$child childNodes]] 608 lappend result [[$child firstChild] data] 609 $doc delete 610 set result 611} {2 text} 612 613test domDoc-5.2 {normalize} { 614 set doc [dom parse <root><child>text</child></root>] 615 $doc documentElement root 616 set cdataNode [$doc createCDATASection "cdata section text"] 617 set child [$root firstChild] 618 $child appendChild $cdataNode 619 $doc normalize -forXPath 620 set result [llength [$child childNodes]] 621 lappend result [[$child firstChild] data] 622 $doc delete 623 set result 624} {1 {textcdata section text}} 625 626test domDoc-5.3 {normalize} { 627 set doc [dom parse <root><child/></root>] 628 $doc documentElement root 629 set cdataNode [$doc createCDATASection "cdata section text"] 630 set textNode [$doc createTextNode text] 631 set child [$root firstChild] 632 $child appendChild $cdataNode 633 $child appendChild $textNode 634 set result [llength [$child childNodes]] 635 $doc normalize -forXPath 636 lappend result [llength [$child childNodes]] 637 lappend result [[$child firstChild] data] 638 $doc delete 639 set result 640} {2 1 {cdata section texttext}} 641 642test domDoc-5.4 {normalize} { 643 set doc [dom parse <root><child/></root>] 644 $doc documentElement root 645 set cdataNode [$doc createCDATASection "cdata section text"] 646 set child [$root firstChild] 647 $child appendChild $cdataNode 648 $doc normalize 649 set result [$cdataNode nodeType] 650 $doc normalize -forXPath 651 lappend result [$cdataNode nodeType] 652 $doc delete 653 set result 654} {CDATA_SECTION_NODE TEXT_NODE} 655 656test domDoc-5.5 {normalize} { 657 set doc [dom parse <root><child/></root>] 658 $doc documentElement root 659 set textNode [$doc createTextNode ""] 660 set child [$root firstChild] 661 $child appendChild $textNode 662 set result [llength [$child childNodes]] 663 $doc normalize 664 lappend result [llength [$child childNodes]] 665 $doc delete 666 set result 667} {1 0} 668 669test domDoc-5.6 {normalize} { 670 set doc [dom parse <root><child/></root>] 671 $doc documentElement root 672 set cdataNode [$doc createCDATASection ""] 673 set child [$root firstChild] 674 $child appendChild $cdataNode 675 $doc normalize 676 set result [llength [$child childNodes]] 677 $doc normalize -forXPath 678 lappend result [llength [$child childNodes]] 679 $doc delete 680 set result 681} {1 0} 682 683test domDoc-6.1 {nodeType} { 684 set doc [dom parse <root/>] 685 set result [$doc nodeType] 686 $doc delete 687 set result 688} {DOCUMENT_NODE} 689 690test domDoc-6.2 {nodeType} { 691 set doc [dom parse <root/>] 692 set result [catch {$doc nodeType foo}] 693 $doc delete 694 set result 695} {1} 696 697test domDoc-7.1 {insertBefore} { 698 set doc [dom parse {<!-- Comment --><root/>}] 699 set root [$doc documentElement] 700 set newPI [$doc createProcessingInstruction myPI pivalue] 701 $doc insertBefore $newPI $root 702 set result [$doc asXML -indent none] 703 $doc delete 704 set result 705} {<!-- Comment --><?myPI pivalue?><root/>} 706 707test domDoc-7.2 {insertBefore} { 708 set doc [dom parse {<!-- Comment --><root/>}] 709 set newPI [$doc createProcessingInstruction myPI pivalue] 710 $doc insertBefore $newPI "" 711 set result [$doc asXML -indent none] 712 $doc delete 713 set result 714} {<!-- Comment --><root/><?myPI pivalue?>} 715 716test domDoc-7.3 {insertBefore} { 717 set doc [dom parse {<!-- Comment --><root><child/></root>}] 718 set newPI [$doc createProcessingInstruction myPI pivalue] 719 set root [$doc documentElement] 720 set child [$root firstChild] 721 set result [catch {$doc insertBefore $newPI $child} errMsg] 722 lappend result $errMsg 723 $doc delete 724 set result 725} {1 NOT_FOUND_ERR} 726 727namespace eval nodeCmds { 728 dom createNodeCmd elementNode e1 729 dom createNodeCmd elementNode e2 730 dom createNodeCmd commentNode c 731 dom createNodeCmd textNode t 732 dom createNodeCmd cdataNode cdata 733 dom createNodeCmd piNode pi 734 dom createNodeCmd parserNode parser 735} 736 737test domDoc-8.1 {insertBeforeFromScript} { 738 set doc [dom parse {<root><child/></root>}] 739 $doc documentElement root 740 $doc insertBeforeFromScript { 741 nodeCmds::e1 742 } $root 743 set result [$doc asXML -indent none] 744 $doc delete 745 set result 746} {<e1/><root><child/></root>} 747 748test domDoc-8.2 {insertBeforeFromScript} { 749 set doc [dom parse {<root><child/></root>}] 750 $doc insertBeforeFromScript { 751 nodeCmds::e1 752 } "" 753 set result [$doc asXML -indent none] 754 $doc delete 755 set result 756} {<root><child/></root><e1/>} 757 758test domDoc-8.3 {insertBeforeFromScript} { 759 set doc [dom parse {<root><child/></root>}] 760 $doc documentElement root 761 set result [catch {$root insertBeforeFromScript { 762 nodeCmds::e1 763 nodeCmds::e1 { 764 # This is intentionally wrong 765 set foo 1 + 1 766 } 767 } $root}] 768 lappend result [$doc asXML -indent none] 769 $doc delete 770 set result 771} {1 <root><child/></root>} 772 773test domDoc-9.1 {replaceChild} { 774 set doc [dom parse {<!-- Comment --><root><child/></root>}] 775 set root [$doc documentElement] 776 set newNode [$doc createElement newNode] 777 $doc replaceChild $newNode $root 778 set result [$doc asXML -indent none] 779 lappend result [[$doc documentElement] nodeName] 780 $doc delete 781 set result 782} {<!-- Comment --><newNode/> newNode} 783 784set getElementByIdSetup { 785 set doc [dom parse { 786 <!DOCTYPE root [ 787 <!ELEMENT root (elem*)> 788 <!ELEMENT elem ANY> 789 <!ATTLIST elem 790 id ID #IMPLIED 791 name CDATA #IMPLIED> 792 ]> 793 <root> 794 <elem id="7" name="this"/> 795 <elem id="4a" name="that"/> 796 <elem name="and"/> 797 <elem id="a2" name="this"/> 798 </root>}] 799} 800 801test domDoc-10.1 {getElementById} -setup $getElementByIdSetup -body { 802 set result [[$doc getElementById "4a"] @name] 803 lappend result [$doc getElementById "dontexists"] 804} -cleanup { 805 $doc delete 806} -result {that {}} 807 808test domDoc-10.2 {getElementById - only IDs at parsing time will be found} \ 809 -setup $getElementByIdSetup -body { 810 set root [$doc documentElement] 811 set elemNode [$root selectNodes {elem[3]}] 812 if {[$elemNode hasAttribute id]} { 813 error "error in the test code" 814 } 815 $elemNode setAttribute id "new" 816 $doc getElementById "new" 817 } -cleanup { 818 $doc delete 819 } -result {} 820 821test domDoc-10.3 {getElementById} -setup $getElementByIdSetup -body { 822 set root [$doc documentElement] 823 set elemNode [$root selectNodes {elem[2]}] 824 if {![$elemNode hasAttribute id]} { 825 error "error in the test code" 826 } 827 $elemNode setAttribute id "new" 828 [$doc getElementById "new"] getAttribute name 829} -cleanup { 830 $doc delete 831} -result that 832 833test domDoc-10.4 {getElementById} -setup $getElementByIdSetup -body { 834 set root [$doc documentElement] 835 set elemNode [$root selectNodes {elem[2]}] 836 if {![$elemNode hasAttribute id]} { 837 error "error in the test code" 838 } 839 $root removeChild $elemNode 840 [$doc getElementById "4a"] getAttribute name 841} -cleanup { 842 $doc delete 843} -result that 844 845test domDoc-10.5 {getElementById} -setup $getElementByIdSetup -body { 846 set root [$doc documentElement] 847 set elemNode [$root selectNodes {elem[2]}] 848 if {![$elemNode hasAttribute id]} { 849 error "error in the test code" 850 } 851 $elemNode removeAttribute id 852 $doc getElementById "4a" 853} -cleanup { 854 $doc delete 855} -result {} 856 857test domDoc-11.1 {firstChild} { 858 set doc [dom createDocumentNode] 859 set result [$doc firstChild] 860 $doc delete 861 set result 862} {} 863 864test domDoc-11.2 {firstChild} { 865 set doc [dom parse <root/>] 866 set result [[$doc firstChild] nodeName] 867 $doc delete 868 set result 869} {root} 870 871test domDoc-11.3 {firstChild} { 872 set doc [dom parse {<?beforeRoot this?><root/><?afterRoot that?>}] 873 set result [[$doc firstChild] nodeName] 874 $doc delete 875 set result 876} {beforeRoot} 877 878test domDoc-11.4 {firstChild} { 879 set doc [dom parse {<root/>}] 880 set node [$doc firstChild] 881 set newNode [$doc createElement newNode] 882 $doc insertBefore $newNode $node 883 set result [[$doc firstChild] nodeName] 884 $doc delete 885 set result 886} {newNode} 887 888test domDoc-11.5 {Delete top level node} { 889 set doc [dom parse {<!---comment on top level--><root/>}] 890 [$doc firstChild] delete 891 set result [$doc asXML -indent none] 892 $doc delete 893 set result 894} {<root/>} 895 896test domDoc-11.6 {Delete top level node} { 897 set doc [dom parse {<!---comment on top level--><root/>}] 898 [$doc documentElement] delete 899 set result [$doc asXML -indent none] 900 $doc delete 901 set result 902} {<!---comment on top level-->} 903 904test domDoc-12.1 {lastChild} { 905 set doc [dom createDocumentNode] 906 set result [$doc lastChild] 907 $doc delete 908 set result 909} {} 910 911test domDoc-12.2 {lastChild} { 912 set doc [dom parse <root/>] 913 set result [[$doc lastChild] nodeName] 914 $doc delete 915 set result 916} {root} 917 918test domDoc-12.3 {lastChild} { 919 set doc [dom parse {<?beforeRoot this?><root/><?afterRoot that?>}] 920 set result [[$doc lastChild] nodeName] 921 $doc delete 922 set result 923} {afterRoot} 924 925test domDoc-12.4 {lastChild} { 926 set doc [dom parse {<root/>}] 927 set newNode [$doc createElement newNode] 928 $doc appendChild $newNode 929 set result [[$doc lastChild] nodeName] 930 lappend result [[$doc lastChild] parentNode] 931 $doc delete 932 set result 933} {newNode {}} 934 935test domDoc-13.1 {appendChild} { 936 set doc [dom parse {<root/>}] 937 set newNode [$doc createElement newNode] 938 $doc appendChild $newNode 939 set newNode [$doc createComment "a comment"] 940 $doc appendChild $newNode 941 set newNode [$doc createProcessingInstruction this that] 942 $doc appendChild $newNode 943 set newNode [$doc createTextNode "text"] 944 $doc appendChild $newNode 945 set result [$doc asXML -indent none] 946 $doc delete 947 set result 948} {<root/><newNode/><!--a comment--><?this that?>text} 949 950test domDoc-13.2 {appendChild} { 951 set doc [dom createDocumentNode] 952 set newNode [$doc createElement newNode] 953 $doc appendChild $newNode 954 set result [[$doc documentElement] nodeName] 955 $doc delete 956 set result 957} {newNode} 958 959test domDoc-13.3 {appendChild} { 960 set doc [dom createDocumentNode] 961 set newNode [$doc createElement newNode] 962 $doc appendChild $newNode 963 set result [[$doc documentElement] parentNode] 964 $doc delete 965 set result 966} {} 967 968test domDoc-14.1 {removeChild} { 969 set doc [dom parse {<root/>}] 970 $doc removeChild [$doc firstChild] 971 set result [$doc documentElement] 972 $doc delete 973 set result 974} {} 975 976test domDoc-14.2 {removeChild} { 977 set doc [dom parse {<!---comment on top level--><root/>}] 978 $doc removeChild [$doc firstChild] 979 set result [$doc asXML -indent none] 980 $doc delete 981 set result 982} {<root/>} 983 984test domDoc-14.3 {removeChild} { 985 set doc [dom createDocumentNode] 986 set result [catch {$doc removeChild [$doc firstChild]}] 987 $doc delete 988 set result 989} {1} 990 991test domDoc-15.1 {hasChildNodes} { 992 set doc [dom createDocumentNode] 993 set result [$doc hasChildNodes] 994 set newNode [$doc createElement newNode] 995 $doc appendChild $newNode 996 lappend result [$doc hasChildNodes] 997 $doc delete 998 set result 999} {0 1} 1000 1001test domDoc-16.1 {childNodes} { 1002 set doc [dom parse {<?beforeRoot this?><root/><?afterRoot that?>}] 1003 set result {} 1004 foreach node [$doc childNodes] { 1005 lappend result [$node nodeName] 1006 } 1007 $doc delete 1008 set result 1009} {beforeRoot root afterRoot} 1010 1011test domDoc-17.1 {ownerDocument} { 1012 set doc [dom parse <root/>] 1013 set result [expr {$doc == [$doc ownerDocument]}] 1014 $doc delete 1015 set result 1016} {1} 1017 1018test domDoc-18.1 {appendFromList} { 1019 set doc [dom createDocumentNode] 1020 $doc appendFromList {elem {} {}} 1021 set node [$doc documentElement] 1022 set result [list [$node nodeName] [$node parentNode]] 1023 $doc delete 1024 set result 1025} {elem {}} 1026 1027test domDoc-19.1 {appendXML} { 1028 set doc [dom createDocumentNode] 1029 $doc appendXML <test>foo<child><childchild>text</childchild></child></test> 1030 set result [$doc asXML -indent none] 1031 $doc delete 1032 set result 1033} {<test>foo<child><childchild>text</childchild></child></test>} 1034 1035test domDoc-19.2 {appendXML} { 1036 set doc [dom createDocumentNode] 1037 $doc appendXML <test>foo<child><childchild>text</childchild></child></test> 1038 set result [[$doc documentElement] nodeName] 1039 lappend result [[$doc documentElement] parentNode] 1040 lappend result [expr {$doc == [[$doc documentElement] ownerDocument]}] 1041 $doc delete 1042 set result 1043} {test {} 1} 1044 1045test domDoc-19.3 {appendXML} { 1046 set doc [dom createDocument foo] 1047 $doc appendXML <test>foo<child><childchild>text</childchild></child></test> 1048 set result [[$doc documentElement] nodeName] 1049 set result [$doc asXML -indent none] 1050 $doc delete 1051 set result 1052} {<foo/><test>foo<child><childchild>text</childchild></child></test>} 1053 1054 1055test domDoc-20.1 {selectNodes} { 1056 set doc [dom parse {<root><child id="1"/><child id="2"/></root>}] 1057 set result [[$doc selectNodes {root/child[2]}] getAttribute id] 1058 $doc delete 1059 set result 1060} {2} 1061 1062test domDoc-20.2 {selectNodes} { 1063 set doc [dom parse {<root><child id="1"/><child id="2"/></root>}] 1064 set result [[$doc selectNodes {/root/child[2]}] getAttribute id] 1065 $doc delete 1066 set result 1067} {2} 1068 1069test domDoc-20.3 {selectNodes} { 1070 set doc [dom parse {<!-- Comment --><root/><?piAfterRoot value?>}] 1071 set result [list] 1072 foreach node [$doc selectNodes *] { 1073 lappend result [$node nodeName] 1074 } 1075 set result 1076} {root} 1077 1078test domDoc-20.4 {selectNodes} { 1079 set doc [dom parse {<!-- Comment --><root/><?piAfterRoot value?>}] 1080 set result [list] 1081 foreach node [$doc selectNodes node()] { 1082 lappend result [$node nodeType] 1083 } 1084 set result 1085} {COMMENT_NODE ELEMENT_NODE PROCESSING_INSTRUCTION_NODE} 1086 1087test domDoc-20.5 {selectNodes with -namespaces option} { 1088 set doc [dom createDocumentNS "http://tdom.org" tdom:doc] 1089 set node [$doc selectNodes \ 1090 -namespaces {tdom http://tdom.org} \ 1091 tdom:doc] 1092 set result [$node nodeName] 1093 set node [$doc selectNodes \ 1094 -namespaces {myPrefix http://tdom.org} \ 1095 myPrefix:doc] 1096 lappend result [$node nodeName] 1097 lappend result [$doc selectNodes -namespaces {} doc typeVar] 1098 lappend result $typeVar 1099 $doc delete 1100 set result 1101} [list tdom:doc tdom:doc "" empty] 1102 1103test domDoc-20.6 {selectNodes with -namespaces option} { 1104 set doc [dom createDocumentNS "http://tdom.org" tdom:doc] 1105 set node [$doc selectNodes \ 1106 -namespaces {foo bar} \ 1107 -namespaces {a b c d} \ 1108 -namespaces {tdom http://tdom.org} \ 1109 tdom:doc] 1110 set result [$node nodeName] 1111 set node [$doc selectNodes \ 1112 -namespaces {myPrefix http://tdom.org} \ 1113 myPrefix:doc] 1114 lappend result [$node nodeName] 1115 lappend result [$doc selectNodes -namespaces {} doc typeVar] 1116 lappend result $typeVar 1117 $doc delete 1118 set result 1119} [list tdom:doc tdom:doc "" empty] 1120 1121test domDoc-20.7 {selectNodes with -namespaces option} { 1122 set doc [dom createDocumentNS "http://tdom.org" tdom:doc] 1123 catch {set node [$doc selectNodes \ 1124 -namespaces {foo bar} \ 1125 -namespaces {a b c d} \ 1126 -namespaces {wrong_not_pair} \ 1127 tdom:doc]} errMsg 1128 $doc delete 1129 set errMsg 1130} {The "-namespaces" option requires a 'prefix namespace' pairs list as argument} 1131 1132test domDoc-21.1 {baseURI} { 1133 set doc [dom createDocumentNode] 1134 set result [$doc baseURI] 1135 $doc delete 1136 set result 1137} {} 1138 1139test domDoc-21.2 {baseURI} { 1140 set doc [dom parse -baseurl file://foo <root/>] 1141 set result [$doc baseURI] 1142 $doc baseURI http://that.this 1143 lappend result [$doc baseURI] 1144 $doc delete 1145 set result 1146} {file://foo http://that.this} 1147 1148namespace eval nodeCmds { 1149 dom createNodeCmd elementNode e1 1150 dom createNodeCmd elementNode e2 1151 dom createNodeCmd commentNode c 1152 dom createNodeCmd textNode t 1153 dom createNodeCmd cdataNode cdata 1154 dom createNodeCmd piNode pi 1155 dom createNodeCmd parserNode parser 1156} 1157test domDoc-22.1 {appendFromScript} { 1158 set doc [dom createDocumentNode] 1159 $doc appendFromScript nodeCmds::e1 1160 set result [$doc asXML -indent none] 1161 lappend result [[$doc documentElement] nodeName] 1162 $doc delete 1163 set result 1164} {<e1/> e1} 1165 1166test domDoc-22.2 {appendFromScript} { 1167 set doc [dom parse <root/>] 1168 $doc appendFromScript { 1169 nodeCmds::e1 1170 nodeCmds::e2 1171 } 1172 # namespace eval nodeCmds { 1173 # $doc appendFromScript { 1174 # e1 1175 # e2 1176 # } 1177 # } 1178 set result [$doc asXML -indent none] 1179 foreach node [$doc selectNodes *] { 1180 lappend result [$node parentNode] 1181 lappend result [expr {$doc == [$node ownerDocument]}] 1182 } 1183 $doc delete 1184 set result 1185} {<root/><e1/><e2/> {} 1 {} 1 {} 1} 1186 1187test domDoc-22.3 {appendFromScript} { 1188 set doc [dom createDocumentNode] 1189 set nrOfNodeCmdsBefore [info commands domNode*] 1190 $doc appendFromScript { 1191 nodeCmds::e1 1192 } 1193 $doc delete 1194 set nrOfNodeCmdsAfter [info commands domNode*] 1195 expr {$nrOfNodeCmdsBefore == $nrOfNodeCmdsAfter} 1196} {1} 1197 1198test domDoc-23.1 {getElementsByTagNameNS} { 1199 dom createNodeCmd elementNode child 1200 1201 set doc [dom createDocument root] 1202 $doc documentElement root 1203 $root appendFromScript { 1204 for {set x 0} {$x < 250} {incr x} { 1205 child [list xmlns ns$x] {} 1206 } 1207 } 1208 set xml [$doc asXML] 1209 $doc delete 1210 set doc [dom parse $xml] 1211 set result 1 1212 for {set x 0} {$x < 250} {incr x} { 1213 set nodes [$doc getElementsByTagNameNS ns$x *] 1214 if {[llength $nodes] != 1} { 1215 set result 0 1216 } 1217 } 1218 $doc delete 1219 set result 1220} {1} 1221 1222test domDoc-24.1 {cdataSectionElements} { 1223 set doc [dom parse {<root>Some Text</root>}] 1224 set result [catch {$doc cdataSectionElements} errMsg] 1225 lappend result $errMsg 1226 $doc delete 1227 set result 1228} {1 {wrong # args: should be "<domDoc> cdataSectionElements ?URI:?localname ?boolean?"}} 1229 1230test domDoc-24.2 {cdataSectionElements} { 1231 set doc [dom parse {<root>Some Text</root>}] 1232 set result [catch {$doc cdataSectionElements foo bar grill} errMsg] 1233 lappend result $errMsg 1234 $doc delete 1235 set result 1236} {1 {wrong # args: should be "<domDoc> cdataSectionElements ?URI:?localname ?boolean?"}} 1237 1238test domDoc-24.3 {cdataSectionElements} { 1239 set doc [dom parse {<root>Some Text</root>}] 1240 set result [catch {$doc cdataSectionElements root foo} errMsg] 1241 lappend result $errMsg 1242 $doc delete 1243 set result 1244} {1 {expected boolean value but got "foo"}} 1245 1246test domDoc-24.4 {cdataSectionElements} { 1247 set doc [dom parse {<root>Some Text</root>}] 1248 set result [$doc cdataSectionElements root] 1249 $doc delete 1250 set result 1251} {0} 1252 1253test domDoc-24.5 {cdataSectionElements} { 1254 set doc [dom parse {<root>Some Text</root>}] 1255 set result [$doc cdataSectionElements root 0] 1256 lappend result [$doc cdataSectionElements root 1] 1257 lappend result [$doc cdataSectionElements root 0] 1258 $doc delete 1259 set result 1260} {0 1 0} 1261 1262test domDoc-24.6 {cdataSectionElements} { 1263 set doc [dom parse {<root>Some Text</root>}] 1264 set result [$doc cdataSectionElements root 1] 1265 lappend result [$doc asXML -indent none] 1266 $doc delete 1267 set result 1268} {1 {<root><![CDATA[Some Text]]></root>}} 1269 1270test domDoc-24.7 {cdataSectionElements} { 1271 set doc [dom parse {<root><foo></root>}] 1272 foreach element {foo root bar grill} { 1273 $doc cdataSectionElements $element 1 1274 } 1275 set result [$doc asXML -indent none] 1276 $doc delete 1277 set result 1278} {<root><![CDATA[<foo>]]></root>} 1279 1280test domDoc-24.8 {cdataSectionElements} { 1281 set doc [dom parse {<root>text ]</root>}] 1282 $doc cdataSectionElements root 1 1283 set result [$doc asXML -indent none] 1284 $doc delete 1285 set result 1286} {<root><![CDATA[text ]]]></root>} 1287 1288test domDoc-24.9 {cdataSectionElements} { 1289 set doc [dom parse {<root>text ]]</root>}] 1290 $doc cdataSectionElements root 1 1291 set result [$doc asXML -indent none] 1292 $doc delete 1293 set result 1294} {<root><![CDATA[text ]]]]></root>} 1295 1296test domDoc-24.10 {cdataSectionElements} { 1297 set doc [dom parse {<root>text ]]></root>}] 1298 $doc cdataSectionElements root 1 1299 set result [$doc asXML -indent none] 1300 $doc delete 1301 set result 1302} {<root><![CDATA[text ]]]]><![CDATA[>]]></root>} 1303 1304test domDoc-24.11 {cdataSectionElements} { 1305 set doc [dom parse {<root>text ]]> text]]>text</root>}] 1306 $doc cdataSectionElements root 1 1307 set result [$doc asXML -indent none] 1308 $doc delete 1309 set result 1310} {<root><![CDATA[text ]]]]><![CDATA[> text]]]]><![CDATA[>text]]></root>} 1311 1312test domDoc-24.12 {cdataSectionElements} { 1313 set doc [dom parse {<root xmlns="http://foo.bar">text</root>}] 1314 $doc cdataSectionElements http://foo.bar:root 1 1315 set result [$doc asXML -indent none] 1316 $doc delete 1317 set result 1318} {<root xmlns="http://foo.bar"><![CDATA[text]]></root>} 1319 1320test domDoc-24.13 {cdataSectionElements} { 1321 set doc [dom parse {<root>text</root>}] 1322 set result [$doc cdataSectionElements ""] 1323 $doc delete 1324 set result 1325} {0} 1326 1327test domDoc-24.14 {cdataSectionElements} { 1328 set doc [dom parse {<root>text</root>}] 1329 set result [$doc cdataSectionElements *] 1330 $doc delete 1331 set result 1332} {} 1333 1334test domDoc-24.15 {cdataSectionElements} { 1335 set doc [dom parse {<root>text</root>}] 1336 foreach elem {foo bar grill root http://www.foo.org:baz} { 1337 $doc cdataSectionElements $elem 1 1338 } 1339 foreach elem {foo grill} { 1340 $doc cdataSectionElements $elem 0 1341 } 1342 set result [lsort [$doc cdataSectionElements *]] 1343 $doc delete 1344 set result 1345} {bar http://www.foo.org:baz root} 1346 1347test domDoc-24.16 {cdataSectionElements} { 1348 set doc [dom parse {<doc><child>some text</child></doc>}] 1349 $doc documentElement root 1350 set node [$root firstChild] 1351 $doc cdataSectionElements child 1 1352 set result [$node asXML -indent none] 1353 $doc delete 1354 set result 1355} {<child><![CDATA[some text]]></child>} 1356 1357test domDoc-24.17 {cdataSectionElements} { 1358 set doc [dom parse {<doc><child>some text <b>more text</b> text again</child></doc>}] 1359 $doc cdataSectionElements child 1 1360 set result [$doc asXML -indent none] 1361 $doc delete 1362 set result 1363} {<doc><child><![CDATA[some text ]]><b>more text</b><![CDATA[ text again]]></child></doc>} 1364 1365 1366test domDoc-25.1 {selectNodesNamespaces} { 1367 set doc [dom createDocument foo] 1368 set result [$doc selectNodesNamespaces] 1369 $doc delete 1370 set result 1371} {} 1372 1373test domDoc-25.2 {selectNodesNamespaces} { 1374 set doc [dom createDocument foo] 1375 set result [list [$doc selectNodesNamespaces] \ 1376 [$doc selectNodesNamespaces {}] \ 1377 [$doc selectNodesNamespaces]] 1378 $doc delete 1379 set result 1380} {{} {} {}} 1381 1382test domDoc-25.3 {selectNodesNamespaces} { 1383 set doc [dom createDocument foo] 1384 set result [list [$doc selectNodesNamespaces] \ 1385 [$doc selectNodesNamespaces {prefix http://foo.org/uri}] \ 1386 [$doc selectNodesNamespaces] \ 1387 [$doc selectNodesNamespaces {}]] 1388 $doc delete 1389 set result 1390} {{} {prefix http://foo.org/uri} {prefix http://foo.org/uri} {}} 1391 1392test domDoc-25.4 {selectNodesNamespaces} { 1393 set doc [dom createDocument foo] 1394 set result [catch {$doc selectNodesNamespaces wrong} errMsg] 1395 lappend result $errMsg 1396 $doc delete 1397 set result 1398} {1 {The optional argument to the selectNodesNamespaces method must be a 'prefix namespace' pairs list}} 1399 1400test domDoc-25.5 {selectNodesNamespaces} { 1401 set doc [dom parse {<root xmlns="rootdefaultNS"> 1402 <elem1 xmlns="elem1NS"><elem11/></elem1> 1403 <elem2 xmlns="elem2NS"/> 1404 </root>}] 1405 $doc selectNodesNamespaces {default1 rootdefaultNS} 1406 set node [$doc selectNodes default1:root] 1407 set result [list [$node prefix] [$node localName]] 1408 $doc delete 1409 set result 1410} {{} root} 1411 1412test domDoc-25.6 {selectNodesNamespaces} { 1413 set doc [dom parse {<root xmlns="rootdefaultNS"> 1414 <elem1 xmlns="elem1NS"><elem11/></elem1> 1415 <elem2 xmlns="elem2NS"/> 1416 </root>}] 1417 $doc selectNodesNamespaces {default2 elem1NS default1 rootdefaultNS} 1418 set node [$doc selectNodes default1:root/default2:elem1] 1419 set result [list [$node prefix] [$node localName]] 1420 set node [$doc selectNodes default1:root/default2:elem1/default2:elem11] 1421 lappend result [$node nodeName] [$node namespaceURI] 1422 $doc delete 1423 set result 1424} {{} elem1 elem11 elem1NS} 1425 1426test domDoc-25.7 {selectNodesNamespaces} { 1427 set doc [dom parse {<root xmlns="rootdefaultNS"> 1428 <elem1 xmlns="elem1NS"><elem11 xmlns=""/></elem1> 1429 <elem2 xmlns="elem2NS"/> 1430 </root>}] 1431 $doc selectNodesNamespaces {default2 elem1NS default1 rootdefaultNS} 1432 set node [$doc selectNodes default1:root/default2:elem1] 1433 set result [list [$node prefix] [$node localName]] 1434 set node [$doc selectNodes default1:root/default2:elem1/elem11] 1435 lappend result [$node nodeName] [$node namespaceURI] 1436 $doc delete 1437 set result 1438} {{} elem1 elem11 {}} 1439 1440test domDoc-25.7.1 {selectNodesNamespaces} { 1441 set doc [dom parse {<root xmlns="rootdefaultNS"> 1442 <elem1 xmlns="elem1NS"/> 1443 <elem2 xmlns="elem2NS"/> 1444 </root>}] 1445 $doc documentElement root 1446 $root firstChild elem1 1447 $doc createElement elem11 elem11 1448 $elem1 appendChild $elem11 1449 $doc selectNodesNamespaces {default2 elem1NS default1 rootdefaultNS} 1450 set node [$doc selectNodes default1:root/default2:elem1] 1451 set result [list [$node prefix] [$node localName]] 1452 set node [$doc selectNodes default1:root/default2:elem1/elem11] 1453 lappend result [$node nodeName] [$node namespaceURI] 1454 $doc delete 1455 set result 1456} {{} elem1 elem11 {}} 1457 1458test domDoc-25.8 {selectNodesNamespaces} { 1459 set doc [dom parse {<root xmlns="rootdefaultNS"> 1460 <elem1 xmlns="elem1NS"><elem11 xmlns=""/></elem1> 1461 <elem2 xmlns="elem2NS"/> 1462 </root>}] 1463 $doc selectNodesNamespaces {default2 elem1NS default1 rootdefaultNS} 1464 set result [catch {set node [$doc selectNodes \ 1465 -namespaces { 1466 dflt1 elem1NS 1467 dflt2 rootdefaultNS 1468 } \ 1469 default1:root/dflt1:elem1/elem11]} errMsg] 1470 lappend result $errMsg 1471 $doc delete 1472 set result 1473} {1 {Prefix doesn't resolve}} 1474 1475test domDoc-25.9 {selectNodesNamespaces} { 1476 set doc [dom parse {<root xmlns="rootdefaultNS"> 1477 <elem1 xmlns="elem1NS"><elem11 xmlns=""/></elem1> 1478 <elem2 xmlns="elem2NS"/> 1479 </root>}] 1480 $doc selectNodesNamespaces {default2 elem1NS default1 rootdefaultNS} 1481 set node [$doc selectNodes default1:root/default2:elem1] 1482 set result [list [$node prefix] [$node localName]] 1483 set node [$doc selectNodes \ 1484 -namespaces {dflt1 elem1NS dflt2 rootdefaultNS} \ 1485 dflt2:root/dflt1:elem1/elem11] 1486 lappend result [$node nodeName] [$node namespaceURI] 1487 $doc delete 1488 set result 1489} {{} elem1 elem11 {}} 1490 1491 1492test domDoc-26.1 {Fragment list} { 1493 set doc [dom parse {<!---comment on top level--> 1494 <root>text1<child>text2</child>text3</root>}] 1495 $doc removeChild [$doc firstChild] 1496 $doc documentElement root 1497 for {set i 1} {$i < 4} {incr i} { 1498 set removedNode$i [$root removeChild [$root firstChild]] 1499 } 1500 $removedNode2 delete 1501 $root appendChild $removedNode3 1502 $root appendChild $removedNode1 1503 set result [$doc asXML -indent none] 1504 $doc delete 1505 set result 1506} {<root>text3text1</root>} 1507 1508test domDoc-27.1 {deleteXPathCache} { 1509 set doc [dom createDocument doc] 1510 set result [list] 1511 lappend result [$doc deleteXPathCache foo/bar] 1512 $doc selectNodes -cache 1 2+2 1513 lappend result [$doc deleteXPathCache foo/bar] 1514 lappend result [$doc deleteXPathCache 2+2] 1515 lappend result [$doc deleteXPathCache] 1516 $doc selectNodes -cache 1 2+2 1517 $doc delete 1518 set result 1519} {{} {} {} {}} 1520 1521test domDoc-28.1 {createElementNS} { 1522 set doc [dom createDocument doc] 1523 set newElem [$doc createElementNS uri ns:e] 1524 $doc documentElement root 1525 $root appendChild $newElem 1526 set result [$doc asXML -indent none] 1527 $doc delete 1528 set result 1529} {<doc><ns:e xmlns:ns="uri"/></doc>} 1530 1531test domDoc-28.2 {createElementNS} { 1532 set doc [dom createDocument doc] 1533 set newElem [$doc createElementNS uri ns:e] 1534 $newElem setAttributeNS uri ns:att value 1535 $doc documentElement root 1536 $root appendChild $newElem 1537 set result [$doc selectNodes -namespaces {ns uri} string(/doc/ns:e/@ns:att)] 1538 $doc delete 1539 set result 1540} {value} 1541 1542test domDoc-28.3 {createElementNS} { 1543 set doc [dom createDocument doc] 1544 catch {$doc createElementNS "" e} errMsg 1545 $doc delete 1546 set errMsg 1547} {Missing URI in Namespace declaration} 1548 1549 1550# cleanup 1551::tcltest::cleanupTests 1552return 1553