diff --git a/testing/all.test b/testing/all.test index 67d07870a..72da94c65 100755 --- a/testing/all.test +++ b/testing/all.test @@ -6,10 +6,12 @@ source $testdir/cmdlineshell.test source $testdir/agg-functions.test source $testdir/coalesce.test source $testdir/join.test -source $testdir/pragma.test -source $testdir/select.test -source $testdir/where.test -source $testdir/like.test -source $testdir/scalar-functions.test -source $testdir/orderby.test +source $testdir/insert.test +source $testdir/join.test source $testdir/json.test +source $testdir/like.test +source $testdir/orderby.test +source $testdir/pragma.test +source $testdir/scalar-functions.test +source $testdir/select.test +source $testdir/where.test \ No newline at end of file diff --git a/testing/insert.test b/testing/insert.test new file mode 100755 index 000000000..5a4967e83 --- /dev/null +++ b/testing/insert.test @@ -0,0 +1,17 @@ +#!/usr/bin/env tclsh + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +do_execsql_check_err_msg insert-1.1 { + INSERT INTO test1 VALUES(1,2,3); +} {Error: in prepare, no such table: test1} + +do_execsql_with_cleanup_test insert-1.2 { + CREATE TABLE test1(one int, two int, three int); + INSERT INTO test1 VALUES(1, 2, 3); + SELECT * FROM test1; +} {1|2|3} { + DROP TABLE IF EXISTS test1; +} + diff --git a/testing/tester.tcl b/testing/tester.tcl index 5a9eaab30..d8a715c8f 100644 --- a/testing/tester.tcl +++ b/testing/tester.tcl @@ -16,9 +16,45 @@ proc run_test {sqlite_exec sql expected_output} { } } +proc run_failing_test {sqlite_exec sql expected_err_msg} { + set actual_output [catch {set actual_output [evaluate_sql $sqlite_exec $sql]} err_msg] + if {$err_msg ne $expected_err_msg} { + puts "Test FAILED: '$sql'" + puts "returned '$err_msg'" + puts "expected '$expected_err_msg'" + exit 1 + } +} + +proc run_test_with_cleanup {sqlite_exec sql expected_output cleanup_sql} { + set actual_output [evaluate_sql $sqlite_exec $sql] + if {$actual_output ne $expected_output} { + puts "Test FAILED: '$sql'" + puts "returned '$actual_output'" + puts "expected '$expected_output'" + evaluate_sql $sqlite_exec $cleanup_sql + exit 1 + } + evaluate_sql $sqlite_exec $cleanup_sql +} + proc do_execsql_test {test_name sql_statements expected_outputs} { puts "Running test: $test_name" set combined_sql [string trim $sql_statements] set combined_expected_output [join $expected_outputs "\n"] run_test $::sqlite_exec $combined_sql $combined_expected_output } + +proc do_execsql_check_err_msg {test_name sql_statements expected_err_msg} { + puts "Running test: $test_name" + set combined_sql [string trim $sql_statements] + run_failing_test $::sqlite_exec $combined_sql $expected_err_msg +} + +proc do_execsql_with_cleanup_test {test_name sql_statements expected_outputs cleanup_statements} { + puts "Running test: $test_name" + set combined_sql [string trim $sql_statements] + set combined_expected_output [join $expected_outputs "\n"] + set combined_cleanup [string trim $cleanup_statements] + run_test_with_cleanup $::sqlite_exec $combined_sql $combined_expected_output $combined_cleanup +} \ No newline at end of file