Version 2 of e.g.

Updated 2005-12-12 10:32:20 by suchenwi

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