# Features covered: XSLT Transformations
#
# 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: transform.test,v 1.3 2002/03/01 03:33:22 balls Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
source [file join [pwd] [file dirname [info script]] defs.tcl]
}
if {[catch {package require dom 2.1}]} {
catch {puts stderr "Cannot load dom 2.1 package"}
return
}
if {[catch {package require xslt 1.0}]} {
catch {puts stderr "Cannot load xslt 1.0 package"}
return
}
set style1 [dom::libxml2::parse {
Test value
}]
set xml1 [dom::libxml2::parse ]
set xml2 [dom::libxml2::parse ]
# In-memory tests
test transform-1.1 {Single, simple XSLT Transformation} {
set result [::xslt::transform $style1 $xml1]
dom::libxml2::serialize $result
} {Test value}
test transform-1.2 {Multiple simple XSLT Transformations} {
catch {unset ssheet}
catch {unset result}
set ssheet $style1
set result1 [::xslt::transform $ssheet $xml1]
# Stylesheet is now cached
set result2 [::xslt::transform $ssheet $xml1]
list [::dom::libxml2::serialize $result1] [::dom::libxml2::serialize $result2]
} [list {Test value} {Test value}]
test transform-1.3 {Complex XSLT Transformation} {
catch {unset ssheet}
set ch [open transform-1.3.xsl]
set ssheet [::dom::libxml2::parse [read $ch]]
close $ch
set ch [open transform-1.3.xml]
set source [::dom::libxml2::parse [read $ch]]
close $ch
set ch [open transform-1.3-result.html]
set expectedxml [read $ch]
close $ch
set result [::xslt::transform $ssheet $source]
set resultxml [::dom::libxml2::serialize $result]
set e [expr {$resultxml == $expectedxml}]
if {$e == 0} {
set ch [open result.xml w]
puts $ch $resultxml
close $ch
set ch [open expected.xml w]
puts $ch $expectedxml
close $ch
}
set e
} 1
# Source documents in files
# Stylesheets with includes/imports
# Source documents with external entities
# Parameters
test transform-5.1 {Pass parameters} {
set style_5_1 [::dom::libxml2::parse {
wrong value
}]
set result_5_1 [::xslt::transform $style_5_1 $xml1 test {correct value}]
::dom::libxml2::serialize $result_5_1
} {correct value}
test transform-5.2 {Pass parameter, calculate result} {
# Create a large source document
set sourcexml_5_2 {
}
for {set i 0} {$i < 1000} {incr i} {
append source " \n"
}
append source {
}
set source_5_2 [::dom::libxml2::parse $sourcexml_5_2]
set style_5_2 [::dom::libxml2 {
ooooXXXXoooo
}]
set result_5_2 [::xslt::transform $style_5_2 $source_5_2 test '100']
expr {[string length $result] == 1000 * 100 * [string length "ooooXXXXoooo"]}
} {1}
# cleanup
::tcltest::cleanupTests
return