Version 5 of e.g.

Updated 2005-12-12 15:02:16 by escargo

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"} -> ""

escargo 12 Dec 2005 - It might be interesting to refactor the code to put the predicate about if this file is sourced at top level as a separate piece of code. Other code could then use that predicate to decide about other actions to take in that case. (I think e.g. is very clever, just by itself.)


Category Testing | Arts and crafts of Tcl-Tk programming