| # Run this script using | |
| # | |
| # sqlite3_checker --test $thisscript $testscripts | |
| # | |
| # The $testscripts argument is optional. If omitted, all *.test files | |
| # in the same directory as $thisscript are run. | |
| # | |
| set NTEST 0 | |
| set NERR 0 | |
| # Invoke the do_test procedure to run a single test | |
| # | |
| # The $expected parameter is the expected result. The result is the return | |
| # value from the last TCL command in $cmd. | |
| # | |
| # Normally, $expected must match exactly. But if $expected is of the form | |
| # "/regexp/" then regular expression matching is used. If $expected is | |
| # "~/regexp/" then the regular expression must NOT match. If $expected is | |
| # of the form "#/value-list/" then each term in value-list must be numeric | |
| # and must approximately match the corresponding numeric term in $result. | |
| # Values must match within 10%. Or if the $expected term is A..B then the | |
| # $result term must be in between A and B. | |
| # | |
| proc do_test {name cmd expected} { | |
| if {[info exists ::testprefix]} { | |
| set name "$::testprefix$name" | |
| } | |
| incr ::NTEST | |
| puts -nonewline $name... | |
| flush stdout | |
| if {[catch {uplevel #0 "$cmd;\n"} result]} { | |
| puts -nonewline $name... | |
| puts "\nError: $result" | |
| incr ::NERR | |
| } else { | |
| set ok [expr {[string compare $result $expected]==0}] | |
| if {!$ok} { | |
| puts "\n! $name expected: \[$expected\]\n! $name got: \[$result\]" | |
| incr ::NERR | |
| } else { | |
| puts " Ok" | |
| } | |
| } | |
| flush stdout | |
| } | |
| # | |
| # do_execsql_test TESTNAME SQL RES | |
| # | |
| proc do_execsql_test {testname sql {result {}}} { | |
| uplevel [list do_test $testname [list db eval $sql] [list {*}$result]] | |
| } | |
| if {[llength $argv]==0} { | |
| set dir [file dirname $argv0] | |
| set argv [glob -nocomplain $dir/*.test] | |
| } | |
| foreach testfile $argv { | |
| file delete -force test.db | |
| sqlite3 db test.db | |
| source $testfile | |
| catch {db close} | |
| } | |
| puts "$NERR errors out of $NTEST tests" | |