[Richard Suchenwirth] 2005-12-12 - Earlier versions of this "testing framework" are found in several pages of mine, but this latest result of evolution (or intelligent design ;-) just has to be shared. It's about adding self-tests to a file of Tcl code. When the file is loaded as part of a library, just the [proc] definitions are executed. If however you feed this file directly to a [tclsh], that fact is detected, and the [e.g.] calls are executed. If the result is not the one expected, this is reported on stdout; and in the end, you even get a little statistics, somehow like [tcltest]. ---- # PROLOG -- self-test: if this file is sourced at top level if {[info exists argv0]&&[file tail [info script]] eq [file tail $argv0]} { set Ntest 0; set Nfail 0 proc e.g. {cmd -> expected} { incr ::Ntest catch {uplevel 1 $cmd} res if {$res ne $expected} { puts "$cmd -> $res, expected $expected" incr ::Nfail } } } else {proc e.g. args {}} ;# does nothing, compiles to nothing ##------------- Your code goes here, with e.g. tests following proc sum {a b} {expr {$a+$b}} e.g. {sum 3 4} -> 7 proc mul {a b} {expr {$a*$b}} e.g. {mul 7 6} -> 42 # testing a deliberate error (this way, it passes): e.g. {expr 1/0} -> "divide by zero" ## EPILOG -- show statistics: e.g. {puts "[info script] : tested $::Ntest, failed $::Nfail"} -> "" ---- [Category Testing] | [Arts and crafts of Tcl-Tk programming]