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
|
# 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) 2008 Explain
# http://www.explain.com.au/
# Copyright (c) 2001-2003 Zveno Pty Ltd.
#
# $Id: extension.test,v 1.5 2003/12/03 20:20:39 balls Exp $
package require tcltest
source [file join [tcltest::workingDirectory] tclxsltutils.tcl]
testPackage xslt
namespace eval ::xslt::extensionTest {
namespace import -force ::tcltest::*
namespace eval ::xslt::extensionTest::exttest {
namespace export countargs
}
proc ::xslt::extensionTest::exttest::countargs args {
return [llength $args]
}
proc ::xslt::extensionTest::exttest::testnodes {ns args} {
variable nodenames
foreach node $ns {
lappend nodenames [dom::node cget $node -nodeName]
}
return [lindex $ns end]
}
variable SETUP {
variable nodenames {}
xslt::extension add http://tclxml.sourceforge.net/schemas/exttest ::xslt::extensionTest::exttest
set srcdoc [dom::parse {<?xml version="1.0"?>
<Test>
<value1>First value</value1>
<value2>Second value</value2>
<value3>Third value</value3>
<value4>
<para>Fourth</para>
<para>value</para>
</value4>
</Test>
}]
}
variable CLEANUP {
catch {unset nodenames}
xslt::extension remove http://tclxml.sourceforge.net/schemas/exttest
dom::destroy $srcdoc
dom::destroy $stydoc
rename $ssheet {}
}
test extension-1.1 {Register extension namespace} -body {
xslt::extension add http://tclxml.sourceforge.net/schemas/exttest ::exttest
} -cleanup {
xslt::extension remove http://tclxml.sourceforge.net/schemas/exttest
} -result {}
test extension-1.2 {Unregister extension namespace} -setup {
xslt::extension add http://tclxml.sourceforge.net/schemas/exttest ::exttest
} -body {
xslt::extension remove http://tclxml.sourceforge.net/schemas/exttest
} -result {}
test extension-2.1 {Extension function} -setup {
eval $SETUP
set stydoc [dom::parse {<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:ext='http://tclxml.sourceforge.net/schemas/exttest'
extension-element-prefixes='ext'>
<xsl:output method='text'/>
<xsl:template match='/'>
<xsl:variable name='value' select='ext:countargs("arg1", "arg2")'/>
<xsl:value-of select='$value'/>
</xsl:template>
</xsl:stylesheet>
}]
set ssheet [xslt::compile $stydoc]
} -body {
set result [$ssheet transform $srcdoc]
dom::serialize $result -method text
} -cleanup $CLEANUP -result 2
test extension-2.2 {Extension function, no args} -setup {
eval $SETUP
set stydoc [dom::parse {<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:ext='http://tclxml.sourceforge.net/schemas/exttest'
extension-element-prefixes='ext'>
<xsl:output method='text'/>
<xsl:template match='/'>
<xsl:variable name='value' select='ext:countargs()'/>
<xsl:value-of select='$value'/>
</xsl:template>
</xsl:stylesheet>
}]
set ssheet [xslt::compile $stydoc]
} -body {
set result [$ssheet transform $srcdoc]
dom::serialize $result -method text
} -cleanup $CLEANUP -result 0
test extension-2.3 {pass nodeset to function, return nodeset} -setup {
eval $SETUP
set stydoc [dom::parse {<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:ext='http://tclxml.sourceforge.net/schemas/exttest'
extension-element-prefixes='ext'>
<xsl:output method='text'/>
<xsl:template match='/Test'>
<xsl:value-of select='ext:testnodes(*)/preceding-sibling::*[1]'/>
</xsl:template>
</xsl:stylesheet>
}]
set ssheet [xslt::compile $stydoc]
} -body {
set result [$ssheet transform $srcdoc]
list [dom::serialize $result -method text] $::xslt::extensionTest::exttest::nodenames
} -cleanup $CLEANUP -result {{Third value} {value1 value2 value3 value4}}
cleanupTests
}
namespace delete ::xslt::extensionTest
return
|