File: extension.test

package info (click to toggle)
tclxml 3.3~svn11-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 4,392 kB
  • sloc: ansic: 13,292; tcl: 11,656; xml: 3,269; sh: 559; makefile: 15
file content (141 lines) | stat: -rwxr-xr-x 4,134 bytes parent folder | download | duplicates (3)
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