summaryrefslogtreecommitdiffstats
path: root/tests/string.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/string.test')
-rw-r--r--tests/string.test315
1 files changed, 9 insertions, 306 deletions
diff --git a/tests/string.test b/tests/string.test
index 740cdc6..7a7a749 100644
--- a/tests/string.test
+++ b/tests/string.test
@@ -17,23 +17,17 @@ if {[lsearch [namespace children] ::tcltest] == -1} {
namespace import -force ::tcltest::*
}
-::tcltest::loadTestedCommands
-catch [list package require -exact Tcltest [info patchlevel]]
-
# Some tests require the testobj command
testConstraint testobj [expr {[info commands testobj] != {}}]
testConstraint testindexobj [expr {[info commands testindexobj] != {}}]
-# Used for constraining memory leak tests
-testConstraint memory [llength [info commands memory]]
-
test string-1.1 {error conditions} {
list [catch {string gorp a b} msg] $msg
} {1 {unknown or ambiguous subcommand "gorp": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart}}
test string-1.2 {error conditions} {
list [catch {string} msg] $msg
-} {1 {wrong # args: should be "string subcommand ?arg ...?"}}
+} {1 {wrong # args: should be "string subcommand ?argument ...?"}}
test string-2.1 {string compare, too few args} {
list [catch {string compare a} msg] $msg
@@ -315,10 +309,10 @@ test string-6.4 {string is, too many args} {
} {1 {wrong # args: should be "string is class ?-strict? ?-failindex var? str"}}
test string-6.5 {string is, class check} {
list [catch {string is bogus str} msg] $msg
-} {1 {bad class "bogus": must be alnum, alpha, ascii, control, boolean, digit, double, entier, false, graph, integer, list, lower, print, punct, space, true, upper, wideinteger, wordchar, or xdigit}}
+} {1 {bad class "bogus": must be alnum, alpha, ascii, control, boolean, digit, double, false, graph, integer, list, lower, print, punct, space, true, upper, wideinteger, wordchar, or xdigit}}
test string-6.6 {string is, ambiguous class} {
list [catch {string is al str} msg] $msg
-} {1 {ambiguous class "al": must be alnum, alpha, ascii, control, boolean, digit, double, entier, false, graph, integer, list, lower, print, punct, space, true, upper, wideinteger, wordchar, or xdigit}}
+} {1 {ambiguous class "al": must be alnum, alpha, ascii, control, boolean, digit, double, false, graph, integer, list, lower, print, punct, space, true, upper, wideinteger, wordchar, or xdigit}}
test string-6.7 {string is alpha, all ok} {
string is alpha -strict -failindex var abc
} 1
@@ -341,7 +335,9 @@ test string-6.12 {string is alnum, true} {
test string-6.13 {string is alnum, false} {
list [string is alnum -failindex var abc1.23] $var
} {0 4}
-test string-6.14 {string is alnum, unicode} "string is alnum abc\xfc" 1
+test string-6.14 {string is alnum, unicode} {
+ string is alnum abc\u00fc
+} 1
test string-6.15 {string is alpha, true} {
string is alpha abc
} 1
@@ -597,7 +593,7 @@ test string-6.90 {string is integer, bad integers} {
foreach num $numbers {
lappend result [string is int -strict $num]
}
- return $result
+ set result
} {1 1 0 0 0 1 0 0}
test string-6.91 {string is double, bad doubles} {
set result ""
@@ -605,7 +601,7 @@ test string-6.91 {string is double, bad doubles} {
foreach num $numbers {
lappend result [string is double -strict $num]
}
- return $result
+ set result
} {1 1 0 0 0 1 0 0}
test string-6.92 {string is integer, 32-bit overflow} {
# Bug 718878
@@ -669,7 +665,7 @@ test string-6.107 {string is integer, bad integers} {
foreach num $numbers {
lappend result [string is wideinteger -strict $num]
}
- return $result
+ set result
} {1 1 0 0 0 1 0 0}
test string-6.108 {string is double, Bug 1382287} {
set x 2turtledoves
@@ -679,78 +675,6 @@ test string-6.108 {string is double, Bug 1382287} {
test string-6.109 {string is double, Bug 1360532} {
string is double 1\u00a0
} 0
-test string-6.110 {string is entier, true} {
- string is entier +1234567890
-} 1
-test string-6.111 {string is entier, true on type} {
- string is entier [expr wide(50.0)]
-} 1
-test string-6.112 {string is entier, true} {
- string is entier [list -10]
-} 1
-test string-6.113 {string is entier, true as hex} {
- string is entier 0xabcdef
-} 1
-test string-6.114 {string is entier, true as octal} {
- string is entier 0123456
-} 1
-test string-6.115 {string is entier, true with whitespace} {
- string is entier " \n1234\v"
-} 1
-test string-6.116 {string is entier, false} {
- list [string is entier -fail var 123abc] $var
-} {0 3}
-test string-6.117 {string is entier, false} {
- list [string is entier -fail var 123123123123123123123123123123123123123123123123123123123123123123123123123123123123abc] $var
-} {0 84}
-test string-6.118 {string is entier, false} {
- list [string is entier -fail var [expr double(1)]] $var
-} {0 1}
-test string-6.119 {string is entier, false} {
- list [string is entier -fail var " "] $var
-} {0 0}
-test string-6.120 {string is entier, false on bad octal} {
- list [string is entier -fail var 0o36963] $var
-} {0 4}
-test string-6.121.1 {string is entier, false on bad octal} {
- list [string is entier -fail var 0o36963] $var
-} {0 4}
-test string-6.122 {string is entier, false on bad hex} {
- list [string is entier -fail var 0X345XYZ] $var
-} {0 5}
-test string-6.123 {string is entier, bad integers} {
- # SF bug #634856
- set result ""
- set numbers [list 1 +1 ++1 +-1 -+1 -1 --1 "- +1"]
- foreach num $numbers {
- lappend result [string is entier -strict $num]
- }
- return $result
-} {1 1 0 0 0 1 0 0}
-test string-6.124 {string is entier, true} {
- string is entier +1234567890123456789012345678901234567890
-} 1
-test string-6.125 {string is entier, true} {
- string is entier [list -10000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
-} 1
-test string-6.126 {string is entier, true as hex} {
- string is entier 0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdef
-} 1
-test string-6.127 {string is entier, true as octal} {
- string is entier 0123456112341234561234565623456123456123456123456123456123456123456123456123456123456
-} 1
-test string-6.128 {string is entier, true with whitespace} {
- string is entier " \n12340000000000000000000000000000000000000000000000000000000000000000000000000000000000000\v"
-} 1
-test string-6.129 {string is entier, false on bad octal} {
- list [string is entier -fail var 0o1234561123412345612345656234561234561234561234561234561234561234561234561234561234536963] $var
-} {0 87}
-test string-6.130.1 {string is entier, false on bad octal} {
- list [string is entier -fail var 0o1234561123412345612345656234561234561234561234561234561234561234561234561234561234536963] $var
-} {0 87}
-test string-6.131 {string is entier, false on bad hex} {
- list [string is entier -fail var 0X12345611234123456123456562345612345612345612345612345612345612345612345612345612345345XYZ] $var
-} {0 88}
catch {rename largest_int {}}
@@ -1485,9 +1409,6 @@ test string-18.10 {string trim} {
test string-18.11 {string trim, unicode} {
string trim "\xe7\xe8 AB\xe7C \xe8\xe7" \xe7\xe8
} " AB\xe7C "
-test string-18.12 {string trim, unicode default} {
- string trim \ufeff\x00\u0085\u00a0\u1680\u180eABC\u1361\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u202f\u205f\u3000
-} ABC\u1361
test string-19.1 {string trimleft} {
list [catch {string trimleft} msg] $msg
@@ -1495,9 +1416,6 @@ test string-19.1 {string trimleft} {
test string-19.2 {string trimleft} {
string trimleft " XYZ "
} {XYZ }
-test string-19.3 {string trimleft, unicode default} {
- string trimleft \ufeff\u0085\u00a0\x00\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u202f\u205f\u3000\u1361ABC
-} \u1361ABC
test string-20.1 {string trimright errors} {
list [catch {string trimright} msg] $msg
@@ -1514,9 +1432,6 @@ test string-20.4 {string trimright} {
test string-20.5 {string trimright} {
string trimright ""
} {}
-test string-20.6 {string trimright, unicode default} {
- string trimright ABC\u1361\u0085\x00\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u202f\u205f\u3000
-} ABC\u1361
test string-21.1 {string wordend} {
list [catch {string wordend a} msg] $msg
@@ -1700,17 +1615,6 @@ test string-24.12 {string reverse command - corner case} {
set y \udead
string is ascii [string reverse $x$y]
} 0
-test string-24.13 {string reverse command - pure Unicode string} {
- string reverse [string range \ubeef\udead\ubeef\udead\ubeef\udead 1 5]
-} \udead\ubeef\udead\ubeef\udead
-test string-24.14 {string reverse command - pure bytearray} {
- binary scan [string reverse [binary format H* 010203]] H* x
- set x
-} 030201
-test string-24.15 {string reverse command - pure bytearray} {
- binary scan [tcl::string::reverse [binary format H* 010203]] H* x
- set x
-} 030201
test string-25.1 {string is list} {
string is list {a b c}
@@ -1761,208 +1665,7 @@ test string-25.14 {string is list} {
list [string is list -failindex x "\uabcd {b c}d e"] $x
} {0 2}
-test string-26.1 {tcl::prefix, too few args} -body {
- tcl::prefix match a
-} -returnCodes 1 -result {wrong # args: should be "tcl::prefix match ?options? table string"}
-test string-26.2 {tcl::prefix, bad args} -body {
- tcl::prefix match a b c
-} -returnCodes 1 -result {bad option "a": must be -error, -exact, or -message}
-test string-26.2.1 {tcl::prefix, empty table} -body {
- tcl::prefix match {} foo
-} -returnCodes 1 -result {bad option "foo": no valid options}
-test string-26.3 {tcl::prefix, bad args} -body {
- tcl::prefix match -error "{}x" -exact str1 str2
-} -returnCodes 1 -result {list element in braces followed by "x" instead of space}
-test string-26.3.1 {tcl::prefix, bad args} -body {
- tcl::prefix match -error "x" -exact str1 str2
-} -returnCodes 1 -result {error options must have an even number of elements}
-test string-26.3.2 {tcl::prefix, bad args} -body {
- tcl::prefix match -error str1 str2
-} -returnCodes 1 -result {missing value for -error}
-test string-26.4 {tcl::prefix, bad args} -body {
- tcl::prefix match -message str1 str2
-} -returnCodes 1 -result {missing value for -message}
-test string-26.5 {tcl::prefix} {
- tcl::prefix match {apa bepa cepa depa} cepa
-} cepa
-test string-26.6 {tcl::prefix} {
- tcl::prefix match {apa bepa cepa depa} be
-} bepa
-test string-26.7 {tcl::prefix} -body {
- tcl::prefix match -exact {apa bepa cepa depa} be
-} -returnCodes 1 -result {bad option "be": must be apa, bepa, cepa, or depa}
-test string-26.8 {tcl::prefix} -body {
- tcl::prefix match -message switch {apa bepa bear depa} be
-} -returnCodes 1 -result {ambiguous switch "be": must be apa, bepa, bear, or depa}
-test string-26.9 {tcl::prefix} -body {
- tcl::prefix match -error {} {apa bepa bear depa} be
-} -returnCodes 0 -result {}
-test string-26.10 {tcl::prefix} -body {
- tcl::prefix match -error {-level 1} {apa bepa bear depa} be
-} -returnCodes 2 -result {ambiguous option "be": must be apa, bepa, bear, or depa}
-test string-26.10.1 {tcl::prefix} -setup {
- proc _testprefix {args} {
- array set opts {-a x -b y -c y}
- foreach {opt val} $args {
- set opt [tcl::prefix match -error {-level 1} {-a -b -c} $opt]
- set opts($opt) $val
- }
- array get opts
- }
-} -body {
- set a [catch {_testprefix -x u} result options]
- dict get $options -errorinfo
-} -cleanup {
- rename _testprefix {}
-} -result {bad option "-x": must be -a, -b, or -c
- while executing
-"_testprefix -x u"}
-
-# Helper for memory stress tests
-# Repeat each body in a local space checking that memory does not increase
-proc MemStress {args} {
- set res {}
- foreach body $args {
- set end 0
- for {set i 0} {$i < 5} {incr i} {
- proc MemStress_Body {} $body
- uplevel 1 MemStress_Body
- rename MemStress_Body {}
- set tmp $end
- set end [lindex [lindex [split [memory info] "\n"] 3] 3]
- }
- lappend res [expr {$end - $tmp}]
- }
- return $res
-}
-
-test string-26.11 {tcl::prefix: testing for leaks} -body {
- # This test is made to stress object reference management
- MemStress {
- set table {hejj miff gurk}
- set item [lindex $table 1]
- # If not careful, this can cause a circular reference
- # that will cause a leak.
- tcl::prefix match $table $item
- } {
- # A similar case with nested lists
- set table2 {hejj {miff maff} gurk}
- set item [lindex [lindex $table2 1] 0]
- tcl::prefix match $table2 $item
- } {
- # A similar case with dict
- set table3 {hejj {miff maff} gurk2}
- set item [lindex [dict keys [lindex $table3 1]] 0]
- tcl::prefix match $table3 $item
- }
-} -constraints memory -result {0 0 0}
-
-test string-26.12 {tcl::prefix: testing for leaks} -body {
- # This is a memory leak test in a form that might actually happen
- # in real code. The shared literal "miff" causes a connection
- # between the item and the table.
- MemStress {
- proc stress1 {item} {
- set table [list hejj miff gurk]
- tcl::prefix match $table $item
- }
- proc stress2 {} {
- stress1 miff
- }
- stress2
- rename stress1 {}
- rename stress2 {}
- }
-} -constraints memory -result 0
-
-test string-26.13 {tcl::prefix: testing for leaks} -body {
- # This test is made to stress object reference management
- MemStress {
- set table [list hejj miff]
- set item $table
- set error $table
- # Use the same objects in all places
- catch {
- tcl::prefix match -error $error $table $item
- }
- }
-} -constraints memory -result {0}
-
-test string-27.1 {tcl::prefix all, too few args} -body {
- tcl::prefix all a
-} -returnCodes 1 -result {wrong # args: should be "tcl::prefix all table string"}
-test string-27.2 {tcl::prefix all, bad args} -body {
- tcl::prefix all a b c
-} -returnCodes 1 -result {wrong # args: should be "tcl::prefix all table string"}
-test string-27.3 {tcl::prefix all, bad args} -body {
- tcl::prefix all "{}x" str2
-} -returnCodes 1 -result {list element in braces followed by "x" instead of space}
-test string-27.4 {tcl::prefix all} {
- tcl::prefix all {apa bepa cepa depa} c
-} cepa
-test string-27.5 {tcl::prefix all} {
- tcl::prefix all {apa bepa cepa depa} cepa
-} cepa
-test string-27.6 {tcl::prefix all} {
- tcl::prefix all {apa bepa cepa depa} cepax
-} {}
-test string-27.7 {tcl::prefix all} {
- tcl::prefix all {apa aska appa} a
-} {apa aska appa}
-test string-27.8 {tcl::prefix all} {
- tcl::prefix all {apa aska appa} ap
-} {apa appa}
-test string-27.9 {tcl::prefix all} {
- tcl::prefix all {apa aska appa} p
-} {}
-test string-27.10 {tcl::prefix all} {
- tcl::prefix all {apa aska appa} {}
-} {apa aska appa}
-
-test string-28.1 {tcl::prefix longest, too few args} -body {
- tcl::prefix longest a
-} -returnCodes 1 -result {wrong # args: should be "tcl::prefix longest table string"}
-test string-28.2 {tcl::prefix longest, bad args} -body {
- tcl::prefix longest a b c
-} -returnCodes 1 -result {wrong # args: should be "tcl::prefix longest table string"}
-test string-28.3 {tcl::prefix longest, bad args} -body {
- tcl::prefix longest "{}x" str2
-} -returnCodes 1 -result {list element in braces followed by "x" instead of space}
-test string-28.4 {tcl::prefix longest} {
- tcl::prefix longest {apa bepa cepa depa} c
-} cepa
-test string-28.5 {tcl::prefix longest} {
- tcl::prefix longest {apa bepa cepa depa} cepa
-} cepa
-test string-28.6 {tcl::prefix longest} {
- tcl::prefix longest {apa bepa cepa depa} cepax
-} {}
-test string-28.7 {tcl::prefix longest} {
- tcl::prefix longest {apa aska appa} a
-} a
-test string-28.8 {tcl::prefix longest} {
- tcl::prefix longest {apa aska appa} ap
-} ap
-test string-28.9 {tcl::prefix longest} {
- tcl::prefix longest {apa bska appa} a
-} ap
-test string-28.10 {tcl::prefix longest} {
- tcl::prefix longest {apa bska appa} {}
-} {}
-test string-28.11 {tcl::prefix longest} {
- tcl::prefix longest {{} bska appa} {}
-} {}
-test string-28.12 {tcl::prefix longest} {
- tcl::prefix longest {apa {} appa} {}
-} {}
-test string-28.13 {tcl::prefix longest} {
- # Test UTF8 handling
- tcl::prefix longest {ax\x90 bep ax\x91} a
-} ax
-
# cleanup
-rename MemStress {}
-catch {rename foo {}}
::tcltest::cleanupTests
return