# Features covered: XSLT Extensions
#
# This file contains a collection of tests for the TclXSLT package.
# This file tests the parser's performance on tranformations.
# Sourcing this file into Tcl runs the tests and generates output
# for errors. No output means no errors were found.
#
# Copyright (c) 2001-2002 Zveno Pty Ltd.
#
# $Id: extension.test,v 1.4 2002/09/24 21:15:14 balls Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
source [file join [pwd] [file dirname [info script]] defs.tcl]
}
if {[catch {package require xslt 2.3}]} {
catch {puts stderr "Cannot load xslt 2.3 package"}
return
}
namespace eval exttest {
namespace export countargs
}
proc exttest::countargs args {
return [llength $args]
}
proc exttest::testnodes {ns args} {
foreach node $ns {
lappend ::nodenames [dom::node cget $node -nodeName]
}
return [lindex $ns end]
}
proc dumptree doc {
puts stderr "node $doc type [dom::node cget $doc -nodeType] name [dom::node cget $doc -nodeName] value [dom::node cget $doc -nodeValue]"
foreach node [dom::node children $doc] {
set type [dom::node cget $node -nodeType]
switch $type {
element -
document -
documentFragment {
dumptree $node
}
textNode {
puts stderr "node $node type textNode value [dom::node cget $node -nodeValue]"
}
}
}
}
test extension-1.1 {Register extension namespace} {
xslt::extension add http://tclxml.sourceforge.net/schemas/exttest ::exttest
} {}
test extension-2.1 {Extension function} {
set sd [dom::parse {
Stylesheet got value
}]
set ss [xslt::compile $sd]
set xd [dom::parse {
}]
set rd [$ss transform $xd]
dom::serialize $rd -method text
} 2
test extension-2.2 {Extension function, no args} {
set sd [dom::parse {
}]
set ss [xslt::compile $sd]
set xd [dom::parse {
}]
set rd [$ss transform $xd]
dom::serialize $rd -method text
} 0
test extension-2.3 {pass nodeset to function, return nodeset} {
set ::nodenames {}
set sd [dom::parse {
}]
set xd [dom::parse {
First value
Second value
Third value
Fourth
value
}]
set ss [xslt::compile $sd]
set rd [$ss transform $xd]
list [dom::serialize $rd -method text] $::nodenames
} {{Third value} {value1 value2 value3 value4}}
# cleanup
::tcltest::cleanupTests
return