Annotation of embedaddon/sqlite3/test/badutf2.test, revision 1.1

1.1     ! misho       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>