[25] | 1 | # Commands covered: regexp, regsub |
---|
| 2 | # |
---|
| 3 | # This file contains a collection of tests for one or more of the Tcl |
---|
| 4 | # built-in commands. Sourcing this file into Tcl runs the tests and |
---|
| 5 | # generates output for errors. No output means no errors were found. |
---|
| 6 | # |
---|
| 7 | # Copyright (c) 1991-1993 The Regents of the University of California. |
---|
| 8 | # Copyright (c) 1998 Sun Microsystems, Inc. |
---|
| 9 | # Copyright (c) 1998-1999 by Scriptics Corporation. |
---|
| 10 | # |
---|
| 11 | # See the file "license.terms" for information on usage and redistribution |
---|
| 12 | # of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
---|
| 13 | # |
---|
| 14 | # RCS: @(#) $Id$ |
---|
| 15 | |
---|
| 16 | if {[lsearch [namespace children] ::tcltest] == -1} { |
---|
| 17 | package require tcltest 2 |
---|
| 18 | namespace import -force ::tcltest::* |
---|
| 19 | } |
---|
| 20 | |
---|
| 21 | # Procedure to evaluate a script within a proc, to test compilation |
---|
| 22 | # functionality |
---|
| 23 | |
---|
| 24 | proc evalInProc { script } { |
---|
| 25 | proc testProc {} $script |
---|
| 26 | set status [catch { |
---|
| 27 | testProc |
---|
| 28 | } result] |
---|
| 29 | rename testProc {} |
---|
| 30 | return $result |
---|
| 31 | #return [list $status $result] |
---|
| 32 | } |
---|
| 33 | |
---|
| 34 | catch {unset foo} |
---|
| 35 | test regexpComp-1.1 {basic regexp operation} { |
---|
| 36 | evalInProc { |
---|
| 37 | regexp ab*c abbbc |
---|
| 38 | } |
---|
| 39 | } 1 |
---|
| 40 | test regexpComp-1.2 {basic regexp operation} { |
---|
| 41 | evalInProc { |
---|
| 42 | regexp ab*c ac |
---|
| 43 | } |
---|
| 44 | } 1 |
---|
| 45 | test regexpComp-1.3 {basic regexp operation} { |
---|
| 46 | evalInProc { |
---|
| 47 | regexp ab*c ab |
---|
| 48 | } |
---|
| 49 | } 0 |
---|
| 50 | test regexpComp-1.4 {basic regexp operation} { |
---|
| 51 | evalInProc { |
---|
| 52 | regexp -- -gorp abc-gorpxxx |
---|
| 53 | } |
---|
| 54 | } 1 |
---|
| 55 | test regexpComp-1.5 {basic regexp operation} { |
---|
| 56 | evalInProc { |
---|
| 57 | regexp {^([^ ]*)[ ]*([^ ]*)} "" a |
---|
| 58 | } |
---|
| 59 | } 1 |
---|
| 60 | test regexpComp-1.6 {basic regexp operation} { |
---|
| 61 | list [catch {regexp {} abc} msg] $msg |
---|
| 62 | } {0 1} |
---|
| 63 | test regexpComp-1.7 {regexp utf compliance} { |
---|
| 64 | # if not UTF-8 aware, result is "0 1" |
---|
| 65 | evalInProc { |
---|
| 66 | set foo "\u4e4eb q" |
---|
| 67 | regexp "\u4e4eb q" "a\u4e4eb qw\u5e4e\x4e wq" bar |
---|
| 68 | list [string compare $foo $bar] [regexp 4 $bar] |
---|
| 69 | } |
---|
| 70 | } {0 0} |
---|
| 71 | |
---|
| 72 | test regexpComp-2.1 {getting substrings back from regexp} { |
---|
| 73 | evalInProc { |
---|
| 74 | set foo {} |
---|
| 75 | list [regexp ab*c abbbbc foo] $foo |
---|
| 76 | } |
---|
| 77 | } {1 abbbbc} |
---|
| 78 | test regexpComp-2.2 {getting substrings back from regexp} { |
---|
| 79 | evalInProc { |
---|
| 80 | set foo {} |
---|
| 81 | set f2 {} |
---|
| 82 | list [regexp a(b*)c abbbbc foo f2] $foo $f2 |
---|
| 83 | } |
---|
| 84 | } {1 abbbbc bbbb} |
---|
| 85 | test regexpComp-2.3 {getting substrings back from regexp} { |
---|
| 86 | evalInProc { |
---|
| 87 | set foo {} |
---|
| 88 | set f2 {} |
---|
| 89 | list [regexp a(b*)(c) abbbbc foo f2] $foo $f2 |
---|
| 90 | } |
---|
| 91 | } {1 abbbbc bbbb} |
---|
| 92 | test regexpComp-2.4 {getting substrings back from regexp} { |
---|
| 93 | evalInProc { |
---|
| 94 | set foo {} |
---|
| 95 | set f2 {} |
---|
| 96 | set f3 {} |
---|
| 97 | list [regexp a(b*)(c) abbbbc foo f2 f3] $foo $f2 $f3 |
---|
| 98 | } |
---|
| 99 | } {1 abbbbc bbbb c} |
---|
| 100 | test regexpComp-2.5 {getting substrings back from regexp} { |
---|
| 101 | evalInProc { |
---|
| 102 | set foo {}; set f1 {}; set f2 {}; set f3 {}; set f4 {}; set f5 {}; |
---|
| 103 | set f6 {}; set f7 {}; set f8 {}; set f9 {}; set fa {}; set fb {}; |
---|
| 104 | list [regexp (1*)(2*)(3*)(4*)(5*)(6*)(7*)(8*)(9*)(a*)(b*) \ |
---|
| 105 | 12223345556789999aabbb \ |
---|
| 106 | foo f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb] $foo $f1 $f2 $f3 $f4 $f5 \ |
---|
| 107 | $f6 $f7 $f8 $f9 $fa $fb |
---|
| 108 | } |
---|
| 109 | } {1 12223345556789999aabbb 1 222 33 4 555 6 7 8 9999 aa bbb} |
---|
| 110 | test regexpComp-2.6 {getting substrings back from regexp} { |
---|
| 111 | evalInProc { |
---|
| 112 | set foo 2; set f2 2; set f3 2; set f4 2 |
---|
| 113 | list [regexp (a)(b)? xay foo f2 f3 f4] $foo $f2 $f3 $f4 |
---|
| 114 | } |
---|
| 115 | } {1 a a {} {}} |
---|
| 116 | test regexpComp-2.7 {getting substrings back from regexp} { |
---|
| 117 | evalInProc { |
---|
| 118 | set foo 1; set f2 1; set f3 1; set f4 1 |
---|
| 119 | list [regexp (a)(b)?(c) xacy foo f2 f3 f4] $foo $f2 $f3 $f4 |
---|
| 120 | } |
---|
| 121 | } {1 ac a {} c} |
---|
| 122 | test regexpComp-2.8 {getting substrings back from regexp} { |
---|
| 123 | evalInProc { |
---|
| 124 | set match {} |
---|
| 125 | list [regexp {^a*b} aaaab match] $match |
---|
| 126 | } |
---|
| 127 | } {1 aaaab} |
---|
| 128 | |
---|
| 129 | test regexpComp-3.1 {-indices option to regexp} { |
---|
| 130 | evalInProc { |
---|
| 131 | set foo {} |
---|
| 132 | list [regexp -indices ab*c abbbbc foo] $foo |
---|
| 133 | } |
---|
| 134 | } {1 {0 5}} |
---|
| 135 | test regexpComp-3.2 {-indices option to regexp} { |
---|
| 136 | evalInProc { |
---|
| 137 | set foo {} |
---|
| 138 | set f2 {} |
---|
| 139 | list [regexp -indices a(b*)c abbbbc foo f2] $foo $f2 |
---|
| 140 | } |
---|
| 141 | } {1 {0 5} {1 4}} |
---|
| 142 | test regexpComp-3.3 {-indices option to regexp} { |
---|
| 143 | evalInProc { |
---|
| 144 | set foo {} |
---|
| 145 | set f2 {} |
---|
| 146 | list [regexp -indices a(b*)(c) abbbbc foo f2] $foo $f2 |
---|
| 147 | } |
---|
| 148 | } {1 {0 5} {1 4}} |
---|
| 149 | test regexpComp-3.4 {-indices option to regexp} { |
---|
| 150 | evalInProc { |
---|
| 151 | set foo {} |
---|
| 152 | set f2 {} |
---|
| 153 | set f3 {} |
---|
| 154 | list [regexp -indices a(b*)(c) abbbbc foo f2 f3] $foo $f2 $f3 |
---|
| 155 | } |
---|
| 156 | } {1 {0 5} {1 4} {5 5}} |
---|
| 157 | test regexpComp-3.5 {-indices option to regexp} { |
---|
| 158 | evalInProc { |
---|
| 159 | set foo {}; set f1 {}; set f2 {}; set f3 {}; set f4 {}; set f5 {}; |
---|
| 160 | set f6 {}; set f7 {}; set f8 {}; set f9 {} |
---|
| 161 | list [regexp -indices (1*)(2*)(3*)(4*)(5*)(6*)(7*)(8*)(9*) \ |
---|
| 162 | 12223345556789999 \ |
---|
| 163 | foo f1 f2 f3 f4 f5 f6 f7 f8 f9] $foo $f1 $f2 $f3 $f4 $f5 \ |
---|
| 164 | $f6 $f7 $f8 $f9 |
---|
| 165 | } |
---|
| 166 | } {1 {0 16} {0 0} {1 3} {4 5} {6 6} {7 9} {10 10} {11 11} {12 12} {13 16}} |
---|
| 167 | test regexpComp-3.6 {getting substrings back from regexp} { |
---|
| 168 | evalInProc { |
---|
| 169 | set foo 2; set f2 2; set f3 2; set f4 2 |
---|
| 170 | list [regexp -indices (a)(b)? xay foo f2 f3 f4] $foo $f2 $f3 $f4 |
---|
| 171 | } |
---|
| 172 | } {1 {1 1} {1 1} {-1 -1} {-1 -1}} |
---|
| 173 | test regexpComp-3.7 {getting substrings back from regexp} { |
---|
| 174 | evalInProc { |
---|
| 175 | set foo 1; set f2 1; set f3 1; set f4 1 |
---|
| 176 | list [regexp -indices (a)(b)?(c) xacy foo f2 f3 f4] $foo $f2 $f3 $f4 |
---|
| 177 | } |
---|
| 178 | } {1 {1 2} {1 1} {-1 -1} {2 2}} |
---|
| 179 | |
---|
| 180 | test regexpComp-4.1 {-nocase option to regexp} { |
---|
| 181 | evalInProc { |
---|
| 182 | regexp -nocase foo abcFOo |
---|
| 183 | } |
---|
| 184 | } 1 |
---|
| 185 | test regexpComp-4.2 {-nocase option to regexp} { |
---|
| 186 | evalInProc { |
---|
| 187 | set f1 22 |
---|
| 188 | set f2 33 |
---|
| 189 | set f3 44 |
---|
| 190 | list [regexp -nocase {a(b*)([xy]*)z} aBbbxYXxxZ22 f1 f2 f3] $f1 $f2 $f3 |
---|
| 191 | } |
---|
| 192 | } {1 aBbbxYXxxZ Bbb xYXxx} |
---|
| 193 | test regexpComp-4.3 {-nocase option to regexp} { |
---|
| 194 | evalInProc { |
---|
| 195 | regexp -nocase FOo abcFOo |
---|
| 196 | } |
---|
| 197 | } 1 |
---|
| 198 | set ::x abcdefghijklmnopqrstuvwxyz1234567890 |
---|
| 199 | set ::x $x$x$x$x$x$x$x$x$x$x$x$x |
---|
| 200 | test regexpComp-4.4 {case conversion in regexp} { |
---|
| 201 | evalInProc { |
---|
| 202 | list [regexp -nocase $::x $::x foo] $foo |
---|
| 203 | } |
---|
| 204 | } "1 $x" |
---|
| 205 | catch {unset ::x} |
---|
| 206 | |
---|
| 207 | test regexpComp-5.1 {exercise cache of compiled expressions} { |
---|
| 208 | evalInProc { |
---|
| 209 | regexp .*a b |
---|
| 210 | regexp .*b c |
---|
| 211 | regexp .*c d |
---|
| 212 | regexp .*d e |
---|
| 213 | regexp .*e f |
---|
| 214 | regexp .*a bbba |
---|
| 215 | } |
---|
| 216 | } 1 |
---|
| 217 | test regexpComp-5.2 {exercise cache of compiled expressions} { |
---|
| 218 | evalInProc { |
---|
| 219 | regexp .*a b |
---|
| 220 | regexp .*b c |
---|
| 221 | regexp .*c d |
---|
| 222 | regexp .*d e |
---|
| 223 | regexp .*e f |
---|
| 224 | regexp .*b xxxb |
---|
| 225 | } |
---|
| 226 | } 1 |
---|
| 227 | test regexpComp-5.3 {exercise cache of compiled expressions} { |
---|
| 228 | evalInProc { |
---|
| 229 | regexp .*a b |
---|
| 230 | regexp .*b c |
---|
| 231 | regexp .*c d |
---|
| 232 | regexp .*d e |
---|
| 233 | regexp .*e f |
---|
| 234 | regexp .*c yyyc |
---|
| 235 | } |
---|
| 236 | } 1 |
---|
| 237 | test regexpComp-5.4 {exercise cache of compiled expressions} { |
---|
| 238 | evalInProc { |
---|
| 239 | regexp .*a b |
---|
| 240 | regexp .*b c |
---|
| 241 | regexp .*c d |
---|
| 242 | regexp .*d e |
---|
| 243 | regexp .*e f |
---|
| 244 | regexp .*d 1d |
---|
| 245 | } |
---|
| 246 | } 1 |
---|
| 247 | test regexpComp-5.5 {exercise cache of compiled expressions} { |
---|
| 248 | evalInProc { |
---|
| 249 | regexp .*a b |
---|
| 250 | regexp .*b c |
---|
| 251 | regexp .*c d |
---|
| 252 | regexp .*d e |
---|
| 253 | regexp .*e f |
---|
| 254 | regexp .*e xe |
---|
| 255 | } |
---|
| 256 | } 1 |
---|
| 257 | |
---|
| 258 | test regexpComp-6.1 {regexp errors} { |
---|
| 259 | evalInProc { |
---|
| 260 | list [catch {regexp a} msg] $msg |
---|
| 261 | } |
---|
| 262 | } {1 {wrong # args: should be "regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?"}} |
---|
| 263 | test regexpComp-6.2 {regexp errors} { |
---|
| 264 | evalInProc { |
---|
| 265 | list [catch {regexp -nocase a} msg] $msg |
---|
| 266 | } |
---|
| 267 | } {1 {wrong # args: should be "regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?"}} |
---|
| 268 | test regexpComp-6.3 {regexp errors} { |
---|
| 269 | evalInProc { |
---|
| 270 | list [catch {regexp -gorp a} msg] $msg |
---|
| 271 | } |
---|
| 272 | } {1 {bad switch "-gorp": must be -all, -about, -indices, -inline, -expanded, -line, -linestop, -lineanchor, -nocase, -start, or --}} |
---|
| 273 | test regexpComp-6.4 {regexp errors} { |
---|
| 274 | evalInProc { |
---|
| 275 | list [catch {regexp a( b} msg] $msg |
---|
| 276 | } |
---|
| 277 | } {1 {couldn't compile regular expression pattern: parentheses () not balanced}} |
---|
| 278 | test regexpComp-6.5 {regexp errors} { |
---|
| 279 | evalInProc { |
---|
| 280 | list [catch {regexp a( b} msg] $msg |
---|
| 281 | } |
---|
| 282 | } {1 {couldn't compile regular expression pattern: parentheses () not balanced}} |
---|
| 283 | test regexpComp-6.6 {regexp errors} { |
---|
| 284 | evalInProc { |
---|
| 285 | list [catch {regexp a a f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1} msg] $msg |
---|
| 286 | } |
---|
| 287 | } {0 1} |
---|
| 288 | test regexpComp-6.7 {regexp errors} { |
---|
| 289 | evalInProc { |
---|
| 290 | list [catch {regexp (x)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.) xyzzy} msg] $msg |
---|
| 291 | } |
---|
| 292 | } {0 0} |
---|
| 293 | test regexpComp-6.8 {regexp errors} { |
---|
| 294 | evalInProc { |
---|
| 295 | catch {unset f1} |
---|
| 296 | set f1 44 |
---|
| 297 | list [catch {regexp abc abc f1(f2)} msg] $msg |
---|
| 298 | } |
---|
| 299 | } {1 {couldn't set variable "f1(f2)"}} |
---|
| 300 | test regexpComp-6.9 {regexp errors, -start bad int check} { |
---|
| 301 | evalInProc { |
---|
| 302 | list [catch {regexp -start bogus {^$} {}} msg] $msg |
---|
| 303 | } |
---|
| 304 | } {1 {bad index "bogus": must be integer?[+-]integer? or end?[+-]integer?}} |
---|
| 305 | |
---|
| 306 | test regexpComp-7.1 {basic regsub operation} { |
---|
| 307 | evalInProc { |
---|
| 308 | list [regsub aa+ xaxaaaxaa 111&222 foo] $foo |
---|
| 309 | } |
---|
| 310 | } {1 xax111aaa222xaa} |
---|
| 311 | test regexpComp-7.2 {basic regsub operation} { |
---|
| 312 | evalInProc { |
---|
| 313 | list [regsub aa+ aaaxaa &111 foo] $foo |
---|
| 314 | } |
---|
| 315 | } {1 aaa111xaa} |
---|
| 316 | test regexpComp-7.3 {basic regsub operation} { |
---|
| 317 | evalInProc { |
---|
| 318 | list [regsub aa+ xaxaaa 111& foo] $foo |
---|
| 319 | } |
---|
| 320 | } {1 xax111aaa} |
---|
| 321 | test regexpComp-7.4 {basic regsub operation} { |
---|
| 322 | evalInProc { |
---|
| 323 | list [regsub aa+ aaa 11&2&333 foo] $foo |
---|
| 324 | } |
---|
| 325 | } {1 11aaa2aaa333} |
---|
| 326 | test regexpComp-7.5 {basic regsub operation} { |
---|
| 327 | evalInProc { |
---|
| 328 | list [regsub aa+ xaxaaaxaa &2&333 foo] $foo |
---|
| 329 | } |
---|
| 330 | } {1 xaxaaa2aaa333xaa} |
---|
| 331 | test regexpComp-7.6 {basic regsub operation} { |
---|
| 332 | evalInProc { |
---|
| 333 | list [regsub aa+ xaxaaaxaa 1&22& foo] $foo |
---|
| 334 | } |
---|
| 335 | } {1 xax1aaa22aaaxaa} |
---|
| 336 | test regexpComp-7.7 {basic regsub operation} { |
---|
| 337 | evalInProc { |
---|
| 338 | list [regsub a(a+) xaxaaaxaa {1\122\1} foo] $foo |
---|
| 339 | } |
---|
| 340 | } {1 xax1aa22aaxaa} |
---|
| 341 | test regexpComp-7.8 {basic regsub operation} { |
---|
| 342 | evalInProc { |
---|
| 343 | list [regsub a(a+) xaxaaaxaa {1\\\122\1} foo] $foo |
---|
| 344 | } |
---|
| 345 | } "1 {xax1\\aa22aaxaa}" |
---|
| 346 | test regexpComp-7.9 {basic regsub operation} { |
---|
| 347 | evalInProc { |
---|
| 348 | list [regsub a(a+) xaxaaaxaa {1\\122\1} foo] $foo |
---|
| 349 | } |
---|
| 350 | } "1 {xax1\\122aaxaa}" |
---|
| 351 | test regexpComp-7.10 {basic regsub operation} { |
---|
| 352 | evalInProc { |
---|
| 353 | list [regsub a(a+) xaxaaaxaa {1\\&\1} foo] $foo |
---|
| 354 | } |
---|
| 355 | } "1 {xax1\\aaaaaxaa}" |
---|
| 356 | test regexpComp-7.11 {basic regsub operation} { |
---|
| 357 | evalInProc { |
---|
| 358 | list [regsub a(a+) xaxaaaxaa {1\&\1} foo] $foo |
---|
| 359 | } |
---|
| 360 | } {1 xax1&aaxaa} |
---|
| 361 | test regexpComp-7.12 {basic regsub operation} { |
---|
| 362 | evalInProc { |
---|
| 363 | list [regsub a(a+) xaxaaaxaa {\1\1\1\1&&} foo] $foo |
---|
| 364 | } |
---|
| 365 | } {1 xaxaaaaaaaaaaaaaaxaa} |
---|
| 366 | test regexpComp-7.13 {basic regsub operation} { |
---|
| 367 | evalInProc { |
---|
| 368 | set foo xxx |
---|
| 369 | list [regsub abc xyz 111 foo] $foo |
---|
| 370 | } |
---|
| 371 | } {0 xyz} |
---|
| 372 | test regexpComp-7.14 {basic regsub operation} { |
---|
| 373 | evalInProc { |
---|
| 374 | set foo xxx |
---|
| 375 | list [regsub ^ xyz "111 " foo] $foo |
---|
| 376 | } |
---|
| 377 | } {1 {111 xyz}} |
---|
| 378 | test regexpComp-7.15 {basic regsub operation} { |
---|
| 379 | evalInProc { |
---|
| 380 | set foo xxx |
---|
| 381 | list [regsub -- -foo abc-foodef "111 " foo] $foo |
---|
| 382 | } |
---|
| 383 | } {1 {abc111 def}} |
---|
| 384 | test regexpComp-7.16 {basic regsub operation} { |
---|
| 385 | evalInProc { |
---|
| 386 | set foo xxx |
---|
| 387 | list [regsub x "" y foo] $foo |
---|
| 388 | } |
---|
| 389 | } {0 {}} |
---|
| 390 | test regexpComp-7.17 {regsub utf compliance} { |
---|
| 391 | evalInProc { |
---|
| 392 | # if not UTF-8 aware, result is "0 1" |
---|
| 393 | set foo "xyz555ijka\u4e4ebpqr" |
---|
| 394 | regsub a\u4e4eb xyza\u4e4ebijka\u4e4ebpqr 555 bar |
---|
| 395 | list [string compare $foo $bar] [regexp 4 $bar] |
---|
| 396 | } |
---|
| 397 | } {0 0} |
---|
| 398 | |
---|
| 399 | test regexpComp-8.1 {case conversion in regsub} { |
---|
| 400 | evalInProc { |
---|
| 401 | list [regsub -nocase a(a+) xaAAaAAay & foo] $foo |
---|
| 402 | } |
---|
| 403 | } {1 xaAAaAAay} |
---|
| 404 | test regexpComp-8.2 {case conversion in regsub} { |
---|
| 405 | evalInProc { |
---|
| 406 | list [regsub -nocase a(a+) xaAAaAAay & foo] $foo |
---|
| 407 | } |
---|
| 408 | } {1 xaAAaAAay} |
---|
| 409 | test regexpComp-8.3 {case conversion in regsub} { |
---|
| 410 | evalInProc { |
---|
| 411 | set foo 123 |
---|
| 412 | list [regsub a(a+) xaAAaAAay & foo] $foo |
---|
| 413 | } |
---|
| 414 | } {0 xaAAaAAay} |
---|
| 415 | test regexpComp-8.4 {case conversion in regsub} { |
---|
| 416 | evalInProc { |
---|
| 417 | set foo 123 |
---|
| 418 | list [regsub -nocase a CaDE b foo] $foo |
---|
| 419 | } |
---|
| 420 | } {1 CbDE} |
---|
| 421 | test regexpComp-8.5 {case conversion in regsub} { |
---|
| 422 | evalInProc { |
---|
| 423 | set foo 123 |
---|
| 424 | list [regsub -nocase XYZ CxYzD b foo] $foo |
---|
| 425 | } |
---|
| 426 | } {1 CbD} |
---|
| 427 | test regexpComp-8.6 {case conversion in regsub} { |
---|
| 428 | evalInProc { |
---|
| 429 | set x abcdefghijklmnopqrstuvwxyz1234567890 |
---|
| 430 | set x $x$x$x$x$x$x$x$x$x$x$x$x |
---|
| 431 | set foo 123 |
---|
| 432 | list [regsub -nocase $x $x b foo] $foo |
---|
| 433 | } |
---|
| 434 | } {1 b} |
---|
| 435 | |
---|
| 436 | test regexpComp-9.1 {-all option to regsub} { |
---|
| 437 | evalInProc { |
---|
| 438 | set foo 86 |
---|
| 439 | list [regsub -all x+ axxxbxxcxdx |&| foo] $foo |
---|
| 440 | } |
---|
| 441 | } {4 a|xxx|b|xx|c|x|d|x|} |
---|
| 442 | test regexpComp-9.2 {-all option to regsub} { |
---|
| 443 | evalInProc { |
---|
| 444 | set foo 86 |
---|
| 445 | list [regsub -nocase -all x+ aXxXbxxcXdx |&| foo] $foo |
---|
| 446 | } |
---|
| 447 | } {4 a|XxX|b|xx|c|X|d|x|} |
---|
| 448 | test regexpComp-9.3 {-all option to regsub} { |
---|
| 449 | evalInProc { |
---|
| 450 | set foo 86 |
---|
| 451 | list [regsub x+ axxxbxxcxdx |&| foo] $foo |
---|
| 452 | } |
---|
| 453 | } {1 a|xxx|bxxcxdx} |
---|
| 454 | test regexpComp-9.4 {-all option to regsub} { |
---|
| 455 | evalInProc { |
---|
| 456 | set foo 86 |
---|
| 457 | list [regsub -all bc axxxbxxcxdx |&| foo] $foo |
---|
| 458 | } |
---|
| 459 | } {0 axxxbxxcxdx} |
---|
| 460 | test regexpComp-9.5 {-all option to regsub} { |
---|
| 461 | evalInProc { |
---|
| 462 | set foo xxx |
---|
| 463 | list [regsub -all node "node node more" yy foo] $foo |
---|
| 464 | } |
---|
| 465 | } {2 {yy yy more}} |
---|
| 466 | test regexpComp-9.6 {-all option to regsub} { |
---|
| 467 | evalInProc { |
---|
| 468 | set foo xxx |
---|
| 469 | list [regsub -all ^ xxx 123 foo] $foo |
---|
| 470 | } |
---|
| 471 | } {1 123xxx} |
---|
| 472 | |
---|
| 473 | test regexpComp-10.1 {expanded syntax in regsub} { |
---|
| 474 | evalInProc { |
---|
| 475 | set foo xxx |
---|
| 476 | list [regsub -expanded ". \#comment\n . \#comment2" abc def foo] $foo |
---|
| 477 | } |
---|
| 478 | } {1 defc} |
---|
| 479 | test regexpComp-10.2 {newline sensitivity in regsub} { |
---|
| 480 | evalInProc { |
---|
| 481 | set foo xxx |
---|
| 482 | list [regsub -line {^a.*b$} "dabc\naxyb\n" 123 foo] $foo |
---|
| 483 | } |
---|
| 484 | } "1 {dabc\n123\n}" |
---|
| 485 | test regexpComp-10.3 {newline sensitivity in regsub} { |
---|
| 486 | evalInProc { |
---|
| 487 | set foo xxx |
---|
| 488 | list [regsub -line {^a.*b$} "dabc\naxyb\nxb" 123 foo] $foo |
---|
| 489 | } |
---|
| 490 | } "1 {dabc\n123\nxb}" |
---|
| 491 | test regexpComp-10.4 {partial newline sensitivity in regsub} { |
---|
| 492 | evalInProc { |
---|
| 493 | set foo xxx |
---|
| 494 | list [regsub -lineanchor {^a.*b$} "da\naxyb\nxb" 123 foo] $foo |
---|
| 495 | } |
---|
| 496 | } "1 {da\n123}" |
---|
| 497 | test regexpComp-10.5 {inverse partial newline sensitivity in regsub} { |
---|
| 498 | evalInProc { |
---|
| 499 | set foo xxx |
---|
| 500 | list [regsub -linestop {a.*b} "da\nbaxyb\nxb" 123 foo] $foo |
---|
| 501 | } |
---|
| 502 | } "1 {da\nb123\nxb}" |
---|
| 503 | |
---|
| 504 | test regexpComp-11.1 {regsub errors} { |
---|
| 505 | evalInProc { |
---|
| 506 | list [catch {regsub a b} msg] $msg |
---|
| 507 | } |
---|
| 508 | } {1 {wrong # args: should be "regsub ?switches? exp string subSpec ?varName?"}} |
---|
| 509 | test regexpComp-11.2 {regsub errors} { |
---|
| 510 | evalInProc { |
---|
| 511 | list [catch {regsub -nocase a b} msg] $msg |
---|
| 512 | } |
---|
| 513 | } {1 {wrong # args: should be "regsub ?switches? exp string subSpec ?varName?"}} |
---|
| 514 | test regexpComp-11.3 {regsub errors} { |
---|
| 515 | evalInProc { |
---|
| 516 | list [catch {regsub -nocase -all a b} msg] $msg |
---|
| 517 | } |
---|
| 518 | } {1 {wrong # args: should be "regsub ?switches? exp string subSpec ?varName?"}} |
---|
| 519 | test regexpComp-11.4 {regsub errors} { |
---|
| 520 | evalInProc { |
---|
| 521 | list [catch {regsub a b c d e f} msg] $msg |
---|
| 522 | } |
---|
| 523 | } {1 {wrong # args: should be "regsub ?switches? exp string subSpec ?varName?"}} |
---|
| 524 | test regexpComp-11.5 {regsub errors} { |
---|
| 525 | evalInProc { |
---|
| 526 | list [catch {regsub -gorp a b c} msg] $msg |
---|
| 527 | } |
---|
| 528 | } {1 {bad switch "-gorp": must be -all, -nocase, -expanded, -line, -linestop, -lineanchor, -start, or --}} |
---|
| 529 | test regexpComp-11.6 {regsub errors} { |
---|
| 530 | evalInProc { |
---|
| 531 | list [catch {regsub -nocase a( b c d} msg] $msg |
---|
| 532 | } |
---|
| 533 | } {1 {couldn't compile regular expression pattern: parentheses () not balanced}} |
---|
| 534 | test regexpComp-11.7 {regsub errors} { |
---|
| 535 | evalInProc { |
---|
| 536 | catch {unset f1} |
---|
| 537 | set f1 44 |
---|
| 538 | list [catch {regsub -nocase aaa aaa xxx f1(f2)} msg] $msg |
---|
| 539 | } |
---|
| 540 | } {1 {couldn't set variable "f1(f2)"}} |
---|
| 541 | test regexpComp-11.8 {regsub errors, -start bad int check} { |
---|
| 542 | evalInProc { |
---|
| 543 | list [catch {regsub -start bogus pattern string rep var} msg] $msg |
---|
| 544 | } |
---|
| 545 | } {1 {bad index "bogus": must be integer?[+-]integer? or end?[+-]integer?}} |
---|
| 546 | |
---|
| 547 | # This test crashes on the Mac unless you increase the Stack Space to about 1 |
---|
| 548 | # Meg. This is probably bigger than most users want... |
---|
| 549 | # 8.2.3 regexp reduced stack space requirements, but this should be |
---|
| 550 | # tested again |
---|
| 551 | test regexpComp-12.1 {Tcl_RegExpExec: large number of subexpressions} {macCrash} { |
---|
| 552 | evalInProc { |
---|
| 553 | list [regexp (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.) abcdefghijklmnopqrstuvwxyz all a b c d e f g h i j k l m n o p q r s t u v w x y z] $all $a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z |
---|
| 554 | } |
---|
| 555 | } {1 abcdefghijklmnopqrstuvwxyz a b c d e f g h i j k l m n o p q r s t u v w x y z} |
---|
| 556 | |
---|
| 557 | test regexpComp-13.1 {regsub of a very large string} { |
---|
| 558 | # This test is designed to stress the memory subsystem in order |
---|
| 559 | # to catch Bug #933. It only fails if the Tcl memory allocator |
---|
| 560 | # is in use. |
---|
| 561 | |
---|
| 562 | set line {BEGIN_TABLE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END_TABLE} |
---|
| 563 | set filedata [string repeat $line 200] |
---|
| 564 | for {set i 1} {$i<10} {incr i} { |
---|
| 565 | regsub -all "BEGIN_TABLE " $filedata "" newfiledata |
---|
| 566 | } |
---|
| 567 | set x done |
---|
| 568 | } {done} |
---|
| 569 | |
---|
| 570 | test regexpComp-14.1 {CompileRegexp: regexp cache} { |
---|
| 571 | evalInProc { |
---|
| 572 | regexp .*a b |
---|
| 573 | regexp .*b c |
---|
| 574 | regexp .*c d |
---|
| 575 | regexp .*d e |
---|
| 576 | regexp .*e f |
---|
| 577 | set x . |
---|
| 578 | append x *a |
---|
| 579 | regexp $x bbba |
---|
| 580 | } |
---|
| 581 | } 1 |
---|
| 582 | test regexpComp-14.2 {CompileRegexp: regexp cache, different flags} { |
---|
| 583 | evalInProc { |
---|
| 584 | regexp .*a b |
---|
| 585 | regexp .*b c |
---|
| 586 | regexp .*c d |
---|
| 587 | regexp .*d e |
---|
| 588 | regexp .*e f |
---|
| 589 | set x . |
---|
| 590 | append x *a |
---|
| 591 | regexp -nocase $x bbba |
---|
| 592 | } |
---|
| 593 | } 1 |
---|
| 594 | |
---|
| 595 | testConstraint exec [llength [info commands exec]] |
---|
| 596 | test regexpComp-14.3 {CompileRegexp: regexp cache, empty regexp and empty cache} -constraints { |
---|
| 597 | exec |
---|
| 598 | } -setup { |
---|
| 599 | set junk [makeFile {puts [regexp {} foo]} junk.tcl] |
---|
| 600 | } -body { |
---|
| 601 | exec [interpreter] $junk |
---|
| 602 | } -cleanup { |
---|
| 603 | removeFile junk.tcl |
---|
| 604 | } -result 1 |
---|
| 605 | |
---|
| 606 | test regexpComp-15.1 {regexp -start} { |
---|
| 607 | catch {unset x} |
---|
| 608 | list [regexp -start -10 {\d} 1abc2de3 x] $x |
---|
| 609 | } {1 1} |
---|
| 610 | test regexpComp-15.2 {regexp -start} { |
---|
| 611 | catch {unset x} |
---|
| 612 | list [regexp -start 2 {\d} 1abc2de3 x] $x |
---|
| 613 | } {1 2} |
---|
| 614 | test regexpComp-15.3 {regexp -start} { |
---|
| 615 | catch {unset x} |
---|
| 616 | list [regexp -start 4 {\d} 1abc2de3 x] $x |
---|
| 617 | } {1 2} |
---|
| 618 | test regexpComp-15.4 {regexp -start} { |
---|
| 619 | catch {unset x} |
---|
| 620 | list [regexp -start 5 {\d} 1abc2de3 x] $x |
---|
| 621 | } {1 3} |
---|
| 622 | test regexpComp-15.5 {regexp -start, over end of string} { |
---|
| 623 | catch {unset x} |
---|
| 624 | list [regexp -start [string length 1abc2de3] {\d} 1abc2de3 x] [info exists x] |
---|
| 625 | } {0 0} |
---|
| 626 | test regexpComp-15.6 {regexp -start, loss of ^$ behavior} { |
---|
| 627 | list [regexp -start 2 {^$} {}] |
---|
| 628 | } {0} |
---|
| 629 | |
---|
| 630 | test regexpComp-16.1 {regsub -start} { |
---|
| 631 | catch {unset x} |
---|
| 632 | list [regsub -all -start 2 {\d} a1b2c3d4e5 {/&} x] $x |
---|
| 633 | } {4 a1b/2c/3d/4e/5} |
---|
| 634 | test regexpComp-16.2 {regsub -start} { |
---|
| 635 | catch {unset x} |
---|
| 636 | list [regsub -all -start -25 {z} hello {/&} x] $x |
---|
| 637 | } {0 hello} |
---|
| 638 | test regexpComp-16.3 {regsub -start} { |
---|
| 639 | catch {unset x} |
---|
| 640 | list [regsub -all -start 3 {z} hello {/&} x] $x |
---|
| 641 | } {0 hello} |
---|
| 642 | test regexpComp-16.4 {regsub -start, \A behavior} { |
---|
| 643 | set out {} |
---|
| 644 | lappend out [regsub -start 0 -all {\A(\w)} {abcde} {/\1} x] $x |
---|
| 645 | lappend out [regsub -start 2 -all {\A(\w)} {abcde} {/\1} x] $x |
---|
| 646 | } {5 /a/b/c/d/e 3 ab/c/d/e} |
---|
| 647 | |
---|
| 648 | test regexpComp-17.1 {regexp -inline} { |
---|
| 649 | regexp -inline b ababa |
---|
| 650 | } {b} |
---|
| 651 | test regexpComp-17.2 {regexp -inline} { |
---|
| 652 | regexp -inline (b) ababa |
---|
| 653 | } {b b} |
---|
| 654 | test regexpComp-17.3 {regexp -inline -indices} { |
---|
| 655 | regexp -inline -indices (b) ababa |
---|
| 656 | } {{1 1} {1 1}} |
---|
| 657 | test regexpComp-17.4 {regexp -inline} { |
---|
| 658 | regexp -inline {\w(\d+)\w} " hello 23 there456def " |
---|
| 659 | } {e456d 456} |
---|
| 660 | test regexpComp-17.5 {regexp -inline no matches} { |
---|
| 661 | regexp -inline {\w(\d+)\w} "" |
---|
| 662 | } {} |
---|
| 663 | test regexpComp-17.6 {regexp -inline no matches} { |
---|
| 664 | regexp -inline hello goodbye |
---|
| 665 | } {} |
---|
| 666 | test regexpComp-17.7 {regexp -inline, no matchvars allowed} { |
---|
| 667 | list [catch {regexp -inline b abc match} msg] $msg |
---|
| 668 | } {1 {regexp match variables not allowed when using -inline}} |
---|
| 669 | |
---|
| 670 | test regexpComp-18.1 {regexp -all} { |
---|
| 671 | regexp -all b bbbbb |
---|
| 672 | } {5} |
---|
| 673 | test regexpComp-18.2 {regexp -all} { |
---|
| 674 | regexp -all b abababbabaaaaaaaaaab |
---|
| 675 | } {6} |
---|
| 676 | test regexpComp-18.3 {regexp -all -inline} { |
---|
| 677 | regexp -all -inline b abababbabaaaaaaaaaab |
---|
| 678 | } {b b b b b b} |
---|
| 679 | test regexpComp-18.4 {regexp -all -inline} { |
---|
| 680 | regexp -all -inline {\w(\w)} abcdefg |
---|
| 681 | } {ab b cd d ef f} |
---|
| 682 | test regexpComp-18.5 {regexp -all -inline} { |
---|
| 683 | regexp -all -inline {\w(\w)$} abcdefg |
---|
| 684 | } {fg g} |
---|
| 685 | test regexpComp-18.6 {regexp -all -inline} { |
---|
| 686 | regexp -all -inline {\d+} 10:20:30:40 |
---|
| 687 | } {10 20 30 40} |
---|
| 688 | test regexpComp-18.7 {regexp -all -inline} { |
---|
| 689 | list [catch {regexp -all -inline b abc match} msg] $msg |
---|
| 690 | } {1 {regexp match variables not allowed when using -inline}} |
---|
| 691 | test regexpComp-18.8 {regexp -all} { |
---|
| 692 | # This should not cause an infinite loop |
---|
| 693 | regexp -all -inline {a*} a |
---|
| 694 | } {a} |
---|
| 695 | test regexpComp-18.9 {regexp -all} { |
---|
| 696 | # Yes, the expected result is {a {}}. Here's why: |
---|
| 697 | # Start at index 0; a* matches the "a" there then stops. |
---|
| 698 | # Go to index 1; a* matches the lambda (or {}) there then stops. Recall |
---|
| 699 | # that a* matches zero or more "a"'s; thus it matches the string "b", as |
---|
| 700 | # there are zero or more "a"'s there. |
---|
| 701 | # Go to index 2; this is past the end of the string, so stop. |
---|
| 702 | regexp -all -inline {a*} ab |
---|
| 703 | } {a {}} |
---|
| 704 | test regexpComp-18.10 {regexp -all} { |
---|
| 705 | # Yes, the expected result is {a {} a}. Here's why: |
---|
| 706 | # Start at index 0; a* matches the "a" there then stops. |
---|
| 707 | # Go to index 1; a* matches the lambda (or {}) there then stops. Recall |
---|
| 708 | # that a* matches zero or more "a"'s; thus it matches the string "b", as |
---|
| 709 | # there are zero or more "a"'s there. |
---|
| 710 | # Go to index 2; a* matches the "a" there then stops. |
---|
| 711 | # Go to index 3; this is past the end of the string, so stop. |
---|
| 712 | regexp -all -inline {a*} aba |
---|
| 713 | } {a {} a} |
---|
| 714 | test regexpComp-18.11 {regexp -all} { |
---|
| 715 | evalInProc { |
---|
| 716 | regexp -all -inline {^a} aaaa |
---|
| 717 | } |
---|
| 718 | } {a} |
---|
| 719 | test regexpComp-18.12 {regexp -all -inline -indices} { |
---|
| 720 | evalInProc { |
---|
| 721 | regexp -all -inline -indices a(b(c)d|e(f)g)h abcdhaefgh |
---|
| 722 | } |
---|
| 723 | } {{0 4} {1 3} {2 2} {-1 -1} {5 9} {6 8} {-1 -1} {7 7}} |
---|
| 724 | |
---|
| 725 | test regexpComp-19.1 {regsub null replacement} { |
---|
| 726 | evalInProc { |
---|
| 727 | regsub -all {@} {@hel@lo@} "\0a\0" result |
---|
| 728 | list $result [string length $result] |
---|
| 729 | } |
---|
| 730 | } "\0a\0hel\0a\0lo\0a\0 14" |
---|
| 731 | |
---|
| 732 | test regexpComp-20.1 {regsub shared object shimmering} { |
---|
| 733 | evalInProc { |
---|
| 734 | # Bug #461322 |
---|
| 735 | set a abcdefghijklmnopqurstuvwxyz |
---|
| 736 | set b $a |
---|
| 737 | set c abcdefghijklmnopqurstuvwxyz0123456789 |
---|
| 738 | regsub $a $c $b d |
---|
| 739 | list $d [string length $d] [string bytelength $d] |
---|
| 740 | } |
---|
| 741 | } [list abcdefghijklmnopqurstuvwxyz0123456789 37 37] |
---|
| 742 | test regexpComp-20.2 {regsub shared object shimmering with -about} { |
---|
| 743 | evalInProc { |
---|
| 744 | eval regexp -about abc |
---|
| 745 | } |
---|
| 746 | } {0 {}} |
---|
| 747 | |
---|
| 748 | test regexpComp-21.1 {regexp command compiling tests} { |
---|
| 749 | evalInProc { |
---|
| 750 | regexp foo bar |
---|
| 751 | } |
---|
| 752 | } 0 |
---|
| 753 | test regexpComp-21.2 {regexp command compiling tests} { |
---|
| 754 | evalInProc { |
---|
| 755 | regexp {^foo$} dogfood |
---|
| 756 | } |
---|
| 757 | } 0 |
---|
| 758 | test regexpComp-21.3 {regexp command compiling tests} { |
---|
| 759 | evalInProc { |
---|
| 760 | set a foo |
---|
| 761 | regexp {^foo$} $a |
---|
| 762 | } |
---|
| 763 | } 1 |
---|
| 764 | test regexpComp-21.4 {regexp command compiling tests} { |
---|
| 765 | evalInProc { |
---|
| 766 | regexp foo dogfood |
---|
| 767 | } |
---|
| 768 | } 1 |
---|
| 769 | test regexpComp-21.5 {regexp command compiling tests} { |
---|
| 770 | evalInProc { |
---|
| 771 | regexp -nocase FOO dogfod |
---|
| 772 | } |
---|
| 773 | } 0 |
---|
| 774 | test regexpComp-21.6 {regexp command compiling tests} { |
---|
| 775 | evalInProc { |
---|
| 776 | regexp -n foo dogfoOd |
---|
| 777 | } |
---|
| 778 | } 1 |
---|
| 779 | test regexpComp-21.7 {regexp command compiling tests} { |
---|
| 780 | evalInProc { |
---|
| 781 | regexp -no -- FoO dogfood |
---|
| 782 | } |
---|
| 783 | } 1 |
---|
| 784 | test regexpComp-21.8 {regexp command compiling tests} { |
---|
| 785 | evalInProc { |
---|
| 786 | regexp -- foo dogfod |
---|
| 787 | } |
---|
| 788 | } 0 |
---|
| 789 | test regexpComp-21.9 {regexp command compiling tests} { |
---|
| 790 | evalInProc { |
---|
| 791 | list [catch {regexp -- -nocase foo dogfod} msg] $msg |
---|
| 792 | } |
---|
| 793 | } {0 0} |
---|
| 794 | test regexpComp-21.10 {regexp command compiling tests} { |
---|
| 795 | evalInProc { |
---|
| 796 | list [regsub -all "" foo bar str] $str |
---|
| 797 | } |
---|
| 798 | } {3 barfbarobaro} |
---|
| 799 | test regexpComp-21.11 {regexp command compiling tests} { |
---|
| 800 | evalInProc { |
---|
| 801 | list [regsub -all "" "" bar str] $str |
---|
| 802 | } |
---|
| 803 | } {0 {}} |
---|
| 804 | |
---|
| 805 | test regexpComp-22.0.1 {Bug 1810038} { |
---|
| 806 | evalInProc { |
---|
| 807 | regexp ($|^X)* {} |
---|
| 808 | } |
---|
| 809 | } 1 |
---|
| 810 | |
---|
| 811 | test regexpComp-22.0.2 {regexp compile and backrefs, Bug 1857126} { |
---|
| 812 | evalInProc { |
---|
| 813 | regexp -- {([bc])\1} bb |
---|
| 814 | } |
---|
| 815 | } 1 |
---|
| 816 | |
---|
| 817 | set i 0 |
---|
| 818 | foreach {str exp result} { |
---|
| 819 | foo ^foo 1 |
---|
| 820 | foobar ^foobar$ 1 |
---|
| 821 | foobar bar$ 1 |
---|
| 822 | foobar ^$ 0 |
---|
| 823 | "" ^$ 1 |
---|
| 824 | anything $ 1 |
---|
| 825 | anything ^.*$ 1 |
---|
| 826 | anything ^.*a$ 0 |
---|
| 827 | anything ^.*a.*$ 1 |
---|
| 828 | anything ^.*.*$ 1 |
---|
| 829 | anything ^.*..*$ 1 |
---|
| 830 | anything ^.*b$ 0 |
---|
| 831 | anything ^a.*$ 1 |
---|
| 832 | } { |
---|
| 833 | test regexpComp-22.[incr i] {regexp command compiling tests} \ |
---|
| 834 | [subst {evalInProc {set a "$str"; regexp {$exp} \$a}}] $result |
---|
| 835 | } |
---|
| 836 | |
---|
| 837 | set i 0 |
---|
| 838 | foreach {str exp result} { |
---|
| 839 | foo ^foo 1 |
---|
| 840 | foobar ^foobar$ 1 |
---|
| 841 | foobar bar$ 1 |
---|
| 842 | foobar ^$ 0 |
---|
| 843 | "" ^$ 1 |
---|
| 844 | anything $ 1 |
---|
| 845 | anything ^.*$ 1 |
---|
| 846 | anything ^.*a$ 0 |
---|
| 847 | anything ^.*a.*$ 1 |
---|
| 848 | anything ^.*.*$ 1 |
---|
| 849 | anything ^.*..*$ 1 |
---|
| 850 | anything ^.*b$ 0 |
---|
| 851 | anything ^a.*$ 1 |
---|
| 852 | } { |
---|
| 853 | test regexpComp-23.[incr i] {regexp command compiling tests INST_REGEXP} \ |
---|
| 854 | [subst {evalInProc {set a "$str"; set re "$exp"; regexp \$re \$a}}] $result |
---|
| 855 | } |
---|
| 856 | |
---|
| 857 | test regexpComp-24.1 {regexp command compiling tests} { |
---|
| 858 | evalInProc { |
---|
| 859 | set re foo |
---|
| 860 | regexp -nocase $re bar |
---|
| 861 | } |
---|
| 862 | } 0 |
---|
| 863 | test regexpComp-24.2 {regexp command compiling tests} { |
---|
| 864 | evalInProc { |
---|
| 865 | set re {^foo$} |
---|
| 866 | regexp $re dogfood |
---|
| 867 | } |
---|
| 868 | } 0 |
---|
| 869 | test regexpComp-24.3 {regexp command compiling tests} { |
---|
| 870 | evalInProc { |
---|
| 871 | set a foo |
---|
| 872 | set re {^foo$} |
---|
| 873 | regexp $re $a |
---|
| 874 | } |
---|
| 875 | } 1 |
---|
| 876 | test regexpComp-24.4 {regexp command compiling tests} { |
---|
| 877 | evalInProc { |
---|
| 878 | set re foo |
---|
| 879 | regexp $re dogfood |
---|
| 880 | } |
---|
| 881 | } 1 |
---|
| 882 | test regexpComp-24.5 {regexp command compiling tests} { |
---|
| 883 | evalInProc { |
---|
| 884 | set re FOO |
---|
| 885 | regexp -nocase $re dogfod |
---|
| 886 | } |
---|
| 887 | } 0 |
---|
| 888 | test regexpComp-24.6 {regexp command compiling tests} { |
---|
| 889 | evalInProc { |
---|
| 890 | set re foo |
---|
| 891 | regexp -n $re dogfoOd |
---|
| 892 | } |
---|
| 893 | } 1 |
---|
| 894 | test regexpComp-24.7 {regexp command compiling tests} { |
---|
| 895 | evalInProc { |
---|
| 896 | set re FoO |
---|
| 897 | regexp -no -- $re dogfood |
---|
| 898 | } |
---|
| 899 | } 1 |
---|
| 900 | test regexpComp-24.8 {regexp command compiling tests} { |
---|
| 901 | evalInProc { |
---|
| 902 | set re foo |
---|
| 903 | regexp -- $re dogfod |
---|
| 904 | } |
---|
| 905 | } 0 |
---|
| 906 | test regexpComp-24.9 {regexp command compiling tests} { |
---|
| 907 | evalInProc { |
---|
| 908 | set re "(" |
---|
| 909 | list [catch {regexp -- $re dogfod} msg] $msg |
---|
| 910 | } |
---|
| 911 | } {1 {couldn't compile regular expression pattern: parentheses () not balanced}} |
---|
| 912 | test regexpComp-24.10 {regexp command compiling tests} { |
---|
| 913 | # Bug 1902436 - last * escaped |
---|
| 914 | evalInProc { |
---|
| 915 | set text {this is *bold* !} |
---|
| 916 | set re {\*bold\*} |
---|
| 917 | regexp -- $re $text |
---|
| 918 | } |
---|
| 919 | } 1 |
---|
| 920 | test regexpComp-24.11 {regexp command compiling tests} { |
---|
| 921 | # Bug 1902436 - last * escaped |
---|
| 922 | evalInProc { |
---|
| 923 | set text {this is *bold* !} |
---|
| 924 | set re {\*bold\*.*!} |
---|
| 925 | regexp -- $re $text |
---|
| 926 | } |
---|
| 927 | } 1 |
---|
| 928 | |
---|
| 929 | # cleanup |
---|
| 930 | ::tcltest::cleanupTests |
---|
| 931 | return |
---|