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

1.1     ! misho       1: # 2007 May 1
        !             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: #
        !            12: # $Id: icu.test,v 1.2 2008/07/12 14:52:20 drh Exp $
        !            13: #
        !            14: 
        !            15: set testdir [file dirname $argv0]
        !            16: source $testdir/tester.tcl
        !            17: 
        !            18: ifcapable !icu {
        !            19:   finish_test
        !            20:   return
        !            21: }
        !            22: 
        !            23: # Create a table to work with.
        !            24: #
        !            25: execsql {CREATE TABLE test1(i1 int, i2 int, r1 real, r2 real, t1 text, t2 text)}
        !            26: execsql {INSERT INTO test1 VALUES(1,2,1.1,2.2,'hello','world')}
        !            27: proc test_expr {name settings expr result} {
        !            28:   do_test $name [format {
        !            29:     lindex [db eval {
        !            30:       BEGIN; 
        !            31:       UPDATE test1 SET %s; 
        !            32:       SELECT %s FROM test1; 
        !            33:       ROLLBACK;
        !            34:     }] 0
        !            35:   } $settings $expr] $result
        !            36: }
        !            37: 
        !            38: # Tests of the REGEXP operator.
        !            39: #
        !            40: test_expr icu-1.1 {i1='hello'} {i1 REGEXP 'hello'}  1
        !            41: test_expr icu-1.2 {i1='hello'} {i1 REGEXP '.ello'}  1
        !            42: test_expr icu-1.3 {i1='hello'} {i1 REGEXP '.ell'}   0
        !            43: test_expr icu-1.4 {i1='hello'} {i1 REGEXP '.ell.*'} 1
        !            44: test_expr icu-1.5 {i1=NULL}    {i1 REGEXP '.ell.*'} {}
        !            45: 
        !            46: # Some non-ascii characters with defined case mappings
        !            47: #
        !            48: set ::EGRAVE "\xC8"
        !            49: set ::egrave "\xE8"
        !            50: 
        !            51: set ::OGRAVE "\xD2"
        !            52: set ::ograve "\xF2"
        !            53: 
        !            54: # That German letter that looks a bit like a B. The
        !            55: # upper-case version of which is "SS" (two characters).
        !            56: #
        !            57: set ::szlig "\xDF" 
        !            58: 
        !            59: # Tests of the upper()/lower() functions.
        !            60: #
        !            61: test_expr icu-2.1 {i1='HellO WorlD'} {upper(i1)} {HELLO WORLD}
        !            62: test_expr icu-2.2 {i1='HellO WorlD'} {lower(i1)} {hello world}
        !            63: test_expr icu-2.3 {i1=$::egrave} {lower(i1)}     $::egrave
        !            64: test_expr icu-2.4 {i1=$::egrave} {upper(i1)}     $::EGRAVE
        !            65: test_expr icu-2.5 {i1=$::ograve} {lower(i1)}     $::ograve
        !            66: test_expr icu-2.6 {i1=$::ograve} {upper(i1)}     $::OGRAVE
        !            67: test_expr icu-2.3 {i1=$::EGRAVE} {lower(i1)}     $::egrave
        !            68: test_expr icu-2.4 {i1=$::EGRAVE} {upper(i1)}     $::EGRAVE
        !            69: test_expr icu-2.5 {i1=$::OGRAVE} {lower(i1)}     $::ograve
        !            70: test_expr icu-2.6 {i1=$::OGRAVE} {upper(i1)}     $::OGRAVE
        !            71: 
        !            72: test_expr icu-2.7 {i1=$::szlig} {upper(i1)}      "SS"
        !            73: test_expr icu-2.8 {i1='SS'} {lower(i1)}          "ss"
        !            74: 
        !            75: # In turkish (locale="tr_TR"), the lower case version of I
        !            76: # is "small dotless i" (code point 0x131 (decimal 305)).
        !            77: #
        !            78: set ::small_dotless_i "\u0131"
        !            79: test_expr icu-3.1 {i1='I'} {lower(i1)}           "i"
        !            80: test_expr icu-3.2 {i1='I'} {lower(i1, 'tr_tr')}  $::small_dotless_i
        !            81: test_expr icu-3.3 {i1='I'} {lower(i1, 'en_AU')}  "i"
        !            82: 
        !            83: #--------------------------------------------------------------------
        !            84: # Test the collation sequence function.
        !            85: #
        !            86: do_test icu-4.1 {
        !            87:   execsql {
        !            88:     CREATE TABLE fruit(name);
        !            89:     INSERT INTO fruit VALUES('plum');
        !            90:     INSERT INTO fruit VALUES('cherry');
        !            91:     INSERT INTO fruit VALUES('apricot');
        !            92:     INSERT INTO fruit VALUES('peach');
        !            93:     INSERT INTO fruit VALUES('chokecherry');
        !            94:     INSERT INTO fruit VALUES('yamot');
        !            95:   }
        !            96: } {}
        !            97: do_test icu-4.2 {
        !            98:   execsql {
        !            99:     SELECT icu_load_collation('en_US', 'AmericanEnglish');
        !           100:     SELECT icu_load_collation('lt_LT', 'Lithuanian');
        !           101:   }
        !           102:   execsql {
        !           103:     SELECT name FROM fruit ORDER BY name COLLATE AmericanEnglish ASC;
        !           104:   }
        !           105: } {apricot cherry chokecherry peach plum yamot}
        !           106: 
        !           107: 
        !           108: # Test collation using Lithuanian rules. In the Lithuanian
        !           109: # alphabet, "y" comes right after "i".
        !           110: #
        !           111: do_test icu-4.3 {
        !           112:   execsql {
        !           113:     SELECT name FROM fruit ORDER BY name COLLATE Lithuanian ASC;
        !           114:   }
        !           115: } {apricot cherry chokecherry yamot peach plum}
        !           116: 
        !           117: #-------------------------------------------------------------------------
        !           118: # Test that it is not possible to call the ICU regex() function with 
        !           119: # anything other than exactly two arguments. See also:
        !           120: #
        !           121: #   http://src.chromium.org/viewvc/chrome/trunk/src/third_party/sqlite/icu-regexp.patch?revision=34807&view=markup
        !           122: #
        !           123: do_catchsql_test icu-5.1 { SELECT regexp('a[abc]c.*', 'abc') } {0 1}
        !           124: do_catchsql_test icu-5.2        !           125:   SELECT regexp('a[abc]c.*') 
        !           126: } {1 {wrong number of arguments to function regexp()}}
        !           127: do_catchsql_test icu-5.3        !           128:   SELECT regexp('a[abc]c.*', 'abc', 'c') 
        !           129: } {1 {wrong number of arguments to function regexp()}}
        !           130: do_catchsql_test icu-5.4        !           131:   SELECT 'abc' REGEXP 'a[abc]c.*'
        !           132: } {0 1}
        !           133: do_catchsql_test icu-5.4 { SELECT 'abc' REGEXP }    {1 {near " ": syntax error}}
        !           134: do_catchsql_test icu-5.5 { SELECT 'abc' REGEXP, 1 } {1 {near ",": syntax error}}
        !           135: 
        !           136: finish_test

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