# 2025-11-12 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # TESTRUNNER: shell # # Test cases for the command-line shell using the newly renovated # ".testcase" and ".check" commands. # set testdir [file dirname $argv0] source $testdir/tester.tcl set CLI [test_cli_invocation] # Run an instance of the CLI on the file $name. # Capture the number of test cases and the number of # errors and increment the counts. # proc do_clitest {name args} { set mapping [list $::testdir/$name $::CLI $args] set script [string map $mapping { catch {exec :memory: 2>@stdout} res set ntest 0 set nerr 999 regexp {(\d+) tests? run with (\d+) errors?} $res all ntest nerr set_test_counter count [expr {[set_test_counter count]+$ntest-1}] set_test_counter errors [expr {[set_test_counter errors]+$nerr}] if {$nerr==0} {set res "error count: 0"} set res }] # puts $script do_test shellB-$name $script {error count: 0} } # Attempt to build a loadable extension named $ext from source # file $srcfile. Return true on success. # proc build_loadable {ext srcfile} { if {$::tcl_platform(os) eq "Windows NT"} { set ext [file root $ext].dll set cmd [list exec gcc -shared -fPIC -I. -I.. -o $ext $srcfile] } elseif {$::tcl_platform(os) eq "Darwin"} { set ext [file root $ext].dylib set cmd [list exec clang -dynamiclib -I. -I.. -o $ext $srcfile] } else { set ext [file root $ext].so set cmd [list exec gcc -shared -fPIC -I. -I.. -o $ext $srcfile] } if {[catch $cmd msg]} { # puts "Unable to build $ext, $msg" return 0 } else { return 1 } } do_clitest modeA.sql do_clitest dblwidth-a.sql do_clitest vt100-a.sql do_clitest regexp1.sql do_clitest imposter1.sql do_clitest sha1.sql do_clitest complete_sql.sql do_clitest clierrors.sql set probe $testdir/probe.txt forcedelete $probe set f [open $probe wb] puts -nonewline $f xyzzy close $f do_clitest safemode.sql --safe do_clitest cliparse.sql --test-parse ifcapable vtab { do_clitest dotcmd01.sql do_clitest import01.sql do_clitest intck01.sql --unsafe-testing } do_clitest fptest01.sql unset -nocomplain ::env(SQLITE_PS1) unset -nocomplain ::env(SQLITE_PS2) do_clitest shell-prompt.sql ifcapable vtab&load_ext { set srcfile [file dir $testdir]/ext/misc/fossildelta.c if {[build_loadable fossildelta $srcfile]} { do_clitest fossildelta.sql } } finish_test