bc_common.tcl 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. proc bc_find_binaries {zCaption} {
  2. # Search for binaries to test against. Any executable files that match
  3. # our naming convention are assumed to be testfixture binaries to test
  4. # against.
  5. #
  6. set binaries [list]
  7. set pattern "[file tail [info nameofexec]]?*"
  8. if {$::tcl_platform(platform)=="windows"} {
  9. set pattern [string map {\.exe {}} $pattern]
  10. }
  11. foreach file [glob -nocomplain $pattern] {
  12. if {[file executable $file] && [file isfile $file]} {lappend binaries $file}
  13. }
  14. if {[llength $binaries]==0} {
  15. puts "WARNING: No historical binaries to test against."
  16. puts "WARNING: Omitting backwards-compatibility tests"
  17. }
  18. foreach bin $binaries {
  19. puts -nonewline "Testing against $bin - "
  20. flush stdout
  21. puts "version [get_version $bin]"
  22. }
  23. set ::BC(binaries) $binaries
  24. return $binaries
  25. }
  26. proc get_version {binary} {
  27. set chan [launch_testfixture $binary]
  28. set v [testfixture $chan { sqlite3 -version }]
  29. close $chan
  30. set v
  31. }
  32. proc do_bc_test {bin script} {
  33. forcedelete test.db
  34. set ::bc_chan [launch_testfixture $bin]
  35. proc code1 {tcl} { uplevel #0 $tcl }
  36. proc code2 {tcl} { testfixture $::bc_chan $tcl }
  37. proc sql1 sql { code1 [list db eval $sql] }
  38. proc sql2 sql { code2 [list db eval $sql] }
  39. code1 { sqlite3 db test.db }
  40. code2 { sqlite3 db test.db }
  41. set bintag [string map {testfixture {}} $bin]
  42. set bintag [string map {\.exe {}} $bintag]
  43. if {$bintag == ""} {set bintag self}
  44. set saved_prefix $::testprefix
  45. append ::testprefix ".$bintag"
  46. uplevel $script
  47. set ::testprefix $saved_prefix
  48. catch { code1 { db close } }
  49. catch { code2 { db close } }
  50. catch { close $::bc_chan }
  51. }
  52. proc do_all_bc_test {script} {
  53. foreach bin $::BC(binaries) {
  54. uplevel [list do_bc_test $bin $script]
  55. }
  56. }