Home | History | Annotate | Download | only in test
      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