File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / badutf2.test
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 4 months ago) by misho
CVS tags: MAIN, HEAD
Initial revision

    1: # 2011 March 15
    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. 
   12: #
   13: # This file checks to make sure SQLite is able to gracEFully
   14: # handle malformed UTF-8.
   15: #
   16: 
   17: set testdir [file dirname $argv0]
   18: source $testdir/tester.tcl
   19: 
   20: proc utf8_to_ustr2 {s} {
   21:   set r ""
   22:   foreach i [split $s ""] {
   23:     scan $i %c c
   24:     append r [format \\u%04.4X $c]
   25:   }
   26:   set r
   27: }
   28: 
   29: proc utf8_to_hstr {in} {
   30:  regsub -all -- {(..)} $in {%[format "%s" \1]} out
   31:  subst $out
   32: }
   33: 
   34: proc utf8_to_xstr {in} {
   35:  regsub -all -- {(..)} $in {\\\\x[format "%s" \1]} out
   36:  subst $out
   37: }
   38: 
   39: proc utf8_to_ustr {in} {
   40:  regsub -all -- {(..)} $in {\\\\u[format "%04.4X" 0x\1]} out
   41:  subst $out
   42: }
   43: 
   44: do_test badutf2-1.0 {
   45:   db close
   46:   forcedelete test.db
   47:   sqlite3 db test.db
   48:   db eval "PRAGMA encoding = 'UTF-8'"
   49: } {}
   50: 
   51: do_test badutf2-4.0 {
   52:   set S [sqlite3_prepare_v2 db "SELECT ?" -1 dummy]
   53:   sqlite3_expired $S
   54: } {0}
   55:         
   56: foreach { i len uval xstr ustr u2u } {
   57: 1 1 00     \x00         {}        {}
   58: 2 1 01     \x01         "\\u0001" 01
   59: 3 1 3F     \x3F         "\\u003F" 3F
   60: 4 1 7F     \x7F         "\\u007F" 7F
   61: 5 1 80     \x80         "\\u0080" C280
   62: 6 1 C3BF   \xFF         "\\u00FF" C3BF
   63: 7 3 EFBFBD \xEF\xBF\xBD "\\uFFFD" {}
   64: } {
   65: 
   66:   set hstr [ utf8_to_hstr $uval ]
   67: 
   68:   ifcapable bloblit {
   69:     if {$hstr != "%00"} {
   70:       do_test badutf2-2.1.$i {
   71:         set sql "SELECT '$hstr'=CAST(x'$uval' AS text) AS x;"
   72:         set res [ sqlite3_exec db $sql ]
   73:         lindex [ lindex $res 1] 1
   74:       } {1}
   75:       do_test badutf2-2.2.$i {
   76:         set sql "SELECT CAST('$hstr' AS blob)=x'$uval' AS x;"
   77:         set res [ sqlite3_exec db $sql ]
   78:         lindex [ lindex $res 1] 1
   79:       } {1}
   80:     }
   81:     do_test badutf2-2.3.$i {
   82:       set sql "SELECT hex(CAST(x'$uval' AS text)) AS x;"
   83:       set res [ sqlite3_exec db $sql ]
   84:       lindex [ lindex $res 1] 1
   85:     } $uval
   86:     do_test badutf2-2.4.$i {
   87:       set sql "SELECT hex(CAST(x'$uval' AS text)) AS x;"
   88:       set res [ sqlite3_exec db $sql ]
   89:       lindex [ lindex $res 1] 1
   90:     } $uval
   91:   }
   92: 
   93:   if {$hstr != "%00"} {
   94:     do_test badutf2-3.1.$i {
   95:       set sql "SELECT hex('$hstr') AS x;"
   96:       set res [ sqlite3_exec db $sql ]
   97:       lindex [ lindex $res 1] 1
   98:     } $uval
   99:   }
  100: 
  101:   do_test badutf2-4.1.$i {
  102:     sqlite3_reset $S
  103:     sqlite3_bind_text $S 1 $xstr $len
  104:     sqlite3_step $S
  105:     utf8_to_ustr2 [ sqlite3_column_text $S 0 ]
  106:   } $ustr
  107: 
  108:   ifcapable debug {
  109:     do_test badutf2-5.1.$i {
  110:       utf8_to_utf8 $uval
  111:     } $u2u
  112:   }
  113: 
  114: }
  115: 
  116: do_test badutf2-4.2 {
  117:   sqlite3_finalize $S
  118: } {SQLITE_OK}
  119: 
  120: 
  121: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>