Index: library/lib/test.xotcl =================================================================== diff -u -r9f1d59741223795c836a0e8230a891781ecfc09e -r217d826e64107056ae97176552cae3c776991b9e --- library/lib/test.xotcl (.../test.xotcl) (revision 9f1d59741223795c836a0e8230a891781ecfc09e) +++ library/lib/test.xotcl (.../test.xotcl) (revision 217d826e64107056ae97176552cae3c776991b9e) @@ -2,7 +2,7 @@ package require XOTcl namespace eval ::xotcl::test { - namespace import ::xotcl::* + namespace import ::xotcl2::* @ @File {description { Simple regression test support. @@ -24,7 +24,7 @@ } } - Class Test -parameter { + Class create Test -parameter { {name ""} cmd {namespace ::} @@ -33,71 +33,64 @@ {count 1000} msg setResult errorReport pre post - } - Test set count 0 - Test proc new args { - my instvar case ccount name - if {[my exists case]} { - if {![info exists ccount($case)]} {set ccount($case) 0} - set name $case.[format %.3d [incr ccount($case)]] - } else { - set name t.[format %.3d [my incr count]] + } { + set .count 0 + + .method -per-object new args { + if {[info exists .case]} { + if {![info exists .ccount(${.case})]} {set .ccount(${.case}) 0} + set .name ${.case}.[format %.3d [incr .ccount(${.case})]] + } else { + set .name t.[format %.3d [incr .count]] + } + eval .create ${.name} -name ${.name} $args } - eval my create $name -name $name $args - } - Test proc run {} { - set startTime [clock clicks -milliseconds] - foreach example [lsort [my allInstances]] { - $example run - } - puts stderr "Total Time: [expr {[clock clicks -milliseconds]-$startTime}] ms" - } - Test proc _allInstances {C} { - set set [$C info instances] - foreach sc [$C info subclass] { - eval lappend set [my _allInstances $sc] - } - return $set - } - Test proc allInstances {} { - return [my _allInstances Test] - } - Test instproc call {msg cmd} { - if {[my verbose]} {puts stderr "$msg: $cmd"} - namespace eval [my namespace] $cmd - } - Test instproc run args { - my instvar cmd expected pre post count msg - if {[info exists pre]} {my call "pre" $pre} - if {![info exists msg]} {set msg $cmd} - set r [my call "run" $cmd] - if {[my exists setResult]} {set r [eval [my set setResult]]} - if {$r == $expected} { - if {[info exists count]} {set c $count} {set c 1000} - if {[my verbose]} { - puts stderr "running test $c times" + .method -per-object run {} { + set startTime [clock clicks -milliseconds] + foreach example [lsort [.info instances -closure]] { + $example run } - if {$c > 1} { - #set r0 [time $cmd $c] - #puts stderr "time {time $cmd $c}" - set r1 [time {time {namespace eval [my namespace] $cmd} $c}] - #regexp {^(-?[0-9]+) +} $r0 _ mS0 - regexp {^(-?[0-9]+) +} $r1 _ mS1 - set ms [expr {$mS1*1.0/$c}] - puts stderr "[my name]:\t[format %6.2f $ms] mms, $msg" + puts stderr "Total Time: [expr {[clock clicks -milliseconds]-$startTime}] ms" + } + + .method call {msg cmd} { + if {[.verbose]} {puts stderr "$msg: $cmd"} + namespace eval [set .namespace] $cmd + } + + .method run args { + if {[info exists .pre]} {.call "pre" ${.pre}} + if {![info exists .msg]} {set .msg ${.cmd}} + set r [.call "run" ${.cmd}] + if {[info exists .setResult]} {set r [eval [set .setResult]]} + if {$r == ${.expected}} { + if {[info exists .count]} {set c ${.count}} {set c 1000} + if {[.verbose]} { + puts stderr "running test $c times" + } + if {$c > 1} { + #set r0 [time ${.cmd} $c] + #puts stderr "time {time ${.cmd} $c}" + set r1 [time {time {namespace eval [set .namespace] ${.cmd}} $c}] + #regexp {^(-?[0-9]+) +} $r0 _ mS0 + regexp {^(-?[0-9]+) +} $r1 _ mS1 + set ms [expr {$mS1*1.0/$c}] + puts stderr "[set .name]:\t[format %6.2f $ms] mms, ${.msg}" + } else { + puts stderr "[set .name]: ${.msg} ok" + } } else { - puts stderr "[my name]: $msg ok" + puts stderr "[set .name]:\tincorrect result for '${.msg}'" + puts stderr "\texpected: '${.expected}', got '$r' [info exists .errorReport]" + if {[info exists .errorReport]} {eval [set .errorReport]} + exit -1 } - } else { - puts stderr "[my name]:\tincorrect result for '$msg'" - puts stderr "\texpected: '$expected', got '$r' [my exists errorReport]" - if {[my exists errorReport]} {eval [my set errorReport]} - exit -1 + if {[info exists .post]} {.call "post" ${.post}} } - if {[info exists post]} {my call "post" $post} + + .method -per-object case {name} {set .case $name} } - proc case name {::xotcl::test::Test set case $name} namespace export Test }