1 # 2006 August 23 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 script is automatic extension loading and the 13 # sqlite3_auto_extension() API. 14 # 15 # $Id: loadext2.test,v 1.3 2008/03/19 16:08:54 drh Exp $ 16 17 set testdir [file dirname $argv0] 18 source $testdir/tester.tcl 19 20 # Only run these tests if the approriate APIs are defined 21 # in the system under test. 22 # 23 ifcapable !load_ext { 24 finish_test 25 return 26 } 27 if {[info command sqlite3_auto_extension_sqr]==""} { 28 finish_test 29 return 30 } 31 32 33 # None of the extension are loaded by default. 34 # 35 do_test loadext2-1.1 { 36 catchsql { 37 SELECT sqr(2) 38 } 39 } {1 {no such function: sqr}} 40 do_test loadext2-1.2 { 41 catchsql { 42 SELECT cube(2) 43 } 44 } {1 {no such function: cube}} 45 46 # Register auto-loaders. Still functions do not exist. 47 # 48 do_test loadext2-1.3 { 49 sqlite3_auto_extension_sqr 50 sqlite3_auto_extension_cube 51 catchsql { 52 SELECT sqr(2) 53 } 54 } {1 {no such function: sqr}} 55 do_test loadext2-1.4 { 56 catchsql { 57 SELECT cube(2) 58 } 59 } {1 {no such function: cube}} 60 61 62 # Functions do exist in a new database connection 63 # 64 do_test loadext2-1.5 { 65 sqlite3 db test.db 66 catchsql { 67 SELECT sqr(2) 68 } 69 } {0 4.0} 70 do_test loadext2-1.6 { 71 catchsql { 72 SELECT cube(2) 73 } 74 } {0 8.0} 75 76 77 # Reset extension auto loading. Existing extensions still exist. 78 # 79 do_test loadext2-1.7 { 80 sqlite3_reset_auto_extension 81 catchsql { 82 SELECT sqr(2) 83 } 84 } {0 4.0} 85 do_test loadext2-1.8 { 86 catchsql { 87 SELECT cube(2) 88 } 89 } {0 8.0} 90 91 92 # Register only the sqr() function. 93 # 94 do_test loadext2-1.9 { 95 sqlite3_auto_extension_sqr 96 sqlite3 db test.db 97 catchsql { 98 SELECT sqr(2) 99 } 100 } {0 4.0} 101 do_test loadext2-1.10 { 102 catchsql { 103 SELECT cube(2) 104 } 105 } {1 {no such function: cube}} 106 107 # Register only the cube() function. 108 # 109 do_test loadext2-1.11 { 110 sqlite3_reset_auto_extension 111 sqlite3_auto_extension_cube 112 sqlite3 db test.db 113 catchsql { 114 SELECT sqr(2) 115 } 116 } {1 {no such function: sqr}} 117 do_test loadext2-1.12 { 118 catchsql { 119 SELECT cube(2) 120 } 121 } {0 8.0} 122 123 # Register a broken entry point. 124 # 125 do_test loadext2-1.13 { 126 sqlite3_auto_extension_broken 127 set rc [catch {sqlite3 db test.db} errmsg] 128 lappend rc $errmsg 129 } {1 {automatic extension loading failed: broken autoext!}} 130 do_test loadext2-1.14 { 131 catchsql { 132 SELECT sqr(2) 133 } 134 } {1 {no such function: sqr}} 135 do_test loadext2-1.15 { 136 catchsql { 137 SELECT cube(2) 138 } 139 } {0 8.0} 140 141 142 sqlite3_reset_auto_extension 143 autoinstall_test_functions 144 finish_test 145