summaryrefslogtreecommitdiffstats
path: root/tests/http.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/http.test')
-rw-r--r--tests/http.test342
1 files changed, 150 insertions, 192 deletions
diff --git a/tests/http.test b/tests/http.test
index 1f4d8b4..2fc0a51 100644
--- a/tests/http.test
+++ b/tests/http.test
@@ -1,18 +1,20 @@
# Commands covered: http::config, http::geturl, http::wait, http::reset
#
# This file contains a collection of tests for the http script library.
-# Sourcing this file into Tcl runs the tests and generates output for errors.
-# No output means no errors were found.
+# Sourcing this file into Tcl runs the tests and
+# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-2000 by Ajuba Solutions.
#
-# See the file "license.terms" for information on usage and redistribution of
-# this file, and for a DISCLAIMER OF ALL WARRANTIES.
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-package require tcltest 2
-namespace import -force ::tcltest::*
+if {[lsearch [namespace children] ::tcltest] == -1} {
+ package require tcltest 2
+ namespace import -force ::tcltest::*
+}
if {[catch {package require http 2} version]} {
if {[info exists http2]} {
@@ -52,7 +54,7 @@ if {![file exists $httpdFile]} {
}
if {[info commands testthread] == "testthread" && [file exists $httpdFile]} {
- set httpthread [testthread create "
+ set httpthread [testthread create -joinable "
source [list $httpdFile]
testthread wait
"]
@@ -76,11 +78,10 @@ if {[info commands testthread] == "testthread" && [file exists $httpdFile]} {
set port [lindex [fconfigure $listen -sockname] 2]
}
}
-
+
test http-1.1 {http::config} {
- http::config -useragent UserAgent
http::config
-} [list -accept */* -proxyfilter http::ProxyRequired -proxyhost {} -proxyport {} -urlencoding utf-8 -useragent "UserAgent"]
+} [list -accept */* -proxyfilter http::ProxyRequired -proxyhost {} -proxyport {} -urlencoding utf-8 -useragent "Tcl http client package $version"]
test http-1.2 {http::config} {
http::config -proxyfilter
} http::ProxyRequired
@@ -96,52 +97,48 @@ test http-1.4 {http::config} {
http::config {*}$savedconf
set x
} {-accept */* -proxyfilter myFilter -proxyhost nowhere.come -proxyport 8080 -urlencoding iso8859-1 -useragent {Tcl Test Suite}}
-test http-1.5 {http::config} -returnCodes error -body {
- http::config -proxyhost {} -junk 8080
-} -result {Unknown option -junk, must be: -accept, -proxyfilter, -proxyhost, -proxyport, -urlencoding, -useragent}
-test http-1.6 {http::config} -setup {
- set oldenc [http::config -urlencoding]
-} -body {
+test http-1.5 {http::config} {
+ list [catch {http::config -proxyhost {} -junk 8080} msg] $msg
+} {1 {Unknown option -junk, must be: -accept, -proxyfilter, -proxyhost, -proxyport, -urlencoding, -useragent}}
+test http-1.6 {http::config} {
set enc [list [http::config -urlencoding]]
http::config -urlencoding iso8859-1
lappend enc [http::config -urlencoding]
-} -cleanup {
- http::config -urlencoding $oldenc
-} -result {utf-8 iso8859-1}
+ http::config -urlencoding [lindex $enc 0]
+ set enc
+} {utf-8 iso8859-1}
test http-2.1 {http::reset} {
catch {http::reset http#1}
} 0
-test http-3.1 {http::geturl} -returnCodes error -body {
- http::geturl -bogus flag
-} -result {Unknown option flag, can be: -binary, -blocksize, -channel, -command, -handler, -headers, -keepalive, -method, -myaddr, -progress, -protocol, -query, -queryblocksize, -querychannel, -queryprogress, -strict, -timeout, -type, -validate}
-test http-3.2 {http::geturl} -returnCodes error -body {
- http::geturl http:junk
-} -result {Unsupported URL: http:junk}
+test http-3.1 {http::geturl} {
+ list [catch {http::geturl -bogus flag} msg] $msg
+} {1 {Unknown option flag, can be: -binary, -blocksize, -channel, -command, -handler, -headers, -keepalive, -method, -myaddr, -progress, -protocol, -query, -queryblocksize, -querychannel, -queryprogress, -strict, -timeout, -type, -validate}}
+test http-3.2 {http::geturl} {
+ catch {http::geturl http:junk} err
+ set err
+} {Unsupported URL: http:junk}
set url //[info hostname]:$port
-set badurl //[info hostname]:6666
-test http-3.3 {http::geturl} -body {
+set badurl //[info hostname]:[expr $port+1]
+test http-3.3 {http::geturl} {
set token [http::geturl $url]
http::data $token
-} -cleanup {
- http::cleanup $token
-} -result "<html><head><title>HTTP/1.0 TEST</title></head><body>
+} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>GET /</h2>
</body></html>"
set tail /a/b/c
set url //[info hostname]:$port/a/b/c
-set fullurl http://user:pass@[info hostname]:$port/a/b/c
+set fullurl HTTP://user:pass@[info hostname]:$port/a/b/c
set binurl //[info hostname]:$port/binary
set posturl //[info hostname]:$port/post
set badposturl //[info hostname]:$port/droppost
-test http-3.4 {http::geturl} -body {
+set authorityurl //[info hostname]:$port
+test http-3.4 {http::geturl} {
set token [http::geturl $url]
http::data $token
-} -cleanup {
- http::cleanup $token
-} -result "<html><head><title>HTTP/1.0 TEST</title></head><body>
+} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>GET $tail</h2>
</body></html>"
@@ -149,43 +146,35 @@ proc selfproxy {host} {
global port
return [list [info hostname] $port]
}
-test http-3.5 {http::geturl} -body {
+test http-3.5 {http::geturl} {
http::config -proxyfilter selfproxy
set token [http::geturl $url]
- http::data $token
-} -cleanup {
http::config -proxyfilter http::ProxyRequired
- http::cleanup $token
-} -result "<html><head><title>HTTP/1.0 TEST</title></head><body>
+ http::data $token
+} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>GET http:$url</h2>
</body></html>"
-test http-3.6 {http::geturl} -body {
+test http-3.6 {http::geturl} {
http::config -proxyfilter bogus
set token [http::geturl $url]
- http::data $token
-} -cleanup {
http::config -proxyfilter http::ProxyRequired
- http::cleanup $token
-} -result "<html><head><title>HTTP/1.0 TEST</title></head><body>
+ http::data $token
+} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>GET $tail</h2>
</body></html>"
-test http-3.7 {http::geturl} -body {
+test http-3.7 {http::geturl} {
set token [http::geturl $url -headers {Pragma no-cache}]
http::data $token
-} -cleanup {
- http::cleanup $token
-} -result "<html><head><title>HTTP/1.0 TEST</title></head><body>
+} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>GET $tail</h2>
</body></html>"
-test http-3.8 {http::geturl} -body {
+test http-3.8 {http::geturl} {
set token [http::geturl $url -query Name=Value&Foo=Bar -timeout 2000]
http::data $token
-} -cleanup {
- http::cleanup $token
-} -result "<html><head><title>HTTP/1.0 TEST</title></head><body>
+} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>POST $tail</h2>
<h2>Query</h2>
@@ -194,13 +183,11 @@ test http-3.8 {http::geturl} -body {
<dt>Foo<dd>Bar
</dl>
</body></html>"
-test http-3.9 {http::geturl} -body {
+test http-3.9 {http::geturl} {
set token [http::geturl $url -validate 1]
http::code $token
-} -cleanup {
- http::cleanup $token
-} -result "HTTP/1.0 200 OK"
-test http-3.10 {http::geturl queryprogress} -setup {
+} "HTTP/1.0 200 OK"
+test http-3.10 {http::geturl queryprogress} {
set query foo=bar
set sep ""
set i 0
@@ -210,7 +197,7 @@ test http-3.10 {http::geturl queryprogress} -setup {
append query $sep$query
set sep &
}
-} -body {
+
proc postProgress {token x y} {
global postProgress
lappend postProgress $y
@@ -220,10 +207,8 @@ test http-3.10 {http::geturl queryprogress} -setup {
-queryprogress postProgress -queryblocksize 16384]
http::wait $t
list [http::status $t] [string length $query] $postProgress [http::data $t]
-} -cleanup {
- http::cleanup $t
-} -result {ok 122879 {16384 32768 49152 65536 81920 98304 114688 122879} {Got 122879 bytes}}
-test http-3.11 {http::geturl querychannel with -command} -setup {
+} {ok 122879 {16384 32768 49152 65536 81920 98304 114688 122879} {Got 122879 bytes}}
+test http-3.11 {http::geturl querychannel with -command} {
set query foo=bar
set sep ""
set i 0
@@ -234,8 +219,8 @@ test http-3.11 {http::geturl querychannel with -command} -setup {
set sep &
}
set file [makeFile $query outdata]
-} -body {
set fp [open $file]
+
proc asyncCB {token} {
global postResult
lappend postResult [http::data $token]
@@ -244,6 +229,7 @@ test http-3.11 {http::geturl querychannel with -command} -setup {
set t [http::geturl $posturl -querychannel $fp]
http::wait $t
set testRes [list [http::status $t] [string length $query] [http::data $t]]
+
# Now do async
http::cleanup $t
close $fp
@@ -252,17 +238,17 @@ test http-3.11 {http::geturl querychannel with -command} -setup {
set postResult [list PostStart]
http::wait $t
close $fp
+
lappend testRes [http::status $t] $postResult
-} -cleanup {
removeFile outdata
- http::cleanup $t
-} -result {ok 122879 {Got 122880 bytes} ok {PostStart {Got 122880 bytes}}}
+ set testRes
+} {ok 122879 {Got 122880 bytes} ok {PostStart {Got 122880 bytes}}}
# On Linux platforms when the client and server are on the same host, the
# client is unable to read the server's response one it hits the write error.
# The status is "eof".
# On Windows, the http::wait procedure gets a "connection reset by peer" error
# while reading the reply.
-test http-3.12 {http::geturl querychannel with aborted request} -setup {
+test http-3.12 {http::geturl querychannel with aborted request} {nonPortable} {
set query foo=bar
set sep ""
set i 0
@@ -273,8 +259,8 @@ test http-3.12 {http::geturl querychannel with aborted request} -setup {
set sep &
}
set file [makeFile $query outdata]
-} -constraints {nonPortable} -body {
set fp [open $file]
+
proc asyncCB {token} {
global postResult
lappend postResult [http::data $token]
@@ -295,11 +281,10 @@ test http-3.12 {http::geturl querychannel with aborted request} -setup {
puts $::errorInfo
error $err
}
- list [http::status $t] [http::code $t]
-} -cleanup {
+
removeFile outdata
- http::cleanup $t
-} -result {ok {HTTP/1.0 200 Data follows}}
+ list [http::status $t] [http::code $t]
+} {ok {HTTP/1.0 200 Data follows}}
test http-3.13 {http::geturl socket leak test} {
set chanCount [llength [file channels]]
for {set i 0} {$i < 3} {incr i} {
@@ -309,12 +294,10 @@ test http-3.13 {http::geturl socket leak test} {
# No extra channels should be taken
expr {[llength [file channels]] == $chanCount}
} 1
-test http-3.14 "http::geturl $fullurl" -body {
+test http-3.14 "http::geturl $fullurl" {
set token [http::geturl $fullurl -validate 1]
http::code $token
-} -cleanup {
- http::cleanup $token
-} -result "HTTP/1.0 200 OK"
+} "HTTP/1.0 200 OK"
test http-3.15 {http::geturl parse failures} -body {
http::geturl "{invalid}:url"
} -returnCodes error -result {Unsupported URL: {invalid}:url}
@@ -340,99 +323,100 @@ test http-3.22 {http::geturl parse failures} -body {
http::geturl http://somewhere/%path
} -returnCodes error -result {Illegal encoding character usage "%pa" in URL path}
test http-3.23 {http::geturl parse failures} -body {
- http::geturl http://somewhere/path?{query}?
+ http::geturl http://somewhere/path?{query}
} -returnCodes error -result {Illegal characters in URL path}
test http-3.24 {http::geturl parse failures} -body {
http::geturl http://somewhere/path?%query
} -returnCodes error -result {Illegal encoding character usage "%qu" in URL path}
-test http-3.25 {http::meta} -setup {
- unset -nocomplain m token
-} -body {
- set token [http::geturl $url -timeout 2000]
- array set m [http::meta $token]
- lsort [array names m]
+test http-3.25 {http::geturl: -headers override -type} -body {
+ set token [http::geturl $url/headers -type "text/plain" -query dummy \
+ -headers [list "Content-Type" "text/plain;charset=utf-8"]]
+ http::data $token
} -cleanup {
http::cleanup $token
- unset -nocomplain m token
-} -result {Content-Length Content-Type Date}
-test http-3.26 {http::meta} -setup {
- unset -nocomplain m token
-} -body {
- set token [http::geturl $url -headers {X-Check 1} -timeout 2000]
- array set m [http::meta $token]
- lsort [array names m]
+} -match regexp -result {(?n)Accept \*/\*
+Host .*
+User-Agent .*
+Connection close
+Content-Type {text/plain;charset=utf-8}
+Content-Length 5}
+test http-3.26 {http::geturl: -headers override -type default} -body {
+ set token [http::geturl $url/headers -query dummy \
+ -headers [list "Content-Type" "text/plain;charset=utf-8"]]
+ http::data $token
} -cleanup {
http::cleanup $token
- unset -nocomplain m token
-} -result {Content-Length Content-Type Date X-Check}
+} -match regexp -result {(?n)Accept \*/\*
+Host .*
+User-Agent .*
+Connection close
+Content-Type {text/plain;charset=utf-8}
+Content-Length 5}
+test http-3.30 {http::geturl query without path} -body {
+ set token [http::geturl $authorityurl?var=val]
+ http::ncode $token
+} -cleanup {
+ catch { http::cleanup $token }
+} -result 200
+test http-3.31 {http::geturl fragment without path} -body {
+ set token [http::geturl "$authorityurl#fragment42"]
+ http::ncode $token
+} -cleanup {
+ catch { http::cleanup $token }
+} -result 200
-test http-4.1 {http::Event} -body {
+test http-4.1 {http::Event} {
set token [http::geturl $url -keepalive 0]
upvar #0 $token data
array set meta $data(meta)
expr {($data(totalsize) == $meta(Content-Length))}
-} -cleanup {
- http::cleanup $token
-} -result 1
-test http-4.2 {http::Event} -body {
+} 1
+test http-4.2 {http::Event} {
set token [http::geturl $url]
upvar #0 $token data
array set meta $data(meta)
string compare $data(type) [string trim $meta(Content-Type)]
-} -cleanup {
- http::cleanup $token
-} -result 0
-test http-4.3 {http::Event} -body {
+} 0
+test http-4.3 {http::Event} {
set token [http::geturl $url]
http::code $token
-} -cleanup {
- http::cleanup $token
-} -result {HTTP/1.0 200 Data follows}
-test http-4.4 {http::Event} -setup {
+} {HTTP/1.0 200 Data follows}
+test http-4.4 {http::Event} {
set testfile [makeFile "" testfile]
-} -body {
set out [open $testfile w]
set token [http::geturl $url -channel $out]
close $out
set in [open $testfile]
set x [read $in]
-} -cleanup {
- catch {close $in}
- catch {close $out}
+ close $in
removeFile $testfile
- http::cleanup $token
-} -result "<html><head><title>HTTP/1.0 TEST</title></head><body>
+ set x
+} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>GET $tail</h2>
</body></html>"
-test http-4.5 {http::Event} -setup {
+test http-4.5 {http::Event} {
set testfile [makeFile "" testfile]
-} -body {
set out [open $testfile w]
fconfigure $out -translation lf
set token [http::geturl $url -channel $out]
close $out
upvar #0 $token data
- expr {$data(currentsize) == $data(totalsize)}
-} -cleanup {
removeFile $testfile
- http::cleanup $token
-} -result 1
-test http-4.6 {http::Event} -setup {
+ expr {$data(currentsize) == $data(totalsize)}
+} 1
+test http-4.6 {http::Event} {
set testfile [makeFile "" testfile]
-} -body {
set out [open $testfile w]
set token [http::geturl $binurl -channel $out]
close $out
set in [open $testfile]
fconfigure $in -translation binary
- read $in
-} -cleanup {
- catch {close $in}
- catch {close $out}
+ set x [read $in]
+ close $in
removeFile $testfile
- http::cleanup $token
-} -result "$bindata[string trimleft $binurl /]"
+ set x
+} "$bindata[string trimleft $binurl /]"
proc myProgress {token total current} {
global progress httpLog
if {[info exists httpLog] && $httpLog} {
@@ -445,60 +429,46 @@ if 0 {
set httpLog 1
test http-4.6.1 {http::Event} knownBug {
set token [http::geturl $url -blocksize 50 -progress myProgress]
- return $progress
+ set progress
} {111 111}
}
-test http-4.7 {http::Event} -body {
+test http-4.7 {http::Event} {
set token [http::geturl $url -keepalive 0 -progress myProgress]
- return $progress
-} -cleanup {
- http::cleanup $token
-} -result {111 111}
-test http-4.8 {http::Event} -body {
+ set progress
+} {111 111}
+test http-4.8 {http::Event} {
set token [http::geturl $url]
http::status $token
-} -cleanup {
- http::cleanup $token
-} -result {ok}
-test http-4.9 {http::Event} -body {
+} {ok}
+test http-4.9 {http::Event} {
set token [http::geturl $url -progress myProgress]
http::code $token
-} -cleanup {
- http::cleanup $token
-} -result {HTTP/1.0 200 Data follows}
-test http-4.10 {http::Event} -body {
+} {HTTP/1.0 200 Data follows}
+test http-4.10 {http::Event} {
set token [http::geturl $url -progress myProgress]
http::size $token
-} -cleanup {
- http::cleanup $token
-} -result {111}
+} {111}
# Timeout cases
# Short timeout to working server (the test server). This lets us try a
# reset during the connection.
-test http-4.11 {http::Event} -body {
- set token [http::geturl $url -timeout 1 -keepalive 0 -command \#]
+test http-4.11 {http::Event} {
+ set token [http::geturl $url -timeout 1 -keepalive 0 -command {#}]
http::reset $token
http::status $token
-} -cleanup {
- http::cleanup $token
-} -result {reset}
+} {reset}
# Longer timeout with reset.
-test http-4.12 {http::Event} -body {
- set token [http::geturl $url/?timeout=10 -keepalive 0 -command \#]
+test http-4.12 {http::Event} {
+ set token [http::geturl $url/?timeout=10 -keepalive 0 -command {#}]
http::reset $token
http::status $token
-} -cleanup {
- http::cleanup $token
-} -result {reset}
+} {reset}
# Medium timeout to working server that waits even longer. The timeout
# hits while waiting for a reply.
-test http-4.13 {http::Event} -body {
- set token [http::geturl $url?timeout=30 -keepalive 0 -timeout 10 -command \#]
+test http-4.13 {http::Event} {
+ set token [http::geturl $url?timeout=30 -keepalive 0 -timeout 10 -command {#}]
http::wait $token
http::status $token
-} -cleanup {
- http::cleanup $token
-} -result {timeout}
+} {timeout}
# Longer timeout to good host, bad port, gets an error after the
# connection "completes" but the socket is bad.
test http-4.14 {http::Event} -body {
@@ -507,11 +477,8 @@ test http-4.14 {http::Event} -body {
error "bogus return from http::geturl"
}
http::wait $token
- http::status $token
- # error code varies among platforms.
-} -returnCodes 1 -match regexp -cleanup {
- catch {http::cleanup $token}
-} -result {(connect failed|couldn't open socket)}
+ lindex [http::error $token] 0
+} -result {connect failed connection refused}
# Bogus host
test http-4.15 {http::Event} -body {
# This test may fail if you use a proxy server. That is to be
@@ -520,8 +487,6 @@ test http-4.15 {http::Event} -body {
http::wait $token
http::status $token
# error codes vary among platforms.
-} -cleanup {
- catch {http::cleanup $token}
} -returnCodes 1 -match glob -result "couldn't open socket*"
test http-5.1 {http::formatQuery} {
@@ -530,60 +495,56 @@ test http-5.1 {http::formatQuery} {
# test http-5.2 obsoleted by 5.4 and 5.5 with http 2.5
test http-5.3 {http::formatQuery} {
http::formatQuery lines "line1\nline2\nline3"
-} {lines=line1%0d%0aline2%0d%0aline3}
+} {lines=line1%0D%0Aline2%0D%0Aline3}
test http-5.4 {http::formatQuery} {
http::formatQuery name1 ~bwelch name2 \xa1\xa2\xa2
-} {name1=~bwelch&name2=%c2%a1%c2%a2%c2%a2}
+} {name1=~bwelch&name2=%C2%A1%C2%A2%C2%A2}
test http-5.5 {http::formatQuery} {
set enc [http::config -urlencoding]
http::config -urlencoding iso8859-1
set res [http::formatQuery name1 ~bwelch name2 \xa1\xa2\xa2]
http::config -urlencoding $enc
set res
-} {name1=~bwelch&name2=%a1%a2%a2}
+} {name1=~bwelch&name2=%A1%A2%A2}
-test http-6.1 {http::ProxyRequired} -body {
+test http-6.1 {http::ProxyRequired} {
http::config -proxyhost [info hostname] -proxyport $port
set token [http::geturl $url]
http::wait $token
+ http::config -proxyhost {} -proxyport {}
upvar #0 $token data
set data(body)
-} -cleanup {
- http::config -proxyhost {} -proxyport {}
- http::cleanup $token
-} -result "<html><head><title>HTTP/1.0 TEST</title></head><body>
+} "<html><head><title>HTTP/1.0 TEST</title></head><body>
<h1>Hello, World!</h1>
<h2>GET http:$url</h2>
</body></html>"
test http-7.1 {http::mapReply} {
http::mapReply "abc\$\[\]\"\\()\}\{"
-} {abc%24%5b%5d%22%5c%28%29%7d%7b}
+} {abc%24%5B%5D%22%5C%28%29%7D%7B}
test http-7.2 {http::mapReply} {
# RFC 2718 specifies that we pass urlencoding on utf-8 chars by default,
# so make sure this gets converted to utf-8 then urlencoded.
http::mapReply "\u2208"
-} {%e2%88%88}
-test http-7.3 {http::formatQuery} -setup {
+} {%E2%88%88}
+test http-7.3 {http::formatQuery} {
set enc [http::config -urlencoding]
-} -returnCodes error -body {
# this would be reverting to http <=2.4 behavior
http::config -urlencoding ""
- http::mapReply "\u2208"
-} -cleanup {
+ set res [list [catch {http::mapReply "\u2208"} msg] $msg]
http::config -urlencoding $enc
-} -result "can't read \"formMap(\u2208)\": no such element in array"
-test http-7.4 {http::formatQuery} -setup {
+ set res
+} [list 1 "can't read \"formMap(\u2208)\": no such element in array"]
+test http-7.4 {http::formatQuery} {
set enc [http::config -urlencoding]
-} -body {
# this would be reverting to http <=2.4 behavior w/o errors
# (unknown chars become '?')
http::config -urlencoding "iso8859-1"
- http::mapReply "\u2208"
-} -cleanup {
+ set res [http::mapReply "\u2208"]
http::config -urlencoding $enc
-} -result {%3f}
-
+ set res
+} {%3F}
+
# cleanup
catch {unset url}
catch {unset badurl}
@@ -593,6 +554,7 @@ if {[info exists httpthread]} {
testthread send -async $httpthread {
testthread exit
}
+ testthread join $httpthread
} else {
close $listen
}
@@ -603,7 +565,3 @@ if {[info exists removeHttpd]} {
rename bgerror {}
::tcltest::cleanupTests
-
-# Local variables:
-# mode: tcl
-# End: