1 # 2010 Sept 29 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 focus of 12 # this file is testing the SQLite routines used for converting between the 13 # various suported unicode encodings (UTF-8, UTF-16, UTF-16le and 14 # UTF-16be). 15 # 16 # $Id: enc4.test,v 1.0 2010/09/29 08:29:32 shaneh Exp $ 17 18 set testdir [file dirname $argv0] 19 source $testdir/tester.tcl 20 21 # If UTF16 support is disabled, ignore the tests in this file 22 # 23 ifcapable {!utf16} { 24 finish_test 25 return 26 } 27 28 db close 29 30 # The three unicode encodings understood by SQLite. 31 set encodings [list UTF-8 UTF-16le UTF-16be] 32 33 # initial value to use in SELECT 34 set inits [list 1 1.0 1. 1e0] 35 36 # vals 37 set vals [list\ 38 "922337203685477580792233720368547758079223372036854775807"\ 39 "100000000000000000000000000000000000000000000000000000000"\ 40 "1.0000000000000000000000000000000000000000000000000000000"\ 41 ] 42 43 set i 1 44 foreach enc $encodings { 45 46 file delete -force test.db 47 sqlite3 db test.db 48 db eval "PRAGMA encoding = \"$enc\"" 49 50 do_test enc4-$i.1 { 51 db eval {PRAGMA encoding} 52 } $enc 53 54 set j 1 55 foreach init $inits { 56 57 do_test enc4-$i.$j.2 { 58 set S [sqlite3_prepare_v2 db "SELECT $init+?" -1 dummy] 59 sqlite3_expired $S 60 } {0} 61 62 set k 1 63 foreach val $vals { 64 for {set x 1} {$x<18} {incr x} { 65 set part [expr $init + [string range $val 0 [expr $x-1]]] 66 regsub {e\+0} $part {e+} part 67 regsub {^1e} $part {1.0e} part 68 69 do_test enc4-$i.$j.$k.3.$x { 70 sqlite3_reset $S 71 sqlite3_bind_text $S 1 $val $x 72 sqlite3_step $S 73 sqlite3_column_text $S 0 74 } [list $part] 75 76 do_test enc4-$i.$j.$k.4.$x { 77 sqlite3_reset $S 78 sqlite3_bind_text16 $S 1 [encoding convertto unicode $val] [expr $x*2] 79 sqlite3_step $S 80 sqlite3_column_text $S 0 81 } [list $part] 82 } 83 84 incr k 85 } 86 87 do_test enc4-$i.$j.5 { 88 sqlite3_finalize $S 89 } {SQLITE_OK} 90 91 incr j 92 } 93 94 db close 95 incr i 96 } 97 98 file delete -force test.db 99 sqlite3 db test.db 100 101 do_test enc4-4.1 { 102 db eval "select 1+1." 103 } {2.0} 104 105 do_test enc4-4.2.1 { 106 set S [sqlite3_prepare_v2 db "SELECT 1+1." -1 dummy] 107 sqlite3_step $S 108 sqlite3_column_text $S 0 109 } {2.0} 110 111 do_test enc4-4.2.2 { 112 sqlite3_finalize $S 113 } {SQLITE_OK} 114 115 do_test enc4-4.3.1 { 116 set S [sqlite3_prepare_v2 db "SELECT 1+?" -1 dummy] 117 sqlite3_bind_text $S 1 "1." 2 118 sqlite3_step $S 119 sqlite3_column_text $S 0 120 } {2.0} 121 122 do_test enc4-4.3.2 { 123 sqlite3_finalize $S 124 } {SQLITE_OK} 125 126 do_test enc4-4.4.1 { 127 set S [sqlite3_prepare_v2 db "SELECT 1+?" -1 dummy] 128 sqlite3_bind_text $S 1 "1.0" 2 129 sqlite3_step $S 130 sqlite3_column_text $S 0 131 } {2.0} 132 133 do_test enc4-4.4.2 { 134 sqlite3_finalize $S 135 } {SQLITE_OK} 136 137 db close 138 139 finish_test 140