summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2020-04-21 15:59:47 (GMT)
committerdgp <dgp@users.sourceforge.net>2020-04-21 15:59:47 (GMT)
commit7a644db668f49fa33fdf76fe9fc3f7c269ec7579 (patch)
tree8735527bd6a42263a64af739b93a2964c9dcbf1f
parent2958d5196de3452ea46a083603d4ce1dc0d05d2a (diff)
parent4da0e252257e24143039784510363d066545be27 (diff)
downloadtcl-7a644db668f49fa33fdf76fe9fc3f7c269ec7579.zip
tcl-7a644db668f49fa33fdf76fe9fc3f7c269ec7579.tar.gz
tcl-7a644db668f49fa33fdf76fe9fc3f7c269ec7579.tar.bz2
[c574e50a3b] Stop segfault in tests utf-2.[89]. Create clean test suite
runs for the TCL_UTF_MAX = 4, 6 builds.
-rw-r--r--.travis.yml20
-rw-r--r--generic/regcustom.h2
-rw-r--r--generic/tcl.h2
-rw-r--r--generic/tclTest.c31
-rw-r--r--generic/tclUtf.c84
-rw-r--r--tests/chanio.test4
-rw-r--r--tests/encoding.test6
-rw-r--r--tests/io.test5
-rw-r--r--tests/source.test5
-rw-r--r--tests/utf.test139
-rw-r--r--win/tclWinTest.c28
11 files changed, 178 insertions, 148 deletions
diff --git a/.travis.yml b/.travis.yml
index 5672c0b..63c1645 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,6 +19,26 @@ matrix:
compiler: gcc
env:
- BUILD_DIR=unix
+ - name: "Linux/GCC/Shared: UTF_MAX=4"
+ os: linux
+ dist: bionic
+ compiler: gcc
+ env:
+ - BUILD_DIR=unix
+ - CFGOPT=CFLAGS=-DTCL_UTF_MAX=4
+ script:
+ - make all tcltest
+ - make test TESTFLAGS="-file utf.test"
+ - name: "Linux/GCC/Shared: UTF_MAX=6"
+ os: linux
+ dist: bionic
+ compiler: gcc
+ env:
+ - BUILD_DIR=unix
+ - CFGOPT=CFLAGS=-DTCL_UTF_MAX=6
+ script:
+ - make all tcltest
+ - make test TESTFLAGS="-file utf.test"
- name: "Linux/GCC/Static"
os: linux
dist: bionic
diff --git a/generic/regcustom.h b/generic/regcustom.h
index 57a2d47..ac33087 100644
--- a/generic/regcustom.h
+++ b/generic/regcustom.h
@@ -97,7 +97,7 @@ typedef int celt; /* Type to hold chr, or NOCELT */
#define NOCELT (-1) /* Celt value which is not valid chr */
#define CHR(c) (UCHAR(c)) /* Turn char literal into chr literal */
#define DIGITVAL(c) ((c)-'0') /* Turn chr digit into its value */
-#if TCL_UTF_MAX > 4
+#if TCL_UTF_MAX > 3
#define CHRBITS 32 /* Bits in a chr; must not use sizeof */
#define CHR_MIN 0x00000000 /* Smallest and largest chr; the value */
#define CHR_MAX 0xffffffff /* CHR_MAX-CHR_MIN+1 should fit in uchr */
diff --git a/generic/tcl.h b/generic/tcl.h
index 7378a8f..d7d064c 100644
--- a/generic/tcl.h
+++ b/generic/tcl.h
@@ -2148,7 +2148,7 @@ typedef struct Tcl_Parse {
* reflected in regcustom.h.
*/
-#if TCL_UTF_MAX > 4
+#if TCL_UTF_MAX > 3
/*
* unsigned int isn't 100% accurate as it should be a strict 4-byte value
* (perhaps wchar_t). 64-bit systems may have troubles. The size of this
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 8c29aa7..b9fd204 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -281,6 +281,7 @@ static Tcl_CmdProc Testset2Cmd;
static Tcl_CmdProc TestseterrorcodeCmd;
static Tcl_ObjCmdProc TestsetobjerrorcodeCmd;
static Tcl_CmdProc TestsetplatformCmd;
+static Tcl_ObjCmdProc TestsizeCmd;
static Tcl_CmdProc TeststaticpkgCmd;
static Tcl_CmdProc TesttranslatefilenameCmd;
static Tcl_CmdProc TestupvarCmd;
@@ -592,6 +593,7 @@ Tcltest_Init(
TestFindLastCmd, NULL, NULL);
Tcl_CreateCommand(interp, "testsetplatform", TestsetplatformCmd,
NULL, NULL);
+ Tcl_CreateObjCommand(interp, "testsize", TestsizeCmd, NULL, NULL);
Tcl_CreateCommand(interp, "teststaticpkg", TeststaticpkgCmd,
NULL, NULL);
Tcl_CreateCommand(interp, "testtranslatefilename",
@@ -4122,6 +4124,35 @@ TestsetplatformCmd(
return TCL_OK;
}
+static int
+TestsizeCmd(
+ ClientData clientData, /* Unused */
+ Tcl_Interp* interp, /* Tcl interpreter */
+ int objc, /* Parameter count */
+ Tcl_Obj *const * objv) /* Parameter vector */
+{
+ if (objc != 2) {
+ goto syntax;
+ }
+ if (strcmp(Tcl_GetString(objv[1]), "time_t") == 0) {
+ Tcl_SetObjResult(interp, Tcl_NewWideIntObj(sizeof(time_t)));
+ return TCL_OK;
+ }
+ if (strcmp(Tcl_GetString(objv[1]), "st_mtime") == 0) {
+ Tcl_StatBuf *statPtr;
+ Tcl_SetObjResult(interp, Tcl_NewWideIntObj(sizeof(statPtr->st_mtime)));
+ return TCL_OK;
+ }
+ if (strcmp(Tcl_GetString(objv[1]), "unichar") == 0) {
+ Tcl_SetObjResult(interp, Tcl_NewWideIntObj(sizeof(Tcl_UniChar)));
+ return TCL_OK;
+ }
+
+syntax:
+ Tcl_WrongNumArgs(interp, 1, objv, "time_t|st_mtime|unichar");
+ return TCL_ERROR;
+}
+
/*
*----------------------------------------------------------------------
*
diff --git a/generic/tclUtf.c b/generic/tclUtf.c
index 64ee0a8..3741d70 100644
--- a/generic/tclUtf.c
+++ b/generic/tclUtf.c
@@ -209,30 +209,6 @@ Tcl_UniCharToUtf(
return 2;
}
if (ch <= 0xFFFF) {
-#if TCL_UTF_MAX == 4
- if ((ch & 0xF800) == 0xD800) {
- if (ch & 0x0400) {
- /* Low surrogate */
- if (((buf[0] & 0xF8) == 0xF0) && ((buf[1] & 0xC0) == 0x80)
- && ((buf[2] & 0xCF) == 0)) {
- /* Previous Tcl_UniChar was a High surrogate, so combine */
- buf[3] = (char) ((ch & 0x3F) | 0x80);
- buf[2] |= (char) (((ch >> 6) & 0x0F) | 0x80);
- return 4;
- }
- /* Previous Tcl_UniChar was not a High surrogate, so just output */
- } else {
- /* High surrogate */
- ch += 0x40;
- /* Fill buffer with specific 3-byte (invalid) byte combination,
- so following Low surrogate can recognize it and combine */
- buf[2] = (char) ((ch << 4) & 0x30);
- buf[1] = (char) (((ch >> 2) & 0x3F) | 0x80);
- buf[0] = (char) (((ch >> 8) & 0x07) | 0xF0);
- return 0;
- }
- }
-#endif
goto three;
}
@@ -321,15 +297,6 @@ Tcl_UniCharToUtfDString(
* Tcl_UtfCharComplete() before calling this routine to ensure that
* enough bytes remain in the string.
*
- * If TCL_UTF_MAX == 4, special handling of Surrogate pairs is done:
- * For any UTF-8 string containing a character outside of the BMP, the
- * first call to this function will fill *chPtr with the high surrogate
- * and generate a return value of 0. Calling Tcl_UtfToUniChar again
- * will produce the low surrogate and a return value of 4. Because *chPtr
- * is used to remember whether the high surrogate is already produced, it
- * is recommended to initialize the variable it points to as 0 before
- * the first call to Tcl_UtfToUniChar is done.
- *
* Results:
* *chPtr is filled with the Tcl_UniChar, and the return value is the
* number of bytes from the UTF-8 string that were consumed.
@@ -402,34 +369,15 @@ Tcl_UtfToUniChar(
/*
* Four-byte-character lead byte followed by three trail bytes.
*/
-#if TCL_UTF_MAX == 4
- Tcl_UniChar surrogate;
-
- byte = (((byte & 0x07) << 18) | ((src[1] & 0x3F) << 12)
- | ((src[2] & 0x3F) << 6) | (src[3] & 0x3F)) - 0x10000;
- surrogate = (Tcl_UniChar) (0xD800 + (byte >> 10));
- if (byte & 0x100000) {
- /* out of range, < 0x10000 or > 0x10ffff */
- } else if (*chPtr != surrogate) {
- /* produce high surrogate, but don't advance source pointer */
- *chPtr = surrogate;
- return 0;
- } else {
- /* produce low surrogate, and advance source pointer */
- *chPtr = (Tcl_UniChar) (0xDC00 | (byte & 0x3FF));
- return 4;
- }
-#else
*chPtr = (Tcl_UniChar) (((byte & 0x07) << 18) | ((src[1] & 0x3F) << 12)
| ((src[2] & 0x3F) << 6) | (src[3] & 0x3F));
if ((unsigned)(*chPtr - 0x10000) <= 0xFFFFF) {
return 4;
}
-#endif
}
/*
- * A four-byte-character lead-byte not followed by two trail-bytes
+ * A four-byte-character lead-byte not followed by three trail-bytes
* represents itself.
*/
}
@@ -1230,16 +1178,6 @@ Tcl_UtfNcmp(
cs += TclUtfToUniChar(cs, &ch1);
ct += TclUtfToUniChar(ct, &ch2);
if (ch1 != ch2) {
-#if TCL_UTF_MAX == 4
- /* Surrogates always report higher than non-surrogates */
- if (((ch1 & 0xFC00) == 0xD800)) {
- if ((ch2 & 0xFC00) != 0xD800) {
- return ch1;
- }
- } else if ((ch2 & 0xFC00) == 0xD800) {
- return -ch2;
- }
-#endif
return (ch1 - ch2);
}
}
@@ -1280,16 +1218,6 @@ Tcl_UtfNcasecmp(
cs += TclUtfToUniChar(cs, &ch1);
ct += TclUtfToUniChar(ct, &ch2);
if (ch1 != ch2) {
-#if TCL_UTF_MAX == 4
- /* Surrogates always report higher than non-surrogates */
- if (((ch1 & 0xFC00) == 0xD800)) {
- if ((ch2 & 0xFC00) != 0xD800) {
- return ch1;
- }
- } else if ((ch2 & 0xFC00) == 0xD800) {
- return -ch2;
- }
-#endif
ch1 = Tcl_UniCharToLower(ch1);
ch2 = Tcl_UniCharToLower(ch2);
if (ch1 != ch2) {
@@ -1329,16 +1257,6 @@ TclUtfCasecmp(
cs += TclUtfToUniChar(cs, &ch1);
ct += TclUtfToUniChar(ct, &ch2);
if (ch1 != ch2) {
-#if TCL_UTF_MAX == 4
- /* Surrogates always report higher than non-surrogates */
- if (((ch1 & 0xFC00) == 0xD800)) {
- if ((ch2 & 0xFC00) != 0xD800) {
- return ch1;
- }
- } else if ((ch2 & 0xFC00) == 0xD800) {
- return -ch2;
- }
-#endif
ch1 = Tcl_UniCharToLower(ch1);
ch2 = Tcl_UniCharToLower(ch2);
if (ch1 != ch2) {
diff --git a/tests/chanio.test b/tests/chanio.test
index 5fae431..c2f561b 100644
--- a/tests/chanio.test
+++ b/tests/chanio.test
@@ -29,6 +29,8 @@ namespace eval ::tcl::test::io {
variable msg
variable expected
+ testConstraint ucs2 [expr { [llength [info commands testsize]] &&
+ ([testsize unichar] == 2) }]
testConstraint testchannel [llength [info commands testchannel]]
testConstraint exec [llength [info commands exec]]
testConstraint openpipe 1
@@ -875,7 +877,7 @@ test chan-io-6.44 {Tcl_GetsObj: input saw cr, not followed by cr} {stdio testcha
chan close $f
set x
} [list "bbbbbbbbbbbbbbb" 15 "123456789abcdef" 1 4 "abcd" 0 3 "efg"]
-test chan-io-6.45 {Tcl_GetsObj: input saw cr, skip right number of bytes} {stdio testchannel openpipe fileevent} {
+test chan-io-6.45 {Tcl_GetsObj: input saw cr, skip right number of bytes} {stdio testchannel openpipe fileevent ucs2} {
# Tcl_ExternalToUtf()
set f [open "|[list [interpreter] $path(cat)]" w+]
diff --git a/tests/encoding.test b/tests/encoding.test
index 8722a93..ad55e26 100644
--- a/tests/encoding.test
+++ b/tests/encoding.test
@@ -32,6 +32,10 @@ proc runtests {} {
testConstraint testencoding [llength [info commands testencoding]]
testConstraint exec [llength [info commands exec]]
+testConstraint ucs2 [expr { [llength [info commands testsize]] &&
+ ([testsize unichar] == 2) }]
+
+
# TclInitEncodingSubsystem is tested by the rest of this file
# TclFinalizeEncodingSubsystem is not currently tested
@@ -316,7 +320,7 @@ test encoding-15.3 {UtfToUtfProc null character input} {
list [string bytelength $x] [string bytelength $y] $z
} {1 2 c080}
-test encoding-16.1 {UnicodeToUtfProc} {
+test encoding-16.1 {UnicodeToUtfProc} ucs2 {
set val [encoding convertfrom unicode NN]
list $val [format %x [scan $val %c]]
} "\u4e4e 4e4e"
diff --git a/tests/io.test b/tests/io.test
index 04fa1d2..1c18576 100644
--- a/tests/io.test
+++ b/tests/io.test
@@ -29,6 +29,9 @@ namespace eval ::tcl::test::io {
variable msg
variable expected
+testConstraint ucs2 [expr { [llength [info commands testsize]] &&
+ ([testsize unichar] == 2) }]
+
testConstraint testchannel [llength [info commands testchannel]]
testConstraint exec [llength [info commands exec]]
testConstraint openpipe 1
@@ -910,7 +913,7 @@ test io-6.44 {Tcl_GetsObj: input saw cr, not followed by cr} {stdio testchannel
close $f
set x
} [list "bbbbbbbbbbbbbbb" 15 "123456789abcdef" 1 4 "abcd" 0 3 "efg"]
-test io-6.45 {Tcl_GetsObj: input saw cr, skip right number of bytes} {stdio testchannel openpipe fileevent} {
+test io-6.45 {Tcl_GetsObj: input saw cr, skip right number of bytes} {stdio testchannel openpipe fileevent ucs2} {
# Tcl_ExternalToUtf()
set f [open "|[list [interpreter] $path(cat)]" w+]
diff --git a/tests/source.test b/tests/source.test
index dc3c2d8..8511004 100644
--- a/tests/source.test
+++ b/tests/source.test
@@ -20,6 +20,9 @@ if {[catch {package require tcltest 2.1}]} {
namespace eval ::tcl::test::source {
namespace import ::tcltest::*
+testConstraint ucs2 [expr { [llength [info commands testsize]] &&
+ ([testsize unichar] == 2) }]
+
test source-1.1 {source command} -setup {
set x "old x value"
set y "old y value"
@@ -232,7 +235,7 @@ test source-7.1 {source -encoding test} -setup {
} -cleanup {
removeFile source.file
} -result correct
-test source-7.2 {source -encoding test} -setup {
+test source-7.2 {source -encoding test} -constraints ucs2 -setup {
# This tests for bad interactions between [source -encoding]
# and use of the Control-Z character (\u001A) as a cross-platform
# EOF character by [source]. Here we write out and the [source] a
diff --git a/tests/utf.test b/tests/utf.test
index 07863b9..1c79f32 100644
--- a/tests/utf.test
+++ b/tests/utf.test
@@ -13,7 +13,9 @@ if {[lsearch [namespace children] ::tcltest] == -1} {
namespace import -force ::tcltest::*
}
-testConstraint compat85 [expr {[format %c 0x010000] == "\uFFFD"}]
+testConstraint compat85 [expr {[format %c 0x010000] eq "\uFFFD"}]
+testConstraint fullutf [expr {[format %c 0x010000] ne "\uFFFD"}]
+
testConstraint testbytestring [llength [info commands testbytestring]]
testConstraint testfindfirst [llength [info commands testfindfirst]]
testConstraint testfindlast [llength [info commands testfindlast]]
@@ -64,12 +66,18 @@ test utf-2.6 {Tcl_UtfToUniChar: lead (3-byte) followed by 1 trail} testbytestrin
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} -constraints {testbytestring compat85} -body {
+test utf-2.8.0 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail} -constraints {testbytestring compat85} -body {
string length [testbytestring "\xF0\x90\x80\x80"]
} -result {4}
-test utf-2.9 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail} -constraints {testbytestring compat85} -body {
+test utf-2.8.1 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail} -constraints {testbytestring fullutf} -body {
+ string length [testbytestring "\xF0\x90\x80\x80"]
+} -result {1}
+test utf-2.9.0 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail} -constraints {testbytestring compat85} -body {
string length [testbytestring "\xF4\x8F\xBF\xBF"]
} -result {4}
+test utf-2.9.1 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail} -constraints {testbytestring fullutf} -body {
+ string length [testbytestring "\xF4\x8F\xBF\xBF"]
+} -result {1}
test utf-2.10 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail, underflow} testbytestring {
string length [testbytestring "\xF0\x8F\xBF\xBF"]
} {4}
@@ -118,9 +126,12 @@ test utf-4.10 {Tcl_NumUtfChars: #u0000, calc len, overcomplete} {testnumutfchars
test utf-4.11 {Tcl_NumUtfChars: 3 bytes of 4-byte UTF-8 characater} {testnumutfchars testbytestring} {
testnumutfchars [testbytestring \xF0\x9F\x92\xA9] 3
} {3}
-test utf-4.12 {Tcl_NumUtfChars: #4-byte UTF-8 character} {testnumutfchars testbytestring compat85} {
+test utf-4.12.0 {Tcl_NumUtfChars: #4-byte UTF-8 character} {testnumutfchars testbytestring compat85} {
testnumutfchars [testbytestring \xF0\x9F\x92\xA9] 4
} {4}
+test utf-4.12.1 {Tcl_NumUtfChars: #4-byte UTF-8 character} {testnumutfchars testbytestring fullutf} {
+ testnumutfchars [testbytestring \xF0\x9F\x92\xA9] 4
+} {1}
test utf-5.1 {Tcl_UtfFindFirst} {testfindfirst testbytestring} {
testfindfirst [testbytestring "abcbc"] 98
@@ -335,9 +346,12 @@ test utf-6.67 {Tcl_UtfNext} testutfnext {
test utf-6.68 {Tcl_UtfNext} testutfnext {
testutfnext \xF2\xA0\xA0G
} 1
-test utf-6.69 {Tcl_UtfNext} {testutfnext compat85} {
+test utf-6.69.0 {Tcl_UtfNext} {testutfnext compat85} {
testutfnext \xF2\xA0\xA0\xA0
} 1
+test utf-6.69.1 {Tcl_UtfNext} {testutfnext fullutf} {
+ testutfnext \xF2\xA0\xA0\xA0
+} 4
test utf-6.70 {Tcl_UtfNext} testutfnext {
testutfnext \xF2\xA0\xA0\xD0
} 1
@@ -350,24 +364,42 @@ test utf-6.71 {Tcl_UtfNext} testutfnext {
test utf-6.73 {Tcl_UtfNext} testutfnext {
testutfnext \xF2\xA0\xA0\xF8
} 1
-test utf-6.74 {Tcl_UtfNext} {testutfnext compat85} {
+test utf-6.74.0 {Tcl_UtfNext} {testutfnext compat85} {
testutfnext \xF2\xA0\xA0\xA0G
} 1
-test utf-6.75 {Tcl_UtfNext} {testutfnext compat85} {
+test utf-6.74.1 {Tcl_UtfNext} {testutfnext fullutf} {
+ testutfnext \xF2\xA0\xA0\xA0G
+} 4
+test utf-6.75.0 {Tcl_UtfNext} {testutfnext compat85} {
testutfnext \xF2\xA0\xA0\xA0\xA0
} 1
-test utf-6.76 {Tcl_UtfNext} {testutfnext compat85} {
+test utf-6.75.1 {Tcl_UtfNext} {testutfnext fullutf} {
+ testutfnext \xF2\xA0\xA0\xA0\xA0
+} 4
+test utf-6.76.0 {Tcl_UtfNext} {testutfnext compat85} {
testutfnext \xF2\xA0\xA0\xA0\xD0
} 1
-test utf-6.77 {Tcl_UtfNext} {testutfnext compat85} {
+test utf-6.76.1 {Tcl_UtfNext} {testutfnext fullutf} {
+ testutfnext \xF2\xA0\xA0\xA0\xD0
+} 4
+test utf-6.77.0 {Tcl_UtfNext} {testutfnext compat85} {
testutfnext \xF2\xA0\xA0\xA0\xE8
} 1
-test utf-6.78 {Tcl_UtfNext} {testutfnext compat85} {
+test utf-6.77.1 {Tcl_UtfNext} {testutfnext fullutf} {
+ testutfnext \xF2\xA0\xA0\xA0\xE8
+} 4
+test utf-6.78.0 {Tcl_UtfNext} {testutfnext compat85} {
testutfnext \xF2\xA0\xA0\xA0\xF2
} 1
-test utf-6.79 {Tcl_UtfNext} {testutfnext compat85} {
+test utf-6.78.1 {Tcl_UtfNext} {testutfnext fullutf} {
+ testutfnext \xF2\xA0\xA0\xA0\xF2
+} 4
+test utf-6.79.0 {Tcl_UtfNext} {testutfnext compat85} {
testutfnext \xF2\xA0\xA0\xA0G\xF8
} 1
+test utf-6.79.1 {Tcl_UtfNext} {testutfnext fullutf} {
+ testutfnext \xF2\xA0\xA0\xA0G\xF8
+} 4
test utf-6.80 {Tcl_UtfNext - overlong sequences} testutfnext {
testutfnext \xC0\x80
} 2
@@ -389,9 +421,12 @@ test utf-6.85 {Tcl_UtfNext - overlong sequences} testutfnext {
test utf-6.86 {Tcl_UtfNext - overlong sequences} testutfnext {
testutfnext \xF0\x80\x80\x80
} 1
-test utf-6.87 {Tcl_UtfNext - overlong sequences} {testutfnext compat85} {
+test utf-6.87.0 {Tcl_UtfNext - overlong sequences} {testutfnext compat85} {
testutfnext \xF0\x90\x80\x80
} 1
+test utf-6.87.1 {Tcl_UtfNext - overlong sequences} {testutfnext fullutf} {
+ testutfnext \xF0\x90\x80\x80
+} 4
test utf-6.88 {Tcl_UtfNext, pointing to 2th byte of 3-byte valid sequence} {testutfnext} {
testutfnext \xA0\xA0
} 1
@@ -404,9 +439,12 @@ test utf-6.89 {Tcl_UtfNext, pointing to 2th byte of 3-byte invalid sequence} {te
test utf-6.89.1 {Tcl_UtfNext, pointing to 2th byte of 3-byte invalid sequence} {testutfnext} {
testutfnext \xF0\x80\x80 1
} 2
-test utf-6.90 {Tcl_UtfNext, validity check [493dccc2de]} {testutfnext compat85} {
+test utf-6.90.0 {Tcl_UtfNext, validity check [493dccc2de]} {testutfnext compat85} {
testutfnext \xF4\x8F\xBF\xBF
} 1
+test utf-6.90.1 {Tcl_UtfNext, validity check [493dccc2de]} {testutfnext fullutf} {
+ testutfnext \xF4\x8F\xBF\xBF
+} 4
test utf-6.91 {Tcl_UtfNext, validity check [493dccc2de]} testutfnext {
testutfnext \xF4\x90\x80\x80
} 1
@@ -474,15 +512,24 @@ test utf-7.9.1 {Tcl_UtfPrev} testutfprev {
test utf-7.9.2 {Tcl_UtfPrev} testutfprev {
testutfprev A\xF8\xA0\xF8\xA0 3
} 2
-test utf-7.10 {Tcl_UtfPrev} {testutfprev compat85} {
+test utf-7.10.0 {Tcl_UtfPrev} {testutfprev compat85} {
testutfprev A\xF2\xA0
} 2
-test utf-7.10.1 {Tcl_UtfPrev} {testutfprev compat85} {
+test utf-7.10.1 {Tcl_UtfPrev} {testutfprev fullutf} {
+ testutfprev A\xF2\xA0
+} 1
+test utf-7.10.1.0 {Tcl_UtfPrev} {testutfprev compat85} {
testutfprev A\xF2\xA0\xA0\xA0 3
} 2
-test utf-7.10.2 {Tcl_UtfPrev} {testutfprev compat85} {
+test utf-7.10.1.1 {Tcl_UtfPrev} {testutfprev fullutf} {
+ testutfprev A\xF2\xA0\xA0\xA0 3
+} 1
+test utf-7.10.2.0 {Tcl_UtfPrev} {testutfprev compat85} {
testutfprev A\xF2\xA0\xF8\xA0 3
} 2
+test utf-7.10.2.1 {Tcl_UtfPrev} {testutfprev fullutf} {
+ testutfprev A\xF2\xA0\xF8\xA0 3
+} 1
test utf-7.11 {Tcl_UtfPrev} testutfprev {
testutfprev A\xE8\xA0
} 1
@@ -522,15 +569,24 @@ test utf-7.14.1 {Tcl_UtfPrev} testutfprev {
test utf-7.14.2 {Tcl_UtfPrev} testutfprev {
testutfprev A\xF8\xA0\xA0\xF8 4
} 3
-test utf-7.15 {Tcl_UtfPrev} {testutfprev compat85} {
+test utf-7.15.0 {Tcl_UtfPrev} {testutfprev compat85} {
testutfprev A\xF2\xA0\xA0
} 3
-test utf-7.15.1 {Tcl_UtfPrev} {testutfprev compat85} {
+test utf-7.15.1 {Tcl_UtfPrev} {testutfprev fullutf} {
+ testutfprev A\xF2\xA0\xA0
+} 1
+test utf-7.15.1.0 {Tcl_UtfPrev} {testutfprev compat85} {
testutfprev A\xF2\xA0\xA0\xA0 4
} 3
-test utf-7.15.2 {Tcl_UtfPrev} {testutfprev compat85} {
+test utf-7.15.1.1 {Tcl_UtfPrev} {testutfprev fullutf} {
+ testutfprev A\xF2\xA0\xA0\xA0 4
+} 1
+test utf-7.15.2.0 {Tcl_UtfPrev} {testutfprev compat85} {
testutfprev A\xF2\xA0\xA0\xF8 4
} 3
+test utf-7.15.2.1 {Tcl_UtfPrev} {testutfprev fullutf} {
+ testutfprev A\xF2\xA0\xA0\xF8 4
+} 1
test utf-7.16 {Tcl_UtfPrev} testutfprev {
testutfprev A\xE8\xA0\xA0
} 1
@@ -561,9 +617,12 @@ test utf-7.18.2 {Tcl_UtfPrev} testutfprev {
test utf-7.19 {Tcl_UtfPrev} testutfprev {
testutfprev A\xF8\xA0\xA0\xA0
} 4
-test utf-7.20 {Tcl_UtfPrev} {testutfprev compat85} {
+test utf-7.20.0 {Tcl_UtfPrev} {testutfprev compat85} {
testutfprev A\xF2\xA0\xA0\xA0
} 4
+test utf-7.20.1 {Tcl_UtfPrev} {testutfprev fullutf} {
+ testutfprev A\xF2\xA0\xA0\xA0
+} 1
test utf-7.21 {Tcl_UtfPrev} testutfprev {
testutfprev A\xE8\xA0\xA0\xA0
} 4
@@ -621,18 +680,27 @@ test utf-7.36 {Tcl_UtfPrev -- overlong sequence} testutfprev {
test utf-7.37 {Tcl_UtfPrev -- overlong sequence} testutfprev {
testutfprev A\xE0\xA0\x80 3
} 1
-test utf-7.38 {Tcl_UtfPrev -- overlong sequence} {testutfprev compat85} {
+test utf-7.38 {Tcl_UtfPrev -- overlong sequence} testutfprev {
testutfprev A\xE0\xA0\x80 2
} 1
-test utf-7.39 {Tcl_UtfPrev -- overlong sequence} {testutfprev compat85} {
+test utf-7.39.0 {Tcl_UtfPrev -- overlong sequence} {testutfprev compat85} {
testutfprev A\xF0\x90\x80\x80
} 4
-test utf-7.40 {Tcl_UtfPrev -- overlong sequence} {testutfprev compat85} {
+test utf-7.39.1 {Tcl_UtfPrev -- overlong sequence} {testutfprev fullutf} {
+ testutfprev A\xF0\x90\x80\x80
+} 1
+test utf-7.40.0 {Tcl_UtfPrev -- overlong sequence} {testutfprev compat85} {
testutfprev A\xF0\x90\x80\x80 4
} 3
-test utf-7.41 {Tcl_UtfPrev -- overlong sequence} {testutfprev compat85} {
+test utf-7.40.1 {Tcl_UtfPrev -- overlong sequence} {testutfprev fullutf} {
+ testutfprev A\xF0\x90\x80\x80 4
+} 1
+test utf-7.41.0 {Tcl_UtfPrev -- overlong sequence} {testutfprev compat85} {
testutfprev A\xF0\x90\x80\x80 3
} 2
+test utf-7.41.1 {Tcl_UtfPrev -- overlong sequence} {testutfprev fullutf} {
+ testutfprev A\xF0\x90\x80\x80 3
+} 1
test utf-7.42 {Tcl_UtfPrev -- overlong sequence} testutfprev {
testutfprev A\xF0\x90\x80\x80 2
} 1
@@ -657,15 +725,24 @@ test utf-7.47.1 {Tcl_UtfPrev, pointing to 3th byte of 3-byte valid sequence} {te
test utf-7.47.2 {Tcl_UtfPrev, pointing to 3th byte of 3-byte invalid sequence} {testutfprev} {
testutfprev \xE8\xA0\x00 2
} 0
-test utf-7.48 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev compat85} {
+test utf-7.48.0 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev compat85} {
testutfprev A\xF4\x8F\xBF\xBF
} 4
-test utf-7.48.1 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev compat85} {
+test utf-7.48.1 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev fullutf} {
+ testutfprev A\xF4\x8F\xBF\xBF
+} 1
+test utf-7.48.1.0 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev compat85} {
testutfprev A\xF4\x8F\xBF\xBF 4
} 3
-test utf-7.48.2 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev compat85} {
+test utf-7.48.1.1 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev fullutf} {
+ testutfprev A\xF4\x8F\xBF\xBF 4
+} 1
+test utf-7.48.2.0 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev compat85} {
testutfprev A\xF4\x8F\xBF\xBF 3
} 2
+test utf-7.48.2.1 {Tcl_UtfPrev, validity check [493dccc2de]} {testutfprev fullutf} {
+ testutfprev A\xF4\x8F\xBF\xBF 3
+} 1
test utf-7.48.3 {Tcl_UtfPrev, validity check [493dccc2de]} testutfprev {
testutfprev A\xF4\x8F\xBF\xBF 2
} 1
@@ -700,10 +777,10 @@ test utf-8.5 {Tcl_UniCharAtIndex: high surrogate} {
test utf-8.6 {Tcl_UniCharAtIndex: low surrogate} {
string index \uDC42 0
} "\uDC42"
-test utf-8.7 {Tcl_UniCharAtIndex: Emoji} compat85 {
+test utf-8.7 {Tcl_UniCharAtIndex: Emoji} {
string index \uD83D\uDE00 0
} "\uD83D"
-test utf-8.8 {Tcl_UniCharAtIndex: Emoji} compat85 {
+test utf-8.8 {Tcl_UniCharAtIndex: Emoji} {
string index \uD83D\uDE00 1
} "\uDE00"
@@ -713,10 +790,10 @@ test utf-9.1 {Tcl_UtfAtIndex: index = 0} {
test utf-9.2 {Tcl_UtfAtIndex: index > 0} {
string range \u4E4E\u25A\xFF\u543klmnop 1 5
} "\u25A\xFF\u543kl"
-test utf-9.3 {Tcl_UtfAtIndex: index = 0, Emoji} compat85 {
+test utf-9.3 {Tcl_UtfAtIndex: index = 0, Emoji} {
string range \uD83D\uDE00G 0 0
} "\uD83D"
-test utf-9.4 {Tcl_UtfAtIndex: index > 0, Emoji} compat85 {
+test utf-9.4 {Tcl_UtfAtIndex: index > 0, Emoji} {
string range \uD83D\uDE00G 1 1
} "\uDE00"
diff --git a/win/tclWinTest.c b/win/tclWinTest.c
index 04878fe..7f49b63 100644
--- a/win/tclWinTest.c
+++ b/win/tclWinTest.c
@@ -39,8 +39,6 @@ static int TestwinclockCmd(ClientData dummy, Tcl_Interp* interp,
int objc, Tcl_Obj *const objv[]);
static int TestwinsleepCmd(ClientData dummy, Tcl_Interp* interp,
int objc, Tcl_Obj *const objv[]);
-static int TestSizeCmd(ClientData dummy, Tcl_Interp* interp,
- int objc, Tcl_Obj *const objv[]);
static Tcl_ObjCmdProc TestExceptionCmd;
static int TestplatformChmod(const char *nativePath, int pmode);
static int TestchmodCmd(ClientData dummy,
@@ -78,7 +76,6 @@ TclplatformtestInit(
Tcl_CreateObjCommand(interp, "testwinclock", TestwinclockCmd, NULL, NULL);
Tcl_CreateObjCommand(interp, "testwinsleep", TestwinsleepCmd, NULL, NULL);
Tcl_CreateObjCommand(interp, "testexcept", TestExceptionCmd, NULL, NULL);
- Tcl_CreateObjCommand(interp, "testsize", TestSizeCmd, NULL, NULL);
return TCL_OK;
}
@@ -312,31 +309,6 @@ TestwinsleepCmd(
return TCL_OK;
}
-static int
-TestSizeCmd(
- ClientData clientData, /* Unused */
- Tcl_Interp* interp, /* Tcl interpreter */
- int objc, /* Parameter count */
- Tcl_Obj *const * objv) /* Parameter vector */
-{
- if (objc != 2) {
- goto syntax;
- }
- if (strcmp(Tcl_GetString(objv[1]), "time_t") == 0) {
- Tcl_SetObjResult(interp, Tcl_NewWideIntObj(sizeof(time_t)));
- return TCL_OK;
- }
- if (strcmp(Tcl_GetString(objv[1]), "st_mtime") == 0) {
- Tcl_StatBuf *statPtr;
- Tcl_SetObjResult(interp, Tcl_NewWideIntObj(sizeof(statPtr->st_mtime)));
- return TCL_OK;
- }
-
-syntax:
- Tcl_WrongNumArgs(interp, 1, objv, "time_t|st_mtime");
- return TCL_ERROR;
-}
-
/*
*----------------------------------------------------------------------
*