OLD | NEW |
| (Empty) |
1 # 2005 January 11 | |
2 # | |
3 # The author disclaims copyright to this source code. In place of | |
4 # a legal notice, here is a blessing: | |
5 # | |
6 # May you do good and not evil. | |
7 # May you find forgiveness for yourself and forgive others. | |
8 # May you share freely, never taking more than you give. | |
9 # | |
10 #*********************************************************************** | |
11 # This file implements regression tests for SQLite library. The | |
12 # focus of this file is testing the sqlite3SafetyOn and sqlite3SafetyOff | |
13 # functions. Those routines are not strictly necessary - they are | |
14 # designed to detect misuse of the library. | |
15 # | |
16 # $Id: safety.test,v 1.4 2008/03/18 13:46:53 drh Exp $ | |
17 | |
18 set testdir [file dirname $argv0] | |
19 source $testdir/tester.tcl | |
20 | |
21 ifcapable !debug { | |
22 puts "Skipping safety tests since SQLITE_DEBUG is off" | |
23 finish_test | |
24 return | |
25 } | |
26 | |
27 # Return the UTF-8 representation of the supplied UTF-16 string $str. | |
28 proc utf8 {str} { | |
29 # If $str ends in two 0x00 0x00 bytes, knock these off before | |
30 # converting to UTF-8 using TCL. | |
31 binary scan $str \c* vals | |
32 if {[lindex $vals end]==0 && [lindex $vals end-1]==0} { | |
33 set str [binary format \c* [lrange $vals 0 end-2]] | |
34 } | |
35 | |
36 set r [encoding convertfrom unicode $str] | |
37 return $r | |
38 } | |
39 | |
40 | |
41 do_test safety-1.1 { | |
42 set DB [sqlite3_connection_pointer db] | |
43 db eval {CREATE TABLE t1(a)} | |
44 sqlite_set_magic $DB SQLITE_MAGIC_BUSY | |
45 catchsql { | |
46 SELECT name FROM sqlite_master; | |
47 } | |
48 } {1 {library routine called out of sequence}} | |
49 do_test safety-1.2 { | |
50 sqlite_set_magic $DB SQLITE_MAGIC_OPEN | |
51 catchsql { | |
52 SELECT name FROM sqlite_master | |
53 } | |
54 } {0 t1} | |
55 | |
56 do_test safety-2.1 { | |
57 proc safety_on {} "sqlite_set_magic $DB SQLITE_MAGIC_BUSY" | |
58 db function safety_on safety_on | |
59 catchsql { | |
60 SELECT safety_on(), name FROM sqlite_master | |
61 } | |
62 } {1 {library routine called out of sequence}} | |
63 ifcapable {utf16} { | |
64 do_test safety-2.1.1 { | |
65 utf8 [sqlite3_errmsg16 db] | |
66 } {library routine called out of sequence} | |
67 } | |
68 do_test safety-2.2 { | |
69 catchsql { | |
70 SELECT 'hello' | |
71 } | |
72 } {1 {library routine called out of sequence}} | |
73 do_test safety-2.3 { | |
74 sqlite3_close $DB | |
75 } {SQLITE_MISUSE} | |
76 do_test safety-2.4 { | |
77 sqlite_set_magic $DB SQLITE_MAGIC_OPEN | |
78 execsql { | |
79 SELECT name FROM sqlite_master | |
80 } | |
81 } {t1} | |
82 | |
83 do_test safety-3.1 { | |
84 set rc [catch { | |
85 db eval {SELECT name FROM sqlite_master} { | |
86 sqlite_set_magic $DB SQLITE_MAGIC_BUSY | |
87 } | |
88 } msg] | |
89 lappend rc $msg | |
90 } {1 {library routine called out of sequence}} | |
91 sqlite_set_magic $DB SQLITE_MAGIC_OPEN | |
92 | |
93 finish_test | |
OLD | NEW |