diff options
Diffstat (limited to 'tests/utf.test')
| -rw-r--r-- | tests/utf.test | 1237 |
1 files changed, 229 insertions, 1008 deletions
diff --git a/tests/utf.test b/tests/utf.test index edb01c1..30200c1 100644 --- a/tests/utf.test +++ b/tests/utf.test @@ -2,839 +2,147 @@ # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. # -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. +# Copyright (c) 1997 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -if {"::tcltest" ni [namespace children]} { - package require tcltest 2.5 +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2 namespace import -force ::tcltest::* } -::tcltest::loadTestedCommands -catch [list package require -exact tcl::test [info patchlevel]] - -source [file join [file dirname [info script]] tcltests.tcl] - -testConstraint testbytestring [llength [info commands testbytestring]] -testConstraint testfindfirst [llength [info commands testfindfirst]] -testConstraint testfindlast [llength [info commands testfindlast]] -testConstraint testnumutfchars [llength [info commands testnumutfchars]] -testConstraint teststringobj [llength [info commands teststringobj]] -testConstraint testutfnext [llength [info commands testutfnext]] -testConstraint testutfprev [llength [info commands testutfprev]] -testConstraint testgetunichar [llength [info commands testgetunichar]] - -testConstraint tip413 [expr {[string trim \x00] eq {}}] - catch {unset x} -test utf-1.1 {Tcl_UniCharToUtf: 1 byte sequences} testbytestring { - expr {"\x01" eq [testbytestring \x01]} -} 1 -test utf-1.2 {Tcl_UniCharToUtf: 2 byte sequences} testbytestring { - expr {"\x00" eq [testbytestring \xC0\x80]} -} 1 -test utf-1.3 {Tcl_UniCharToUtf: 2 byte sequences} testbytestring { - expr {"\xE0" eq [testbytestring \xC3\xA0]} -} 1 -test utf-1.4 {Tcl_UniCharToUtf: 3 byte sequences} testbytestring { - expr {"乎" eq [testbytestring \xE4\xB9\x8E]} -} 1 -test utf-1.5 {Tcl_UniCharToUtf: overflowed Tcl_UniChar} testbytestring { - expr {[format %c 0x110000] eq [testbytestring \xEF\xBF\xBD]} -} 1 -test utf-1.6 {Tcl_UniCharToUtf: negative Tcl_UniChar} testbytestring { - expr {[format %c -1] eq [testbytestring \xEF\xBF\xBD]} -} 1 -test utf-1.7.0 {Tcl_UniCharToUtf: 4 byte sequences} {testbytestring} { - expr {"\U014E4E" eq [testbytestring \xF0\x94\xB9\x8E]} -} 1 -test utf-1.8 {Tcl_UniCharToUtf: 3 byte sequence, high surrogate} testbytestring { - expr {"\uD842" eq [testbytestring \xED\xA1\x82]} -} 1 -test utf-1.9 {Tcl_UniCharToUtf: 3 byte sequence, low surrogate} testbytestring { - expr {"\uDC42" eq [testbytestring \xED\xB1\x82]} -} 1 -test utf-1.10 {Tcl_UniCharToUtf: 3 byte sequence, high surrogate} testbytestring { - expr {[format %c 0xD842] eq [testbytestring \xED\xA1\x82]} -} 1 -test utf-1.11 {Tcl_UniCharToUtf: 3 byte sequence, low surrogate} testbytestring { - expr {[format %c 0xDC42] eq [testbytestring \xED\xB1\x82]} -} 1 -test utf-1.12 {Tcl_UniCharToUtf: 4 byte sequence, high/low surrogate} {testbytestring} { - expr {"\uD842\uDC42" eq [testbytestring \xF0\xA0\xA1\x82]} -} 1 -test utf-1.13 {Tcl_UniCharToUtf: Invalid surrogate} {testbytestring} { - expr {"\UD842" eq [testbytestring \xEF\xBF\xBD]} -} 1 -test utf-1.14 {Tcl_UniCharToUtf: surrogate pairs from concat} { - set lo \uDE02 - return \uD83D$lo -} \uD83D\uDE02 -test utf-1.15 {Tcl_UniCharToUtf: surrogate pairs from concat} { - set hi \uD83D - return $hi\uDE02 -} \uD83D\uDE02 -test utf-1.16 {Tcl_UniCharToUtf: \xC0 + \x80} testbytestring { - set lo [testbytestring \x80] - string length [testbytestring \xC0]$lo -} 2 -test utf-1.17 {Tcl_UniCharToUtf: \xC0 + \x80} testbytestring { - set hi [testbytestring \xC0] - string length $hi[testbytestring \x80] -} 2 -test utf-1.18 {Tcl_UniCharToUtf: surrogate pairs from concat} { - string cat \uD83D \uDE02 -} \uD83D\uDE02 +test utf-1.1 {Tcl_UniCharToUtf: 1 byte sequences} { + set x \x01 +} [bytestring "\x01"] +test utf-1.2 {Tcl_UniCharToUtf: 2 byte sequences} { + set x "\x00" +} [bytestring "\xc0\x80"] +test utf-1.3 {Tcl_UniCharToUtf: 2 byte sequences} { + set x "\xe0" +} [bytestring "\xc3\xa0"] +test utf-1.4 {Tcl_UniCharToUtf: 3 byte sequences} { + set x "\u4e4e" +} [bytestring "\xe4\xb9\x8e"] +test utf-1.5 {Tcl_UniCharToUtf: overflowed Tcl_UniChar} { + format %c 0x110000 +} [bytestring "\xef\xbf\xbd"] +test utf-1.6 {Tcl_UniCharToUtf: negative Tcl_UniChar} { + format %c -1 +} [bytestring "\xef\xbf\xbd"] test utf-2.1 {Tcl_UtfToUniChar: low ascii} { string length "abc" -} 3 -test utf-2.2 {Tcl_UtfToUniChar: naked trail bytes} testbytestring { - string length [testbytestring \x82\x83\x84] -} 3 -test utf-2.3 {Tcl_UtfToUniChar: lead (2-byte) followed by non-trail} testbytestring { - string length [testbytestring \xC2] -} 1 +} {3} +test utf-2.2 {Tcl_UtfToUniChar: naked trail bytes} { + string length [bytestring "\x82\x83\x84"] +} {3} +test utf-2.3 {Tcl_UtfToUniChar: lead (2-byte) followed by non-trail} { + string length [bytestring "\xC2"] +} {1} test utf-2.4 {Tcl_UtfToUniChar: lead (2-byte) followed by trail} { - string length \xA2 -} 1 -test utf-2.5 {Tcl_UtfToUniChar: lead (3-byte) followed by non-trail} testbytestring { - string length [testbytestring \xE2] -} 1 -test utf-2.6 {Tcl_UtfToUniChar: lead (3-byte) followed by 1 trail} testbytestring { - string length [testbytestring \xE2\xA2] -} 2 -test utf-2.7 {Tcl_UtfToUniChar: lead (3-byte) followed by 2 trail} testbytestring { - string length [testbytestring \xE4\xB9\x8E] -} 1 -test utf-2.8 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail} { - string length 𐀀 -} 1 -test utf-2.9 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail} { - string length \U10FFFF -} 1 -test utf-2.10 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail, underflow} testbytestring { - string length [testbytestring \xF0\x8F\xBF\xBF] -} 4 -test utf-2.11 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail, overflow} testbytestring { - # Would decode to U+110000 but that is outside the Unicode range. - string length [testbytestring \xF4\x90\x80\x80] -} 4 -test utf-2.12 {Tcl_UtfToUniChar: longer UTF sequences not supported} testbytestring { - string length [testbytestring \xF8\xA2\xA2\xA2\xA2] -} 5 + string length [bytestring "\xC2\xa2"] +} {1} +test utf-2.5 {Tcl_UtfToUniChar: lead (3-byte) followed by non-trail} { + string length [bytestring "\xE2"] +} {1} +test utf-2.6 {Tcl_UtfToUniChar: lead (3-byte) followed by 1 trail} { + string length [bytestring "\xE2\xA2"] +} {2} +test utf-2.7 {Tcl_UtfToUniChar: lead (3-byte) followed by 2 trail} { + string length [bytestring "\xE4\xb9\x8e"] +} {1} +test utf-2.8 {Tcl_UtfToUniChar: longer UTF sequences not supported} { + string length [bytestring "\xF4\xA2\xA2\xA2"] +} {4} test utf-3.1 {Tcl_UtfCharComplete} { } {} +testConstraint testnumutfchars [llength [info commands testnumutfchars]] test utf-4.1 {Tcl_NumUtfChars: zero length} testnumutfchars { testnumutfchars "" -} 0 +} {0} test utf-4.2 {Tcl_NumUtfChars: length 1} testnumutfchars { - testnumutfchars \xA2 -} 1 -test utf-4.3 {Tcl_NumUtfChars: long string} {testnumutfchars testbytestring} { - testnumutfchars abc\xA2[testbytestring \xE4\xB9\x8E\xA2\x4E] -} 7 -test utf-4.4 {Tcl_NumUtfChars: #x00} testnumutfchars { - testnumutfchars \x00 -} 1 + testnumutfchars [bytestring "\xC2\xA2"] +} {1} +test utf-4.3 {Tcl_NumUtfChars: long string} testnumutfchars { + testnumutfchars [bytestring "abc\xC2\xA2\xe4\xb9\x8e\uA2\u4e4e"] +} {7} +test utf-4.4 {Tcl_NumUtfChars: #u0000} testnumutfchars { + testnumutfchars [bytestring "\xC0\x80"] +} {1} test utf-4.5 {Tcl_NumUtfChars: zero length, calc len} testnumutfchars { - testnumutfchars "" 0 -} 0 -test utf-4.6 {Tcl_NumUtfChars: length 1, calc len} {testnumutfchars testbytestring} { - testnumutfchars \xA2 end -} 1 -test utf-4.7 {Tcl_NumUtfChars: long string, calc len} {testnumutfchars testbytestring} { - testnumutfchars abc\xA2[testbytestring \xE4\xB9\x8E\xA2\x4E] end -} 7 -test utf-4.8 {Tcl_NumUtfChars: #x00, calc len} testnumutfchars { - testnumutfchars \x00 end -} 1 -# Bug [2738427]: Tcl_NumUtfChars(...) no overflow check -test utf-4.9 {Tcl_NumUtfChars: #u20AC, calc len, incomplete} {testnumutfchars testbytestring} { - testnumutfchars [testbytestring \xE2\x82\xAC] end-1 -} 2 -test utf-4.10 {Tcl_NumUtfChars: #x00, calc len, overcomplete} {testnumutfchars testbytestring} { - testnumutfchars [testbytestring \x00] end+1 -} 2 -test utf-4.11 {Tcl_NumUtfChars: 3 bytes of 4-byte UTF-8 characater} {testnumutfchars testbytestring} { - testnumutfchars [testbytestring \xF0\x9F\x92\xA9] end-1 -} 3 -test utf-4.12 {Tcl_NumUtfChars: #4-byte UTF-8 character} {testnumutfchars testbytestring deprecated} { - testnumutfchars [testbytestring \xF0\x9F\x92\xA9] end -} 2 -test utf-4.13 {Tcl_NumUtfChars: end of string} {testnumutfchars testbytestring} { - testnumutfchars foobar[testbytestring \xF2\xC2\xA0] end -} 8 -test utf-4.14 {Tcl_NumUtfChars: 3 bytes of 4-byte UTF-8 characater} {testnumutfchars testbytestring} { - testnumutfchars [testbytestring \xF4\x90\x80\x80] end-1 -} 3 - -test utf-5.1 {Tcl_UtfFindFirst} {testfindfirst testbytestring} { - testfindfirst [testbytestring abcbc] 98 -} bcbc -test utf-5.2 {Tcl_UtfFindLast} {testfindlast testbytestring} { - testfindlast [testbytestring abcbc] 98 -} bc + testnumutfchars "" 1 +} {0} +test utf-4.6 {Tcl_NumUtfChars: length 1, calc len} testnumutfchars { + testnumutfchars [bytestring "\xC2\xA2"] 1 +} {1} +test utf-4.7 {Tcl_NumUtfChars: long string, calc len} testnumutfchars { + testnumutfchars [bytestring "abc\xC2\xA2\xe4\xb9\x8e\uA2\u4e4e"] 1 +} {7} +test utf-4.8 {Tcl_NumUtfChars: #u0000, calc len} testnumutfchars { + testnumutfchars [bytestring "\xC0\x80"] 1 +} {1} + +test utf-5.1 {Tcl_UtfFindFirsts} { +} {} -test utf-6.1 {Tcl_UtfNext} {testutfnext testbytestring} { - # This takes the pointer one past the terminating NUL. - # This is really an invalid call. - testutfnext [testbytestring \x00] -} 1 -test utf-6.2 {Tcl_UtfNext} testutfnext { - testutfnext A -} 1 -test utf-6.3 {Tcl_UtfNext} testutfnext { - testutfnext AA -} 1 -test utf-6.4 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring A\xA0] -} 1 -test utf-6.5 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext A[testbytestring \xD0] -} 1 -test utf-6.6 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext A[testbytestring \xE8] -} 1 -test utf-6.7 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext A[testbytestring \xF2] -} 1 -test utf-6.8 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext A[testbytestring \xF8] -} 1 -test utf-6.9 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0\x00] -} 1 -test utf-6.10 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0]G -} 1 -test utf-6.11 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0\xA0\x00] -} 2 -test utf-6.12 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0\xD0] -} 1 -test utf-6.13 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0\xE8] -} 1 -test utf-6.14 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0\xF2] -} 1 -test utf-6.15 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0\xF8] -} 1 -test utf-6.16 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\x00] -} 1 -test utf-6.17 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0]G -} 1 -test utf-6.18 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xA0] -} 2 -test utf-6.19 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xD0] -} 1 -test utf-6.20 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xE8] -} 1 -test utf-6.21 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xF2] -} 1 -test utf-6.22 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xF8] -} 1 -test utf-6.23 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\x00] -} 1 -test utf-6.24 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8]G -} 1 -test utf-6.25 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xA0\x00] -} 1 -test utf-6.26 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xD0] -} 1 -test utf-6.27 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xE8] -} 1 -test utf-6.28 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xF2] -} 1 -test utf-6.29 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xF8] -} 1 -test utf-6.30 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\x00] -} 1 -test utf-6.31 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2]G -} 1 -test utf-6.32 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\x00] -} 1 -test utf-6.33 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xD0] -} 1 -test utf-6.34 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xE8] -} 1 -test utf-6.35 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xF2] -} 1 -test utf-6.36 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xF8] -} 1 -test utf-6.37 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF8] -} 1 -test utf-6.38 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF8]G -} 1 -test utf-6.39 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF8\xA0] -} 1 -test utf-6.40 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF8\xD0] -} 1 -test utf-6.41 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF8\xE8] -} 1 -test utf-6.42 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF8\xF2] -} 1 -test utf-6.43 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF8\xF8] -} 1 -test utf-6.44 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xA0]G -} 2 -test utf-6.45 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xA0\xA0] -} 2 -test utf-6.46 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xA0\xD0] -} 2 -test utf-6.47 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xA0\xE8] -} 2 -test utf-6.48 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xA0\xF2] -} 2 -test utf-6.49 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xD0\xA0\xF8] -} 2 -test utf-6.50 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xA0]G -} 1 -test utf-6.51 {Tcl_UtfNext} testutfnext { - testutfnext 蠠 -} 3 -test utf-6.52 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xA0\xD0] -} 1 -test utf-6.53 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xA0\xE8] -} 1 -test utf-6.54 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xA0\xF2] -} 1 -test utf-6.55 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xA0\xF8] -} 1 -test utf-6.56 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0]G -} 1 -test utf-6.57 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\x00] -} 1 -test utf-6.58 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xD0] -} 1 -test utf-6.59 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xE8] -} 1 -test utf-6.60 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xF2] -} 1 -test utf-6.61 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xF8] -} 1 -test utf-6.62 {Tcl_UtfNext} testutfnext { - testutfnext 蠠G -} 3 -test utf-6.63 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xE8\xA0\xA0\xA0] -} 3 -test utf-6.64 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext 蠠[testbytestring \xD0] -} 3 -test utf-6.65 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext 蠠[testbytestring \xE8] -} 3 -test utf-6.66 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext 蠠[testbytestring \xF2] -} 3 -test utf-6.67 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext 蠠[testbytestring \xF8] -} 3 -test utf-6.68 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0]G -} 1 -test utf-6.69 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xA0] -} 4 -test utf-6.70 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xD0] -} 1 -test utf-6.71 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xE8] -} 1 -test utf-6.72 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xF2] -} 1 -test utf-6.73 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xF8] -} 1 -test utf-6.74 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xA0]G -} 4 -test utf-6.75 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xA0\xA0] -} 4 -test utf-6.76 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xA0\xD0] -} 4 -test utf-6.77 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xA0\xE8] -} 4 -test utf-6.78 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xA0\xF2] -} 4 -test utf-6.79 {Tcl_UtfNext} {testutfnext testbytestring} { - testutfnext [testbytestring \xF2\xA0\xA0\xA0G\xF8] -} 4 -test utf-6.80 {Tcl_UtfNext - overlong sequences} testutfnext { - testutfnext \x00 -} 2 -test utf-6.81 {Tcl_UtfNext - overlong sequences} {testutfnext testbytestring} { - testutfnext [testbytestring \xC0\x81] -} 1 -test utf-6.82 {Tcl_UtfNext - overlong sequences} {testutfnext testbytestring} { - testutfnext [testbytestring \xC1\x80] -} 1 -test utf-6.83 {Tcl_UtfNext - overlong sequences} {testutfnext testbytestring} { - testutfnext [testbytestring \xC2\x80] -} 2 -test utf-6.84 {Tcl_UtfNext - overlong sequences} {testutfnext testbytestring} { - testutfnext [testbytestring \xE0\x80\x80] -} 1 -test utf-6.85 {Tcl_UtfNext - overlong sequences} {testutfnext testbytestring} { - testutfnext [testbytestring \xE0\xA0\x80] -} 3 -test utf-6.86 {Tcl_UtfNext - overlong sequences} {testutfnext testbytestring} { - testutfnext [testbytestring \xF0\x80\x80\x80] -} 1 -test utf-6.87 {Tcl_UtfNext - overlong sequences} {testutfnext testbytestring} { - testutfnext [testbytestring \xF0\x90\x80\x80] -} 4 -test utf-6.88 {Tcl_UtfNext, pointing to 2th byte of 3-byte valid sequence} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0\xA0\x00] -} 2 -test utf-6.89 {Tcl_UtfNext, pointing to 2th byte of 3-byte invalid sequence} {testutfnext testbytestring} { - testutfnext [testbytestring \x80\x80\x00] -} 2 -test utf-6.90 {Tcl_UtfNext, validity check [493dccc2de]} {testutfnext testbytestring} { - testutfnext [testbytestring \xF4\x8F\xBF\xBF] -} 4 -test utf-6.91 {Tcl_UtfNext, validity check [493dccc2de]} {testutfnext testbytestring} { - testutfnext [testbytestring \xF4\x90\x80\x80] -} 1 -test utf-6.92 {Tcl_UtfNext, pointing to 2th byte of 4-byte valid sequence} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0\xA0\xA0] -} 3 -test utf-6.93 {Tcl_UtfNext, pointing to 2th byte of 4-byte invalid sequence} {testutfnext testbytestring} { - testutfnext [testbytestring \x80\x80\x80] -} 3 -test utf-6.94 {Tcl_UtfNext, pointing to 2th byte of 5-byte invalid sequence} {testutfnext testbytestring} { - testutfnext [testbytestring \xA0\xA0\xA0\xA0] -} 3 -test utf-6.95 {Tcl_UtfNext, pointing to 2th byte of 5-byte invalid sequence} {testutfnext testbytestring} { - testutfnext [testbytestring \x80\x80\x80\x80] -} 3 +test utf-6.1 {Tcl_UtfNext} { +} {} -test utf-7.1 {Tcl_UtfPrev} testutfprev { - testutfprev {} -} 0 -test utf-7.2 {Tcl_UtfPrev} testutfprev { - testutfprev A -} 0 -test utf-7.3 {Tcl_UtfPrev} testutfprev { - testutfprev AA -} 1 -test utf-7.4 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF8] -} 1 -test utf-7.4.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF8\xA0\xA0\xA0] 2 -} 1 -test utf-7.4.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF8\xF8\xA0\xA0] 2 -} 1 -test utf-7.5 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF2] -} 1 -test utf-7.5.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF2\xA0\xA0\xA0] 2 -} 1 -test utf-7.5.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF2\xF8\xA0\xA0] 2 -} 1 -test utf-7.6 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE8] -} 1 -test utf-7.6.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE8\xA0\xA0\xA0] 2 -} 1 -test utf-7.6.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE8\xF8\xA0\xA0] 2 -} 1 -test utf-7.7 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0] -} 1 -test utf-7.7.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0\xA0\xA0\xA0] 2 -} 1 -test utf-7.7.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0\xF8\xA0\xA0] 2 -} 1 -test utf-7.8 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0] -} 1 -test utf-7.8.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0\xA0\xA0\xA0] 2 -} 1 -test utf-7.8.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0\xF8\xA0\xA0] 2 -} 1 -test utf-7.9 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF8\xA0] -} 2 -test utf-7.9.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF8\xA0\xA0\xA0] 3 -} 2 -test utf-7.9.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF8\xA0\xF8\xA0] 3 -} 2 -test utf-7.10.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF2\xA0] -} 1 -test utf-7.10.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF2\xA0\xA0\xA0] 3 -} 1 -test utf-7.10.3 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF2\xA0\xF8\xA0] 3 -} 1 -test utf-7.11 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE8\xA0] -} 1 -test utf-7.11.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE8\xA0\xA0\xA0] 3 -} 1 -test utf-7.11.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE8\xA0\xF8\xA0] 3 -} 1 -test utf-7.11.3 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE8\xA0\xF8] 3 -} 1 -test utf-7.12 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0\xA0] -} 1 -test utf-7.12.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0\xA0\xA0\xA0] 3 -} 1 -test utf-7.12.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0\xA0\xF8\xA0] 3 -} 1 -test utf-7.13 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0\xA0] -} 2 -test utf-7.13.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0\xA0\xA0\xA0] 3 -} 2 -test utf-7.13.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0\xA0\xF8\xA0] 3 -} 2 -test utf-7.14 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF8\xA0\xA0] -} 3 -test utf-7.14.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF8\xA0\xA0\xA0] 4 -} 3 -test utf-7.14.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF8\xA0\xA0\xF8] 4 -} 3 -test utf-7.15.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF2\xA0\xA0] -} 1 -test utf-7.15.3 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF2\xA0\xA0\xA0] 4 -} 1 -test utf-7.15.5 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF2\xA0\xA0\xF8] 4 -} 1 -test utf-7.16 {Tcl_UtfPrev} testutfprev { - testutfprev A蠠 -} 1 -test utf-7.16.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE8\xA0\xA0\xA0] 4 -} 1 -test utf-7.16.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A蠠[testbytestring \xF8] 4 -} 1 -test utf-7.17 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0\xA0\xA0] -} 3 -test utf-7.17.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0\xA0\xA0\xA0] 4 -} 3 -test utf-7.17.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0\xA0\xA0\xF8] 4 -} 3 -test utf-7.18.0 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0\xA0\xA0] -} 3 -test utf-7.18.1 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0\xA0\xA0\xA0] 4 -} 3 -test utf-7.18.2 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0\xA0\xA0\xF8] 4 -} 3 -test utf-7.19 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xF8\xA0\xA0\xA0] -} 4 -test utf-7.20 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xF2\xA0\xA0\xA0] -} 1 -test utf-7.21 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE8\xA0\xA0\xA0] -} 4 -test utf-7.22 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev A[testbytestring \xD0\xA0\xA0\xA0] -} 4 -test utf-7.23 {Tcl_UtfPrev} {testutfprev testbytestring} { - testutfprev [testbytestring A\xA0\xA0\xA0\xA0] -} 4 -test utf-7.24 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xC0\x81] -} 2 -test utf-7.25 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xC0\x81] 2 -} 1 -test utf-7.26 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE0\x80\x80] -} 3 -test utf-7.27 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE0\x80] -} 2 -test utf-7.27.1 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE0\x80\x80] 3 -} 2 -test utf-7.28 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE0] -} 1 -test utf-7.28.1 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE0\x80\x80] 2 -} 1 -test utf-7.29 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF0\x80\x80\x80] -} 4 -test utf-7.30 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF0\x80\x80\x80] 4 -} 3 -test utf-7.31 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF0\x80\x80\x80] 3 -} 2 -test utf-7.32 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF0\x80\x80\x80] 2 -} 1 -test utf-7.33 {Tcl_UtfPrev -- overlong sequence} testutfprev { - testutfprev A\x00 -} 1 -test utf-7.34 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xC1\x80] -} 2 -test utf-7.35 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xC2\x80] -} 1 -test utf-7.36 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE0\xA0\x80] -} 1 -test utf-7.37 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE0\xA0\x80] 3 -} 1 -test utf-7.38 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xE0\xA0\x80] 2 -} 1 -test utf-7.39 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF0\x90\x80\x80] -} 1 -test utf-7.40 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF0\x90\x80\x80] 4 -} 1 -test utf-7.41 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF0\x90\x80\x80] 3 -} 1 -test utf-7.42 {Tcl_UtfPrev -- overlong sequence} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF0\x90\x80\x80] 2 -} 1 -test utf-7.43 {Tcl_UtfPrev -- no lead byte at start} {testutfprev testbytestring} { - testutfprev [testbytestring \xA0] -} 0 -test utf-7.44 {Tcl_UtfPrev -- no lead byte at start} {testutfprev testbytestring} { - testutfprev [testbytestring \xA0\xA0] -} 1 -test utf-7.45 {Tcl_UtfPrev -- no lead byte at start} {testutfprev testbytestring} { - testutfprev [testbytestring \xA0\xA0\xA0] -} 2 -test utf-7.46 {Tcl_UtfPrev -- no lead byte at start} {testutfprev testbytestring} { - testutfprev [testbytestring \xA0\xA0\xA0\xA0] -} 3 -test utf-7.47 {Tcl_UtfPrev, pointing to 3th byte of 3-byte valid sequence} {testutfprev testbytestring} { - testutfprev [testbytestring \xE8\xA0] -} 0 -test utf-7.47.1 {Tcl_UtfPrev, pointing to 3th byte of 3-byte valid sequence} testutfprev { - testutfprev 蠠 2 -} 0 -test utf-7.47.2 {Tcl_UtfPrev, pointing to 3th byte of 3-byte invalid sequence} {testutfprev testbytestring} { - testutfprev [testbytestring \xE8\xA0\x00] 2 -} 0 -test utf-7.48 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF4\x8F\xBF\xBF] -} 1 -test utf-7.48.1 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF4\x8F\xBF\xBF] 4 -} 1 -test utf-7.48.2 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF4\x8F\xBF\xBF] 3 -} 1 -test utf-7.48.3 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF4\x8F\xBF\xBF] 2 -} 1 -test utf-7.49 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF4\x90\x80\x80] -} 4 -test utf-7.49.1 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF4\x90\x80\x80] 4 -} 3 -test utf-7.49.2 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF4\x90\x80\x80] 3 -} 2 -test utf-7.49.3 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev testbytestring} { - testutfprev A[testbytestring \xF4\x90\x80\x80] 2 -} 1 +test utf-7.1 {Tcl_UtfPrev} { +} {} test utf-8.1 {Tcl_UniCharAtIndex: index = 0} { string index abcd 0 -} a +} {a} test utf-8.2 {Tcl_UniCharAtIndex: index = 0} { - string index 乎ɚ 0 -} 乎 + string index \u4e4e\u25a 0 +} "\u4e4e" test utf-8.3 {Tcl_UniCharAtIndex: index > 0} { string index abcd 2 -} c +} {c} test utf-8.4 {Tcl_UniCharAtIndex: index > 0} { - string index 乎ɚÿՃ 2 -} ÿ -test utf-8.5 {Tcl_UniCharAtIndex: high surrogate} { - string index \uD842 0 -} \uD842 -test utf-8.6 {Tcl_UniCharAtIndex: low surrogate} { - string index \uDC42 0 -} \uDC42 -test utf-8.7 {Tcl_UniCharAtIndex: Emoji} { - string index 😀G 0 -} 😀 -test utf-8.8 {Tcl_UniCharAtIndex: Emoji} { - string index 😀G 1 -} G -test utf-8.9 {Tcl_UniCharAtIndex: Emoji} { - string index 😀G 2 -} {} -test utf-8.10 {Tcl_UniCharAtIndex: Emoji} { - string index 😀G 0 -} 😀 -test utf-8.11 {Tcl_UniCharAtIndex: Emoji} { - string index 😀G 1 -} G -test utf-8.12 {Tcl_UniCharAtIndex: Emoji} { - string index 😀G 2 -} {} + string index \u4e4e\u25a\xff\u543 2 +} "\uff" test utf-9.1 {Tcl_UtfAtIndex: index = 0} { string range abcd 0 2 -} abc +} {abc} test utf-9.2 {Tcl_UtfAtIndex: index > 0} { - string range 乎ɚÿՃklmnop 1 5 -} ɚÿՃkl -test utf-9.3 {Tcl_UtfAtIndex: index = 0, Emoji} { - string range 😀G 0 0 -} 😀 -test utf-9.4 {Tcl_UtfAtIndex: index > 0, Emoji} { - string range 😀G 1 1 -} G -test utf-9.5 {Tcl_UtfAtIndex: index > 0, Emoji} { - string range 😀G 2 2 -} {} -test utf-9.6 {Tcl_UtfAtIndex: index = 0, Emoji} { - string range 😀G 0 0 -} 😀 -test utf-9.7 {Tcl_UtfAtIndex: index > 0, Emoji} { - string range 😀G 1 1 -} G -test utf-9.8 {Tcl_UtfAtIndex: index > 0, Emoji} { - string range 😀G 2 2 -} {} + string range \u4e4e\u25a\xff\u543klmnop 1 5 +} "\u25a\xff\u543kl" + test utf-10.1 {Tcl_UtfBackslash: dst == NULL} { set x \n } { } -test utf-10.2 {Tcl_UtfBackslash: \u subst} testbytestring { - expr {"\uA2" eq [testbytestring \xC2\xA2]} -} 1 -test utf-10.3 {Tcl_UtfBackslash: longer \u subst} testbytestring { - expr {"\u4E21" eq [testbytestring \xE4\xB8\xA1]} -} 1 -test utf-10.4 {Tcl_UtfBackslash: stops at first non-hex} testbytestring { - expr {"\u4E2k" eq "[testbytestring \xD3\xA2]k"} -} 1 -test utf-10.5 {Tcl_UtfBackslash: stops after 4 hex chars} testbytestring { - expr {"\u4E216" eq "[testbytestring \xE4\xB8\xA1]6"} -} 1 -test utf-10.6 {Tcl_UtfBackslash: stops after 5 hex chars} {testbytestring} { - expr {"\U1E2165" eq "[testbytestring \xF0\x9E\x88\x96]5"} -} 1 -test utf-10.7 {Tcl_UtfBackslash: stops after 6 hex chars} {testbytestring} { - expr {"\U10E2165" eq "[testbytestring \xF4\x8E\x88\x96]5"} -} 1 - -proc bsCheck {char num {constraints {}}} { +test utf-10.2 {Tcl_UtfBackslash: \u subst} { + set x \ua2 +} [bytestring "\xc2\xa2"] +test utf-10.3 {Tcl_UtfBackslash: longer \u subst} { + set x \u4e21 +} [bytestring "\xe4\xb8\xa1"] +test utf-10.4 {Tcl_UtfBackslash: stops at first non-hex} { + set x \u4e2k +} "[bytestring \xd3\xa2]k" +test utf-10.5 {Tcl_UtfBackslash: stops after 4 hex chars} { + set x \u4e216 +} "[bytestring \xe4\xb8\xa1]6" +proc bsCheck {char num} { global errNum - test utf-10.$errNum {backslash substitution} $constraints { + test utf-10.$errNum {backslash substitution} { scan $char %c value set value } $num incr errNum } -set errNum 8 +set errNum 6 bsCheck \b 8 bsCheck \e 101 bsCheck \f 12 @@ -863,33 +171,15 @@ bsCheck \x 120 bsCheck \xa 10 bsCheck \xA 10 bsCheck \x41 65 -bsCheck \x541 84 +bsCheck \x541 65 bsCheck \u 117 bsCheck \uk 117 bsCheck \u41 65 bsCheck \ua 10 bsCheck \uA 10 bsCheck \340 224 -bsCheck \uA1 161 -bsCheck \u4E21 20001 -bsCheck \741 60 -bsCheck \U 85 -bsCheck \Uk 85 -bsCheck \U41 65 -bsCheck \Ua 10 -bsCheck \UA 10 -bsCheck \UA1 161 -bsCheck \U4E21 20001 -bsCheck \U004E21 20001 -bsCheck \U00004E21 20001 -bsCheck \U0000004E21 78 -bsCheck \U00110000 69632 -bsCheck \U01100000 69632 -bsCheck \U11000000 69632 -bsCheck \U0010FFFF 1114111 -bsCheck \U010FFFF0 1114111 -bsCheck \U10FFFF00 1114111 -bsCheck \UFFFFFFFF 1048575 +bsCheck \ua1 161 +bsCheck \u4e21 20001 test utf-11.1 {Tcl_UtfToUpper} { string toupper {} @@ -898,23 +188,11 @@ test utf-11.2 {Tcl_UtfToUpper} { string toupper abc } ABC test utf-11.3 {Tcl_UtfToUpper} { - string toupper \xE3gh -} \xC3GH + string toupper \u00e3ab +} \u00c3AB test utf-11.4 {Tcl_UtfToUpper} { - string toupper ǣgh -} ǢGH -test utf-11.5 {Tcl_UtfToUpper Georgian (new in Unicode 11)} { - string toupper აᲐ -} ᲐᲐ -test utf-11.6 {Tcl_UtfToUpper beyond U+FFFF} { - string toupper 𐐨 -} 𐐀 -test utf-11.7 {Tcl_UtfToUpper beyond U+FFFF} { - string toupper 𐐨 -} 𐐀 -test utf-11.8 {Tcl_UtfToUpper low/high surrogate)} { - string toupper \uDC24\uD824 -} \uDC24\uD824 + string toupper \u01e3ab +} \u01e2AB test utf-12.1 {Tcl_UtfToLower} { string tolower {} @@ -923,23 +201,11 @@ test utf-12.2 {Tcl_UtfToLower} { string tolower ABC } abc test utf-12.3 {Tcl_UtfToLower} { - string tolower ÃGH -} ãgh + string tolower \u00c3AB +} \u00e3ab test utf-12.4 {Tcl_UtfToLower} { - string tolower ǢGH -} ǣgh -test utf-12.5 {Tcl_UtfToLower Georgian (new in Unicode 11)} { - string tolower აᲐ -} აა -test utf-12.6 {Tcl_UtfToLower low/high surrogate)} { - string tolower \uDC24\uD824 -} \uDC24\uD824 -test utf-12.7 {Tcl_UtfToLower beyond U+FFFF} { - string tolower 𐐀 -} 𐐨 -test utf-12.8 {Tcl_UtfToLower beyond U+FFFF} { - string tolower 𐐀 -} 𐐨 + string tolower \u01e2AB +} \u01e3ab test utf-13.1 {Tcl_UtfToTitle} { string totitle {} @@ -948,26 +214,11 @@ test utf-13.2 {Tcl_UtfToTitle} { string totitle abc } Abc test utf-13.3 {Tcl_UtfToTitle} { - string totitle ãGH -} Ãgh + string totitle \u00e3ab +} \u00c3ab test utf-13.4 {Tcl_UtfToTitle} { - string totitle dzAB -} Dzab -test utf-13.5 {Tcl_UtfToTitle Georgian (new in Unicode 11)} { - string totitle აᲐ -} აᲐ -test utf-13.6 {Tcl_UtfToTitle Georgian (new in Unicode 11)} { - string totitle Აა -} Აა -test utf-13.7 {Tcl_UtfToTitle low/high surrogate)} { - string totitle \uDC24\uD824 -} \uDC24\uD824 -test utf-13.8 {Tcl_UtfToTitle beyond U+FFFF} { - string totitle 𐐨𐐀 -} 𐐀𐐨 -test utf-13.9 {Tcl_UtfToTitle beyond U+FFFF} { - string totitle 𐐨𐐀 -} 𐐀𐐨 + string totitle \u01f3ab +} \u01f2ab test utf-14.1 {Tcl_UtfNcasecmp} { string compare -nocase a b @@ -986,8 +237,8 @@ test utf-15.1 {Tcl_UniCharToUpper, negative delta} { string toupper aA } AA test utf-15.2 {Tcl_UniCharToUpper, positive delta} { - string toupper Ÿÿ -} ŸŸ + string toupper \u0178\u00ff +} \u0178\u0178 test utf-15.3 {Tcl_UniCharToUpper, no delta} { string toupper ! } ! @@ -996,212 +247,182 @@ test utf-16.1 {Tcl_UniCharToLower, negative delta} { string tolower aA } aa test utf-16.2 {Tcl_UniCharToLower, positive delta} { - string tolower ŸÿꞍDž -} ÿÿɥdž + string tolower \u0178\u00ff\uA78D\u01c5 +} \u00ff\u00ff\u0265\u01c6 test utf-17.1 {Tcl_UniCharToLower, no delta} { string tolower ! } ! test utf-18.1 {Tcl_UniCharToTitle, add one for title} { - string totitle DŽ -} Dž + string totitle \u01c4 +} \u01c5 test utf-18.2 {Tcl_UniCharToTitle, subtract one for title} { - string totitle dž -} Dž + string totitle \u01c6 +} \u01c5 test utf-18.3 {Tcl_UniCharToTitle, subtract delta for title (positive)} { - string totitle ſ -} S + string totitle \u017f +} \u0053 test utf-18.4 {Tcl_UniCharToTitle, subtract delta for title (negative)} { - string totitle ÿ -} Ÿ + string totitle \u00ff +} \u0178 test utf-18.5 {Tcl_UniCharToTitle, no delta} { string totitle ! } ! -test utf-19.1 {TclUniCharLen} -body { +test utf-19.1 {TclUniCharLen} { list [regexp \\d abc456def foo] $foo -} -cleanup { - unset -nocomplain foo -} -result {1 4} +} {1 4} test utf-20.1 {TclUniCharNcmp} { - string compare [string range [format %c 0xFFFF] 0 0] [string range [format %c 0x10000] 0 0] -} -1 -test utf-20.2 {[4c591fa487] Tcl_UniCharNcmp/Tcl_UtfNcmp} { - set one [format %c 0xFFFF] - set two [format %c 0x10000] - set first [string compare $one $two] - string range $one 0 0 - string range $two 0 0 - set second [string compare $one $two] - expr {($first == $second) ? "agree" : "disagree"} -} agree +} {} -test utf-21.1 {Tcl_UniCharIsAlnum} { +test utf-21.1 {TclUniCharIsAlnum} { # this returns 1 with Unicode 7 compliance - string is alnum ၀ȟȠ -} 1 + string is alnum \u1040\u021f\u0220 +} {1} test utf-21.2 {unicode alnum char in regc_locale.c} { # this returns 1 with Unicode 7 compliance - list [regexp {^[[:alnum:]]+$} ၀ȟȠ] [regexp {^\w+$} ၀ȟȠ_‿⁀⁔︳︴﹍﹎﹏_] + list [regexp {^[[:alnum:]]+$} \u1040\u021f\u0220] [regexp {^\w+$} \u1040\u021f\u0220] } {1 1} test utf-21.3 {unicode print char in regc_locale.c} { # this returns 1 with Unicode 7 compliance - regexp {^[[:print:]]+$} ﯁ + regexp {^[[:print:]]+$} \ufbc1 } 1 -test utf-21.4 {Tcl_UniCharIsGraph} { +test utf-21.4 {TclUniCharIsGraph} { # [Bug 3464428] - string is graph Ġ -} 1 + string is graph \u0120 +} {1} test utf-21.5 {unicode graph char in regc_locale.c} { # [Bug 3464428] - regexp {^[[:graph:]]+$} Ġ -} 1 -test utf-21.6 {Tcl_UniCharIsGraph} { + regexp {^[[:graph:]]+$} \u0120 +} {1} +test utf-21.6 {TclUniCharIsGraph} { # [Bug 3464428] - string is graph \xA0 -} 0 + string is graph \u00a0 +} {0} test utf-21.7 {unicode graph char in regc_locale.c} { # [Bug 3464428] - regexp {[[:graph:]]} \x20\xA0\u2028\u2029 -} 0 -test utf-21.8 {Tcl_UniCharIsPrint} { + regexp {[[:graph:]]} \u0020\u00a0\u2028\u2029 +} {0} +test utf-21.8 {TclUniCharIsPrint} { # [Bug 3464428] - string is print \x09 -} 0 + string is print \u0009 +} {0} test utf-21.9 {unicode print char in regc_locale.c} { # [Bug 3464428] - regexp {[[:print:]]} \x09 -} 0 + regexp {[[:print:]]} \u0009 +} {0} test utf-21.10 {unicode print char in regc_locale.c} { # [Bug 3464428] - regexp {[[:print:]]} \x09 -} 0 -test utf-21.11 {Tcl_UniCharIsControl} { + regexp {[[:print:]]} \u0009 +} {0} +test utf-21.11 {TclUniCharIsControl} { # [Bug 3464428] - string is control \x00\x1F\xAD\u0605\u061C\u180E\u2066\uFEFF -} 1 + string is control \u0000\u001f\u00ad\u0605\u061c\u180e\u2066\ufeff +} {1} test utf-21.12 {unicode control char in regc_locale.c} { # [Bug 3464428], [Bug a876646efe] - regexp {^[[:cntrl:]]*$} \x00\x1F\xAD\u0605\u061C\u180E\u2066\uFEFF -} 1 + regexp {^[[:cntrl:]]*$} \u0000\u001f\u00ad\u0605\u061c\u180e\u2066\ufeff +} {1} -test utf-22.1 {Tcl_UniCharIsWordChar} { +test utf-22.1 {TclUniCharIsWordChar} { string wordend "xyz123_bar fg" 0 } 10 -test utf-22.2 {Tcl_UniCharIsWordChar} { - string wordend "x傀z123_bar‼ fg" 0 +test utf-22.2 {TclUniCharIsWordChar} { + string wordend "x\u5080z123_bar\u203c fg" 0 } 10 -test utf-23.1 {Tcl_UniCharIsAlpha} { +test utf-23.1 {TclUniCharIsAlpha} { # this returns 1 with Unicode 7 compliance - string is alpha ȟȠͿԯ -} 1 + string is alpha \u021f\u0220\u037f\u052f +} {1} test utf-23.2 {unicode alpha char in regc_locale.c} { # this returns 1 with Unicode 7 compliance - regexp {^[[:alpha:]]+$} ȟȠͿԯ -} 1 + regexp {^[[:alpha:]]+$} \u021f\u0220\u037f\u052f +} {1} -test utf-24.1 {Tcl_UniCharIsDigit} { +test utf-24.1 {TclUniCharIsDigit} { # this returns 1 with Unicode 7 compliance - string is digit ၀꯰ -} 1 + string is digit \u1040\uabf0 +} {1} test utf-24.2 {unicode digit char in regc_locale.c} { # this returns 1 with Unicode 7 compliance - list [regexp {^[[:digit:]]+$} ၀꯰] [regexp {^\d+$} ၀꯰] + list [regexp {^[[:digit:]]+$} \u1040\uabf0] [regexp {^\d+$} \u1040\uabf0] } {1 1} -test utf-24.3 {Tcl_UniCharIsSpace} { +test utf-24.3 {TclUniCharIsSpace} { # this returns 1 with Unicode 7 compliance - string is space \u1680\u180E\u202F -} 1 + string is space \u1680\u180e\u202f +} {1} test utf-24.4 {unicode space char in regc_locale.c} { # this returns 1 with Unicode 7 compliance - list [regexp {^[[:space:]]+$} \u1680\u180E\u202F] [regexp {^\s+$} \u1680\u180E\u202F] -} {1 1} -test utf-24.5 {Tcl_UniCharIsSpace} tip413 { - # this returns 1 with Unicode 7/TIP 413 compliance - string is space \x85\u1680\u180E\u200B\u202F\u2060 -} 1 -test utf-24.6 {unicode space char in regc_locale.c} tip413 { - # this returns 1 with Unicode 7/TIP 413 compliance - list [regexp {^[[:space:]]+$} \x85\u1680\u180E\u200B\u202F\u2060] [regexp {^\s+$} \x85\u1680\u180E\u200B\u202F\u2060] + list [regexp {^[[:space:]]+$} \u1680\u180e\u202f] [regexp {^\s+$} \u1680\u180e\u202f] } {1 1} -proc UniCharCaseCmpTest {order one two {constraints {}}} { - variable count - test utf-25.$count {Tcl_UniCharNcasecmp} -setup { +testConstraint teststringobj [llength [info commands teststringobj]] + +test utf-25.1 {Tcl_UniCharNcasecmp} -constraints teststringobj \ + -setup { testobj freeallvars - } -constraints [linsert $constraints 0 teststringobj] -cleanup { + } \ + -body { + teststringobj set 1 a + teststringobj set 2 b + teststringobj getunicode 1 + teststringobj getunicode 2 + string compare -nocase [teststringobj get 1] [teststringobj get 2] + } \ + -cleanup { testobj freeallvars - } -body { - teststringobj set 1 $one - teststringobj set 2 $two - teststringobj maxchars 1 - teststringobj maxchars 2 - set result [string compare -nocase [teststringobj get 1] [teststringobj get 2]] - if {$result eq [string map {< -1 = 0 > 1} $order]} { - set result ok - } else { - set result "'$one' should be $order '$two' (no case)" - } - set result - } -result ok - incr count -} -variable count 1 -UniCharCaseCmpTest < a b -UniCharCaseCmpTest > b a -UniCharCaseCmpTest > B a -UniCharCaseCmpTest > aBcB abca -UniCharCaseCmpTest < \uFFFF [format %c 0x10000] -UniCharCaseCmpTest < \uFFFF \U10000 -UniCharCaseCmpTest > [format %c 0x10000] \uFFFF -UniCharCaseCmpTest > \U10000 \uFFFF - - -test utf-26.1 {Tcl_UniCharDString} -setup { - testobj freeallvars -} -constraints {teststringobj testbytestring} -cleanup { - testobj freeallvars -} -body { - teststringobj set 1 foo - teststringobj maxchars 1 - teststringobj append 1 [testbytestring barsoom\xF2\xC2\x80] 10 - scan [string index [teststringobj get 1] 11] %c -} -result 128 - -unset count -rename UniCharCaseCmpTest {} - -proc GetUniCharTest {s index result} { - variable count - # Use quotes, not {} so test output shows exact string on error - test getunichar-1.$count "Tcl_GetUniChar $s $index" \ - -constraints testgetunichar \ - -body "testgetunichar $s $index" \ - -result $result - incr count -} -variable count 1 -set errorIndicator -1 -GetUniCharTest abcd -2 $errorIndicator -GetUniCharTest abcd -1 $errorIndicator -GetUniCharTest abcd 0 97 ;# a -> ASCII 97 -GetUniCharTest abcd 3 100 -GetUniCharTest abcd 4 $errorIndicator -GetUniCharTest abcd 1000 $errorIndicator - -GetUniCharTest \xe0bc\xe1 -2 $errorIndicator -GetUniCharTest \xe0bc\xe1 -1 $errorIndicator -GetUniCharTest \xe0bc\xe1 0 224 ;# \xe0 == 224 -GetUniCharTest \xe0bc\xe1 3 225 -GetUniCharTest \xe0bc\xe1 4 $errorIndicator -GetUniCharTest \xe0bc\xe1 1000 $errorIndicator + } \ + -result -1 +test utf-25.2 {Tcl_UniCharNcasecmp} -constraints teststringobj \ + -setup { + testobj freeallvars + } \ + -body { + teststringobj set 1 b + teststringobj set 2 a + teststringobj getunicode 1 + teststringobj getunicode 2 + string compare -nocase [teststringobj get 1] [teststringobj get 2] + } \ + -cleanup { + testobj freeallvars + } \ + -result 1 +test utf-25.3 {Tcl_UniCharNcasecmp} -constraints teststringobj \ + -setup { + testobj freeallvars + } \ + -body { + teststringobj set 1 B + teststringobj set 2 a + teststringobj getunicode 1 + teststringobj getunicode 2 + string compare -nocase [teststringobj get 1] [teststringobj get 2] + } \ + -cleanup { + testobj freeallvars + } \ + -result 1 -unset count -rename GetUniCharTest "" +test utf-25.4 {Tcl_UniCharNcasecmp} -constraints teststringobj \ + -setup { + testobj freeallvars + } \ + -body { + teststringobj set 1 aBcB + teststringobj set 2 abca + teststringobj getunicode 1 + teststringobj getunicode 2 + string compare -nocase [teststringobj get 1] [teststringobj get 2] + } \ + -cleanup { + testobj freeallvars + } \ + -result 1 # cleanup ::tcltest::cleanupTests |
