# This file contains the test driver for the html widget. It defines
# a special version of the test procedure to use for testing the
# html widget.
#
# Initialize variables
#
namespace eval tcltest {
set mode run
set current {}
set passed 0
set failed 0
set total 0
set status {}
}
# Arguments:
#
# tag A symbolic tag for this test. Ex: html-1.0
#
# desc A human-readable description of what this test does.
#
# script Tcl code to implement the test
#
# result The expected result from this test. If the actual result
# is different the test fails.
#
proc ::tcltest::test {tag desc script result} {
::tcltest::change-desc $tag $desc
if {[info exists ::tcltest::idle]} {
catch {after cancel $::tcltest::idle}
catch {unset ::tcltest::idle}
}
set rc [catch {uplevel #0 $script} msg]
set r [list $rc $msg]
if {$r==$result} {
incr ::tcltest::passed
puts "---- Test $tag passed"
} else {
incr ::tcltest::failed
puts "**** Test $tag failed"
puts "Expected: [list $result]"
puts "Got: [list $r]"
}
incr ::tcltest::total
::tcltest::update-status
set ::tcltest::idle [after 100 ::tcltest::testing-complete]
}
# Create the test control window
#
proc ::tcltest::mainwin {} {
set w .testinfo
toplevel $w
wm title $w {Html Widget Test Information}
wm iconname $w {Html-Test}
set f $w.f1
frame $f
pack $f -side top -fill x
label $f.l -text {Status: }
label $f.v -textvariable ::tcltest::status
pack $f.l $f.v -side left
set f $w.f2
frame $f
pack $f -side top -fill x
label $f.l -text {Current Test: }
label $f.v -textvariable ::tcltest::current
pack $f.l $f.v -side left
set f $w.b
frame $f
pack $f -side bottom -fill x
button $f.pause -text Pause -command ::tcltest::pause
button $f.pass -text {Pass} -command {::tcltest::set-result pass}
button $f.fail -text {Fail} -command {::tcltest::set-result fail}
button $f.exit -text Exit -command exit
pack $f.pause $f.pass $f.fail $f.exit -side right -pady 10 -expand 1
scrollbar $w.sb -orient vertical -command "$w.t yview"
pack $w.sb -side right -fill y
html $w.t -yscrollcommand "$w.sb set" -width 400 -height 150 \
-bd 2 -relief sunken -padx 5 -pady 5
pack $w.t -side right -fill both -expand 1
::tcltest::update-status
}
# Change the test description in the control window
#
proc ::tcltest::change-desc {tag desc} {
if {![winfo exists .testinfo]} ::tcltest::mainwin
.testinfo.t clear
.testinfo.t parse $desc\n
set ::tcltest::current $tag
}
# Update the status line
#
proc ::tcltest::update-status {} {
set v "$::tcltest::passed passed $::tcltest::failed failed "
append v "$::tcltest::total total"
set ::tcltest::status $v
}
# Wait for the user to press either the pass or failed buttons.
#
proc ::tcltest::user-result {} {
.testinfo.b.pass config -state normal
.testinfo.b.fail config -state normal
update
raise .testinfo
focus .testinfo.b.pass
set ::tcltest::result {}
vwait ::tcltest::result
.testinfo.b.pass config -state disabled
.testinfo.b.fail config -state disabled
return $::tcltest::result
}
# Called when the user presses either the failed or passed buttons.
#
proc ::tcltest::set-result v {
set ::tcltest::result $v
}
# Call this routine at the end of all tests
#
proc ::tcltest::testing-complete {} {
::tcltest::change-desc {} {Testing is now complete}
}
# Construct an HTML widget to use for testing.
#
proc tkhtml_test_widget {} {
set w .tkhtml_test
if {[winfo exists $w]} {
return $w.h
}
toplevel $w
wm title $w {TkHtml Test Widget}
wm iconname $w {TkHtml Test}
scrollbar $w.sb -orient vertical -command "$w.h yview"
pack $w.sb -side right -fill y
html $w.h -yscrollcommand "$w.sb set"
pack $w.h -side right -fill both -expand 1
return $w.h
}