# Commands covered: ::dom::DOMimplementation serialize # # This file contains a collection of tests for one or more of the # TclDOM commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1998-2003 Zveno Pty Ltd. # # $Id: serialization.test,v 1.13 2003/01/26 04:35:15 balls Exp $ package require tcltest ; namespace import -force tcltest::* if {[catch {package require dom}]} { catch {puts stderr "Cannot load dom package"} return } proc addChild {parent child} { dom::node appendChild $parent $child } # The result may or may not use empty element syntax test serialize-1.1 {single element document} -match regexp -body { set doc [::dom::DOMImplementation create] addChild $doc [set top [::dom::document createElement $doc Test]] ::dom::DOMImplementation serialize $doc } -result {<\?xml version=('|")1\.0('|")\?> ( )?|>)} test serialize-1.2 {element-only document} -match regexp -body { addChild $top [set e1 [::dom::document createElement $top Element1]] addChild $top [set e2 [::dom::document createElement $top Element2]] addChild $top [set e3 [::dom::document createElement $top Element3]] ::dom::DOMImplementation serialize $doc } -result {<\?xml version=('|")1.0('|")\?> ( )?} test serialize-1.3 {serialize element} -constraints {!dom_libxml2} -body { ::dom::DOMImplementation serialize $top } -result {} test serialize-1.4 {serialize non-empty element} -match regexp -body { addChild $e1 [::dom::document createElement $e1 Child1] ::dom::DOMImplementation serialize $doc } -result {<\?xml version=('|")1.0('|")\?> ( )?} test serialize-2.1 {error: missing document element} -constraints {!dom_libxml2} -body { set doc [::dom::DOMImplementation create] set result [catch {::dom::DOMImplementation serialize $doc} msg] list $result $msg } -result {1 {document has no document element}} test serialize-2.1 {error: missing document element} -constraints {dom_libxml2} -body { set doc [::dom::DOMImplementation create] set result [catch {::dom::DOMImplementation serialize $doc} msg] list $result $msg } -result {0 { }} # The result may or may not use empty element syntax test serialize-3.1 {XML declaration: attributes in correct order} -match regexp -body { set doc [::dom::DOMImplementation parse { }] dom::DOMImplementation serialize $doc } -result {<\?xml version=('|")1\.0('|")\?> ( )?|>)} # This test fails if using TclExpat test serialize-3.2 {XML declaration: attributes in correct order} -match regexp -body { set doc [::dom::DOMImplementation parse { }] dom::DOMImplementation serialize $doc } -result {<\?xml version=('|")1.0('|") standalone=('|")yes('|")\?> ( )?|>)} test serialize-3.3 {Doctype declaration} -match regexp -body { set doc [::dom::DOMImplementation parse { }] dom::DOMImplementation serialize $doc } -result {<\?xml version=('|")1.0('|")\?> ( )?|>)} # See bug #525505 test serialize-3.4 {Document prologue} -match regexp -body { set doc [::dom::parse { }] dom::serialize $doc } -result {<\?xml version=('|")1.0('|")\?> ( )?( )?} test serialize-3.5 {Document epilogue} -match regexp -body { set doc [::dom::parse { }] dom::serialize $doc } -result {<\?xml version=('|")1.0('|")\?> ( )?( )?} # Test serialization of markup characters: set stText "LT: < GT: > AMP: &" test serialize-4.1 {Serialization of markup characters in #PCDATA} -constraints {!dom_libxml2} -body { set doc [dom::DOMImplementation parse $stText] dom::DOMImplementation serialize [dom::document cget $doc -documentElement] } -result $stText set stText { } # Result may use different attribute quotes. # Also, only the '<' and '&' are required to be escaped, # but its OK for others to be as well. test serialize-4.2 {Serialization of markup characters in attribute values} -constraints {!dom_libxml2} -match regexp -body { set doc [dom::DOMImplementation parse $stText] dom::DOMImplementation serialize [dom::document cget $doc -documentElement] } -result { )('|")/> } # CDATA Sections may or may not be serialized using CDATA Section syntax set stText \ {some plain text more text} test serialize-4.3 {Preserve CDATA sections} -constraints {!dom_libxml2} -match regexp -body { set doc [dom::DOMImplementation parse $stText] dom::DOMImplementation serialize [dom::document cget $doc -documentElement] } -result {some plain text ()? more text} # Test for bug #512704 test serialize-5.1 {Serialize reserved characters in attribute value} -constraints {!dom_libxml2} -body { set doc [dom::DOMImplementation create] set top [dom::document createElement $doc test] dom::element setAttribute $top q {"all lll" } dom::DOMImplementation serialize $doc } -result { } test serialize-5.1 {Serialize reserved characters in attribute value} -constraints {dom_libxml2} -body { set doc [dom::DOMImplementation create] set top [dom::document createElement $doc test] dom::element setAttribute $top q {"all lll" } dom::DOMImplementation serialize $doc } -result { } # XML Namespace support test serialize-6.1 {XML Namespaces - from parsed document} -match regexp -body { set doc61 [dom::DOMImplementation parse {ABC }] dom::DOMImplementation serialize $doc61 } -result {<\?xml version=("|')1\.0("|')\?> ( )?ABC} test serialize-6.2 {XML Namespaces - from generated document, prefix supplied} -match regexp -body { set doc62 [dom::DOMImplementation create] set de62 [dom::document createElementNS $doc62 urn:test-uri test:Test] dom::document createElementNS $de62 urn:test-uri test:Value dom::DOMImplementation serialize $doc62 } -result {<\?xml version=("|')1\.0("|')\?> } test serialize-6.3 {XML Namespaces - from generated document, prefix not supplied} -match regexp -body { set doc63 [dom::DOMImplementation create] set de63 [dom::document createElementNS $doc63 urn:test-uri Test] dom::document createElementNS $de63 urn:test-uri Value dom::DOMImplementation serialize $doc63 } -result {<\?xml version=("|')1\.0("|')\?> <[a-zA-Z0-9]+:Test xmlns:[a-zA-Z0-9]+=("|')urn:test-uri("|')><[a-zA-Z0-9]+:Value/>} # cleanup ::tcltest::cleanupTests return