174f47e1dSdan 274f47e1dSdan 374f47e1dSdan 474f47e1dSdanproc bc_find_binaries {zCaption} { 574f47e1dSdan # Search for binaries to test against. Any executable files that match 674f47e1dSdan # our naming convention are assumed to be testfixture binaries to test 774f47e1dSdan # against. 874f47e1dSdan # 974f47e1dSdan set binaries [list] 10*de503eb1Sdan set self [info nameofexec] 113e6d22adSdrh set pattern "$self?*" 1274f47e1dSdan if {$::tcl_platform(platform)=="windows"} { 1374f47e1dSdan set pattern [string map {\.exe {}} $pattern] 1474f47e1dSdan } 1574f47e1dSdan foreach file [glob -nocomplain $pattern] { 163e6d22adSdrh if {$file==$self} continue 1774f47e1dSdan if {[file executable $file] && [file isfile $file]} {lappend binaries $file} 1874f47e1dSdan } 1974f47e1dSdan 2074f47e1dSdan if {[llength $binaries]==0} { 2174f47e1dSdan puts "WARNING: No historical binaries to test against." 224ef9dfffSdrh puts "WARNING: Omitting backwards-compatibility tests" 2374f47e1dSdan } 2474f47e1dSdan 2574f47e1dSdan foreach bin $binaries { 2674f47e1dSdan puts -nonewline "Testing against $bin - " 2774f47e1dSdan flush stdout 2874f47e1dSdan puts "version [get_version $bin]" 2974f47e1dSdan } 3074f47e1dSdan 3174f47e1dSdan set ::BC(binaries) $binaries 3274f47e1dSdan return $binaries 3374f47e1dSdan} 3474f47e1dSdan 3574f47e1dSdanproc get_version {binary} { 3674f47e1dSdan set chan [launch_testfixture $binary] 3774f47e1dSdan set v [testfixture $chan { sqlite3 -version }] 3874f47e1dSdan close $chan 3974f47e1dSdan set v 4074f47e1dSdan} 4174f47e1dSdan 4274f47e1dSdanproc do_bc_test {bin script} { 4374f47e1dSdan 4474f47e1dSdan forcedelete test.db 4574f47e1dSdan set ::bc_chan [launch_testfixture $bin] 4674f47e1dSdan 4774f47e1dSdan proc code1 {tcl} { uplevel #0 $tcl } 4874f47e1dSdan proc code2 {tcl} { testfixture $::bc_chan $tcl } 4974f47e1dSdan proc sql1 sql { code1 [list db eval $sql] } 5074f47e1dSdan proc sql2 sql { code2 [list db eval $sql] } 5174f47e1dSdan 5274f47e1dSdan code1 { sqlite3 db test.db } 5374f47e1dSdan code2 { sqlite3 db test.db } 5474f47e1dSdan 55*de503eb1Sdan set bintag $bin 56*de503eb1Sdan regsub {.*testfixture\.} $bintag {} bintag 5774f47e1dSdan set bintag [string map {\.exe {}} $bintag] 5874f47e1dSdan if {$bintag == ""} {set bintag self} 5974f47e1dSdan set saved_prefix $::testprefix 6074f47e1dSdan append ::testprefix ".$bintag" 6174f47e1dSdan 6274f47e1dSdan uplevel $script 6374f47e1dSdan 6474f47e1dSdan set ::testprefix $saved_prefix 6574f47e1dSdan 6674f47e1dSdan catch { code1 { db close } } 6774f47e1dSdan catch { code2 { db close } } 6874f47e1dSdan catch { close $::bc_chan } 6974f47e1dSdan} 7074f47e1dSdan 7174f47e1dSdanproc do_all_bc_test {script} { 7274f47e1dSdan foreach bin $::BC(binaries) { 7374f47e1dSdan uplevel [list do_bc_test $bin $script] 7474f47e1dSdan } 7574f47e1dSdan} 76