--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sqlite3api/TEST/TclScript/safety.test Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,93 @@
+# 2005 January 11
+#
+# 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.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library. The
+# focus of this file is testing the sqlite3SafetyOn and sqlite3SafetyOff
+# functions. Those routines are not strictly necessary - they are
+# designed to detect misuse of the library.
+#
+# $Id: safety.test,v 1.4 2008/03/18 13:46:53 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+ifcapable !debug {
+ puts "Skipping safety tests since SQLITE_DEBUG is off"
+ finish_test
+ return
+}
+
+# Return the UTF-8 representation of the supplied UTF-16 string $str.
+proc utf8 {str} {
+ # If $str ends in two 0x00 0x00 bytes, knock these off before
+ # converting to UTF-8 using TCL.
+ binary scan $str \c* vals
+ if {[lindex $vals end]==0 && [lindex $vals end-1]==0} {
+ set str [binary format \c* [lrange $vals 0 end-2]]
+ }
+
+ set r [encoding convertfrom unicode $str]
+ return $r
+}
+
+
+do_test safety-1.1 {
+ set DB [sqlite3_connection_pointer db]
+ db eval {CREATE TABLE t1(a)}
+ sqlite_set_magic $DB SQLITE_MAGIC_BUSY
+ catchsql {
+ SELECT name FROM sqlite_master;
+ }
+} {1 {library routine called out of sequence}}
+do_test safety-1.2 {
+ sqlite_set_magic $DB SQLITE_MAGIC_OPEN
+ catchsql {
+ SELECT name FROM sqlite_master
+ }
+} {0 t1}
+
+do_test safety-2.1 {
+ proc safety_on {} "sqlite_set_magic $DB SQLITE_MAGIC_BUSY"
+ db function safety_on safety_on
+ catchsql {
+ SELECT safety_on(), name FROM sqlite_master
+ }
+} {1 {library routine called out of sequence}}
+ifcapable {utf16} {
+ do_test safety-2.1.1 {
+ utf8 [sqlite3_errmsg16 db]
+ } {library routine called out of sequence}
+}
+do_test safety-2.2 {
+ catchsql {
+ SELECT 'hello'
+ }
+} {1 {library routine called out of sequence}}
+do_test safety-2.3 {
+ sqlite3_close $DB
+} {SQLITE_MISUSE}
+do_test safety-2.4 {
+ sqlite_set_magic $DB SQLITE_MAGIC_OPEN
+ execsql {
+ SELECT name FROM sqlite_master
+ }
+} {t1}
+
+do_test safety-3.1 {
+ set rc [catch {
+ db eval {SELECT name FROM sqlite_master} {
+ sqlite_set_magic $DB SQLITE_MAGIC_BUSY
+ }
+ } msg]
+ lappend rc $msg
+} {1 {library routine called out of sequence}}
+sqlite_set_magic $DB SQLITE_MAGIC_OPEN
+
+finish_test