os/persistentdata/persistentstorage/sqlite3api/TEST/TCL/tcldistribution/tests/event.test
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
# This file contains a collection of tests for the procedures in the file
sl@0
     2
# tclEvent.c, which includes the "update", and "vwait" Tcl
sl@0
     3
# commands.  Sourcing this file into Tcl runs the tests and generates
sl@0
     4
# output for errors.  No output means no errors were found.
sl@0
     5
#
sl@0
     6
# Copyright (c) 1995-1997 Sun Microsystems, Inc.
sl@0
     7
# Copyright (c) 1998-1999 by Scriptics Corporation.
sl@0
     8
#
sl@0
     9
# See the file "license.terms" for information on usage and redistribution
sl@0
    10
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
sl@0
    11
#
sl@0
    12
# RCS: @(#) $Id: event.test,v 1.20.2.1 2006/11/28 16:29:47 kennykb Exp $
sl@0
    13
sl@0
    14
package require tcltest 2
sl@0
    15
namespace import -force ::tcltest::*
sl@0
    16
sl@0
    17
testConstraint testfilehandler [llength [info commands testfilehandler]]
sl@0
    18
testConstraint testexithandler [llength [info commands testexithandler]]
sl@0
    19
testConstraint testfilewait [llength [info commands testfilewait]]
sl@0
    20
sl@0
    21
test event-1.1 {Tcl_CreateFileHandler, reading} {testfilehandler} {
sl@0
    22
    testfilehandler close
sl@0
    23
    testfilehandler create 0 readable off
sl@0
    24
    testfilehandler clear 0
sl@0
    25
    testfilehandler oneevent
sl@0
    26
    set result ""
sl@0
    27
    lappend result [testfilehandler counts 0]
sl@0
    28
    testfilehandler fillpartial 0
sl@0
    29
    testfilehandler oneevent
sl@0
    30
    lappend result [testfilehandler counts 0]
sl@0
    31
    testfilehandler oneevent
sl@0
    32
    lappend result [testfilehandler counts 0]
sl@0
    33
    testfilehandler close
sl@0
    34
    set result
sl@0
    35
} {{0 0} {1 0} {2 0}}
sl@0
    36
test event-1.2 {Tcl_CreateFileHandler, writing} {testfilehandler nonPortable} {
sl@0
    37
    # This test is non-portable because on some systems (e.g.
sl@0
    38
    # SunOS 4.1.3) pipes seem to be writable always.
sl@0
    39
    testfilehandler close
sl@0
    40
    testfilehandler create 0 off writable
sl@0
    41
    testfilehandler clear 0
sl@0
    42
    testfilehandler oneevent
sl@0
    43
    set result ""
sl@0
    44
    lappend result [testfilehandler counts 0]
sl@0
    45
    testfilehandler fillpartial 0
sl@0
    46
    testfilehandler oneevent
sl@0
    47
    lappend result [testfilehandler counts 0]
sl@0
    48
    testfilehandler fill 0
sl@0
    49
    testfilehandler oneevent
sl@0
    50
    lappend result [testfilehandler counts 0]
sl@0
    51
    testfilehandler close
sl@0
    52
    set result
sl@0
    53
} {{0 1} {0 2} {0 2}}
sl@0
    54
test event-1.3 {Tcl_DeleteFileHandler} {testfilehandler nonPortable} {
sl@0
    55
    testfilehandler close
sl@0
    56
    testfilehandler create 2 disabled disabled
sl@0
    57
    testfilehandler create 1 readable writable
sl@0
    58
    testfilehandler create 0 disabled disabled
sl@0
    59
    testfilehandler fillpartial 1
sl@0
    60
    set result ""
sl@0
    61
    testfilehandler oneevent
sl@0
    62
    lappend result [testfilehandler counts 1]
sl@0
    63
    testfilehandler oneevent
sl@0
    64
    lappend result [testfilehandler counts 1]
sl@0
    65
    testfilehandler oneevent
sl@0
    66
    lappend result [testfilehandler counts 1]
sl@0
    67
    testfilehandler create 1 off off
sl@0
    68
    testfilehandler oneevent
sl@0
    69
    lappend result [testfilehandler counts 1]
sl@0
    70
    testfilehandler close
sl@0
    71
    set result
sl@0
    72
} {{0 1} {1 1} {1 2} {0 0}}
sl@0
    73
sl@0
    74
test event-2.1 {Tcl_DeleteFileHandler} {testfilehandler nonPortable} {
sl@0
    75
    testfilehandler close
sl@0
    76
    testfilehandler create 2 disabled disabled
sl@0
    77
    testfilehandler create 1 readable writable
sl@0
    78
    testfilehandler fillpartial 1
sl@0
    79
    set result ""
sl@0
    80
    testfilehandler oneevent
sl@0
    81
    lappend result [testfilehandler counts 1]
sl@0
    82
    testfilehandler oneevent
sl@0
    83
    lappend result [testfilehandler counts 1]
sl@0
    84
    testfilehandler oneevent
sl@0
    85
    lappend result [testfilehandler counts 1]
sl@0
    86
    testfilehandler create 1 off off
sl@0
    87
    testfilehandler oneevent
sl@0
    88
    lappend result [testfilehandler counts 1]
sl@0
    89
    testfilehandler close
sl@0
    90
    set result
sl@0
    91
} {{0 1} {1 1} {1 2} {0 0}}
sl@0
    92
test event-2.2 {Tcl_DeleteFileHandler, fd reused & events still pending} \
sl@0
    93
	{testfilehandler nonPortable} {
sl@0
    94
    testfilehandler close
sl@0
    95
    testfilehandler create 0 readable writable
sl@0
    96
    testfilehandler fillpartial 0
sl@0
    97
    set result ""
sl@0
    98
    testfilehandler oneevent
sl@0
    99
    lappend result [testfilehandler counts 0]
sl@0
   100
    testfilehandler close
sl@0
   101
    testfilehandler create 0 readable writable
sl@0
   102
    testfilehandler oneevent
sl@0
   103
    lappend result [testfilehandler counts 0]
sl@0
   104
    testfilehandler close
sl@0
   105
    set result
sl@0
   106
} {{0 1} {0 0}}
sl@0
   107
sl@0
   108
test event-3.1 {FileHandlerCheckProc, TCL_FILE_EVENTS off } {testfilehandler} {
sl@0
   109
    testfilehandler close
sl@0
   110
    testfilehandler create 1 readable writable
sl@0
   111
    testfilehandler fillpartial 1
sl@0
   112
    testfilehandler windowevent
sl@0
   113
    set result [testfilehandler counts 1]
sl@0
   114
    testfilehandler close
sl@0
   115
    set result
sl@0
   116
} {0 0}
sl@0
   117
sl@0
   118
test event-4.1 {FileHandlerEventProc, race between event and disabling} \
sl@0
   119
	{testfilehandler nonPortable} {
sl@0
   120
    update
sl@0
   121
    testfilehandler close
sl@0
   122
    testfilehandler create 2 disabled disabled
sl@0
   123
    testfilehandler create 1 readable writable
sl@0
   124
    testfilehandler fillpartial 1
sl@0
   125
    set result ""
sl@0
   126
    testfilehandler oneevent
sl@0
   127
    lappend result [testfilehandler counts 1]
sl@0
   128
    testfilehandler oneevent
sl@0
   129
    lappend result [testfilehandler counts 1]
sl@0
   130
    testfilehandler oneevent
sl@0
   131
    lappend result [testfilehandler counts 1]
sl@0
   132
    testfilehandler create 1 disabled disabled
sl@0
   133
    testfilehandler oneevent
sl@0
   134
    lappend result [testfilehandler counts 1]
sl@0
   135
    testfilehandler close
sl@0
   136
    set result
sl@0
   137
} {{0 1} {1 1} {1 2} {0 0}}
sl@0
   138
test event-4.2 {FileHandlerEventProc, TCL_FILE_EVENTS off} \
sl@0
   139
	{testfilehandler nonPortable} {
sl@0
   140
    update
sl@0
   141
    testfilehandler close
sl@0
   142
    testfilehandler create 1 readable writable
sl@0
   143
    testfilehandler create 2 readable writable
sl@0
   144
    testfilehandler fillpartial 1
sl@0
   145
    testfilehandler fillpartial 2
sl@0
   146
    testfilehandler oneevent
sl@0
   147
    set result ""
sl@0
   148
    lappend result [testfilehandler counts 1] [testfilehandler counts 2]
sl@0
   149
    testfilehandler windowevent
sl@0
   150
    lappend result [testfilehandler counts 1] [testfilehandler counts 2]
sl@0
   151
    testfilehandler close
sl@0
   152
    set result
sl@0
   153
} {{0 0} {0 1} {0 0} {0 1}}
sl@0
   154
update
sl@0
   155
sl@0
   156
test event-5.1 {Tcl_BackgroundError, HandleBgErrors procedures} {
sl@0
   157
    catch {rename bgerror {}}
sl@0
   158
    proc bgerror msg {
sl@0
   159
	global errorInfo errorCode x
sl@0
   160
	lappend x [list $msg $errorInfo $errorCode]
sl@0
   161
    }
sl@0
   162
    after idle {error "a simple error"}
sl@0
   163
    after idle {open non_existent}
sl@0
   164
    after idle {set errorInfo foobar; set errorCode xyzzy}
sl@0
   165
    set x {}
sl@0
   166
    update idletasks
sl@0
   167
    rename bgerror {}
sl@0
   168
    regsub -all [file join {} non_existent] $x "non_existent" x
sl@0
   169
    set x
sl@0
   170
} {{{a simple error} {a simple error
sl@0
   171
    while executing
sl@0
   172
"error "a simple error""
sl@0
   173
    ("after" script)} NONE} {{couldn't open "non_existent": no such file or directory} {couldn't open "non_existent": no such file or directory
sl@0
   174
    while executing
sl@0
   175
"open non_existent"
sl@0
   176
    ("after" script)} {POSIX ENOENT {no such file or directory}}}}
sl@0
   177
test event-5.2 {Tcl_BackgroundError, HandleBgErrors procedures} {
sl@0
   178
    catch {rename bgerror {}}
sl@0
   179
    proc bgerror msg {
sl@0
   180
	global x
sl@0
   181
	lappend x $msg
sl@0
   182
	return -code break
sl@0
   183
    }
sl@0
   184
    after idle {error "a simple error"}
sl@0
   185
    after idle {open non_existent}
sl@0
   186
    set x {}
sl@0
   187
    update idletasks
sl@0
   188
    rename bgerror {}
sl@0
   189
    set x
sl@0
   190
} {{a simple error}}
sl@0
   191
sl@0
   192
test event-6.1 {BgErrorDeleteProc procedure} {
sl@0
   193
    catch {interp delete foo}
sl@0
   194
    interp create foo
sl@0
   195
    set erroutfile [makeFile Unmodified err.out]
sl@0
   196
    foo eval [list set erroutfile $erroutfile]
sl@0
   197
    foo eval {
sl@0
   198
	proc bgerror args {
sl@0
   199
	    global errorInfo erroutfile
sl@0
   200
	    set f [open $erroutfile r+]
sl@0
   201
	    seek $f 0 end
sl@0
   202
	    puts $f "$args $errorInfo"
sl@0
   203
	    close $f
sl@0
   204
	}
sl@0
   205
	after 100 {error "first error"}
sl@0
   206
	after 100 {error "second error"}
sl@0
   207
    }
sl@0
   208
    after 100 {interp delete foo}
sl@0
   209
    after 200
sl@0
   210
    update
sl@0
   211
    set f [open $erroutfile r]
sl@0
   212
    set result [read $f]
sl@0
   213
    close $f
sl@0
   214
    removeFile $erroutfile
sl@0
   215
    set result
sl@0
   216
} {Unmodified
sl@0
   217
}
sl@0
   218
sl@0
   219
test event-7.1 {bgerror / regular} {
sl@0
   220
    set errRes {}
sl@0
   221
    proc bgerror {err} {
sl@0
   222
	global errRes;
sl@0
   223
	set errRes $err;
sl@0
   224
    }
sl@0
   225
    after 0 {error err1}
sl@0
   226
    vwait errRes;
sl@0
   227
    set errRes;
sl@0
   228
} err1
sl@0
   229
sl@0
   230
test event-7.2 {bgerror / accumulation} {
sl@0
   231
    set errRes {}
sl@0
   232
    proc bgerror {err} {
sl@0
   233
	global errRes;
sl@0
   234
	lappend errRes $err;
sl@0
   235
    }
sl@0
   236
    after 0 {error err1}
sl@0
   237
    after 0 {error err2}
sl@0
   238
    after 0 {error err3}
sl@0
   239
    update
sl@0
   240
    set errRes;
sl@0
   241
} {err1 err2 err3}
sl@0
   242
sl@0
   243
test event-7.3 {bgerror / accumulation / break} {
sl@0
   244
    set errRes {}
sl@0
   245
    proc bgerror {err} {
sl@0
   246
	global errRes;
sl@0
   247
	lappend errRes $err;
sl@0
   248
	return -code break "skip!";
sl@0
   249
    }
sl@0
   250
    after 0 {error err1}
sl@0
   251
    after 0 {error err2}
sl@0
   252
    after 0 {error err3}
sl@0
   253
    update
sl@0
   254
    set errRes;
sl@0
   255
} err1
sl@0
   256
sl@0
   257
test event-7.4 {tkerror is nothing special anymore to tcl} {
sl@0
   258
    set errRes {}
sl@0
   259
    # we don't just rename bgerror to empty because it could then
sl@0
   260
    # be autoloaded...
sl@0
   261
    proc bgerror {err} {
sl@0
   262
	global errRes;
sl@0
   263
	lappend errRes "bg:$err";
sl@0
   264
    }
sl@0
   265
    proc tkerror {err} {
sl@0
   266
	global errRes;
sl@0
   267
	lappend errRes "tk:$err";
sl@0
   268
    }
sl@0
   269
    after 0 {error err1}
sl@0
   270
    update
sl@0
   271
    rename tkerror {}
sl@0
   272
    set errRes
sl@0
   273
} bg:err1
sl@0
   274
sl@0
   275
testConstraint exec [llength [info commands exec]]
sl@0
   276
sl@0
   277
test event-7.5 {correct behaviour when there is no bgerror [Bug 219142]} {exec} {
sl@0
   278
    set script {
sl@0
   279
	after 1000 error hello
sl@0
   280
	after 2000 set a 0
sl@0
   281
	vwait a
sl@0
   282
    }
sl@0
   283
sl@0
   284
    list [catch {exec [interpreter] << $script} errMsg] $errMsg
sl@0
   285
} {1 {hello
sl@0
   286
    while executing
sl@0
   287
"error hello"
sl@0
   288
    ("after" script)}}
sl@0
   289
sl@0
   290
sl@0
   291
# someday : add a test checking that 
sl@0
   292
# when there is no bgerror, an error msg goes to stderr
sl@0
   293
# ideally one would use sub interp and transfer a fake stderr
sl@0
   294
# to it, unfortunatly the current interp tcl API does not allow
sl@0
   295
# that. the other option would be to use fork a test but it
sl@0
   296
# then becomes more a file/exec test than a bgerror test.
sl@0
   297
sl@0
   298
# end of bgerror tests
sl@0
   299
catch {rename bgerror {}}
sl@0
   300
sl@0
   301
sl@0
   302
test event-8.1 {Tcl_CreateExitHandler procedure} {stdio testexithandler} {
sl@0
   303
    set child [open |[list [interpreter]] r+]
sl@0
   304
    puts $child "testexithandler create 41; testexithandler create 4"
sl@0
   305
    puts $child "testexithandler create 6; exit"
sl@0
   306
    flush $child
sl@0
   307
    set result [read $child]
sl@0
   308
    close $child
sl@0
   309
    set result
sl@0
   310
} {even 6
sl@0
   311
even 4
sl@0
   312
odd 41
sl@0
   313
}
sl@0
   314
sl@0
   315
test event-9.1 {Tcl_DeleteExitHandler procedure} {stdio testexithandler} {
sl@0
   316
    set child [open |[list [interpreter]] r+]
sl@0
   317
    puts $child "testexithandler create 41; testexithandler create 4"
sl@0
   318
    puts $child "testexithandler create 6; testexithandler delete 41"
sl@0
   319
    puts $child "testexithandler create 16; exit"
sl@0
   320
    flush $child
sl@0
   321
    set result [read $child]
sl@0
   322
    close $child
sl@0
   323
    set result
sl@0
   324
} {even 16
sl@0
   325
even 6
sl@0
   326
even 4
sl@0
   327
}
sl@0
   328
test event-9.2 {Tcl_DeleteExitHandler procedure} {stdio testexithandler} {
sl@0
   329
    set child [open |[list [interpreter]] r+]
sl@0
   330
    puts $child "testexithandler create 41; testexithandler create 4"
sl@0
   331
    puts $child "testexithandler create 6; testexithandler delete 4"
sl@0
   332
    puts $child "testexithandler create 16; exit"
sl@0
   333
    flush $child
sl@0
   334
    set result [read $child]
sl@0
   335
    close $child
sl@0
   336
    set result
sl@0
   337
    } {even 16
sl@0
   338
even 6
sl@0
   339
odd 41
sl@0
   340
}
sl@0
   341
test event-9.3 {Tcl_DeleteExitHandler procedure} {stdio testexithandler} {
sl@0
   342
    set child [open |[list [interpreter]] r+]
sl@0
   343
    puts $child "testexithandler create 41; testexithandler create 4"
sl@0
   344
    puts $child "testexithandler create 6; testexithandler delete 6"
sl@0
   345
    puts $child "testexithandler create 16; exit"
sl@0
   346
    flush $child
sl@0
   347
    set result [read $child]
sl@0
   348
    close $child
sl@0
   349
    set result
sl@0
   350
} {even 16
sl@0
   351
even 4
sl@0
   352
odd 41
sl@0
   353
}
sl@0
   354
test event-9.4 {Tcl_DeleteExitHandler procedure} {stdio testexithandler} {
sl@0
   355
    set child [open |[list [interpreter]] r+]
sl@0
   356
    puts $child "testexithandler create 41; testexithandler delete 41"
sl@0
   357
    puts $child "testexithandler create 16; exit"
sl@0
   358
    flush $child
sl@0
   359
    set result [read $child]
sl@0
   360
    close $child
sl@0
   361
    set result
sl@0
   362
} {even 16
sl@0
   363
}
sl@0
   364
sl@0
   365
test event-10.1 {Tcl_Exit procedure} {stdio} {
sl@0
   366
    set child [open |[list [interpreter]] r+]
sl@0
   367
    puts $child "exit 3"
sl@0
   368
    list [catch {close $child} msg] $msg [lindex $errorCode 0] \
sl@0
   369
        [lindex $errorCode 2]
sl@0
   370
} {1 {child process exited abnormally} CHILDSTATUS 3}
sl@0
   371
sl@0
   372
test event-11.1 {Tcl_VwaitCmd procedure} {
sl@0
   373
    list [catch {vwait} msg] $msg
sl@0
   374
} {1 {wrong # args: should be "vwait name"}}
sl@0
   375
test event-11.2 {Tcl_VwaitCmd procedure} {
sl@0
   376
    list [catch {vwait a b} msg] $msg
sl@0
   377
} {1 {wrong # args: should be "vwait name"}}
sl@0
   378
test event-11.3 {Tcl_VwaitCmd procedure} {
sl@0
   379
    catch {unset x}
sl@0
   380
    set x 1
sl@0
   381
    list [catch {vwait x(1)} msg] $msg
sl@0
   382
} {1 {can't trace "x(1)": variable isn't array}}
sl@0
   383
test event-11.4 {Tcl_VwaitCmd procedure} {} {
sl@0
   384
    foreach i [after info] {
sl@0
   385
	after cancel $i
sl@0
   386
    }
sl@0
   387
    after 10; update; # On Mac make sure update won't take long
sl@0
   388
    after 100 {set x x-done}
sl@0
   389
    after 200 {set y y-done}
sl@0
   390
    after 300 {set z z-done}
sl@0
   391
    after idle {set q q-done}
sl@0
   392
    set x before
sl@0
   393
    set y before
sl@0
   394
    set z before
sl@0
   395
    set q before
sl@0
   396
    list [vwait y] $x $y $z $q
sl@0
   397
} {{} x-done y-done before q-done}
sl@0
   398
sl@0
   399
foreach i [after info] {
sl@0
   400
    after cancel $i
sl@0
   401
}
sl@0
   402
sl@0
   403
test event-11.5 {Tcl_VwaitCmd procedure: round robin scheduling, 2 sources} {socket} {
sl@0
   404
    set test1file [makeFile "" test1]
sl@0
   405
    set f1 [open $test1file w]
sl@0
   406
    proc accept {s args} {
sl@0
   407
	puts $s foobar
sl@0
   408
	close $s
sl@0
   409
    }
sl@0
   410
    catch {set s1 [socket -server accept 0]}
sl@0
   411
    after 1000
sl@0
   412
    catch {set s2 [socket 127.0.0.1 [lindex [fconfigure $s1 -sockname] 2]]}
sl@0
   413
    close $s1
sl@0
   414
    set x 0
sl@0
   415
    set y 0
sl@0
   416
    set z 0
sl@0
   417
    fileevent $s2 readable {incr z}
sl@0
   418
    vwait z
sl@0
   419
    fileevent $f1 writable {incr x; if {$y == 3} {set z done}}
sl@0
   420
    fileevent $s2 readable {incr y; if {$x == 3} {set z done}}
sl@0
   421
    vwait z
sl@0
   422
    close $f1
sl@0
   423
    close $s2
sl@0
   424
    removeFile $test1file
sl@0
   425
    list $x $y $z
sl@0
   426
} {3 3 done}
sl@0
   427
test event-11.6 {Tcl_VwaitCmd procedure: round robin scheduling, same source} {
sl@0
   428
    set test1file [makeFile "" test1]
sl@0
   429
    set test2file [makeFile "" test2]
sl@0
   430
    set f1 [open $test1file w]
sl@0
   431
    set f2 [open $test2file w]
sl@0
   432
    set x 0
sl@0
   433
    set y 0
sl@0
   434
    set z 0
sl@0
   435
    update
sl@0
   436
    fileevent $f1 writable {incr x; if {$y == 3} {set z done}}
sl@0
   437
    fileevent $f2 writable {incr y; if {$x == 3} {set z done}}
sl@0
   438
    vwait z
sl@0
   439
    close $f1
sl@0
   440
    close $f2
sl@0
   441
    removeFile $test1file
sl@0
   442
    removeFile $test2file
sl@0
   443
    list $x $y $z
sl@0
   444
} {3 3 done}
sl@0
   445
sl@0
   446
sl@0
   447
test event-12.1 {Tcl_UpdateCmd procedure} {
sl@0
   448
    list [catch {update a b} msg] $msg
sl@0
   449
} {1 {wrong # args: should be "update ?idletasks?"}}
sl@0
   450
test event-12.2 {Tcl_UpdateCmd procedure} {
sl@0
   451
    list [catch {update bogus} msg] $msg
sl@0
   452
} {1 {bad option "bogus": must be idletasks}}
sl@0
   453
test event-12.3 {Tcl_UpdateCmd procedure} {
sl@0
   454
    foreach i [after info] {
sl@0
   455
	after cancel $i
sl@0
   456
    }
sl@0
   457
    after 500 {set x after}
sl@0
   458
    after idle {set y after}
sl@0
   459
    after idle {set z "after, y = $y"}
sl@0
   460
    set x before
sl@0
   461
    set y before
sl@0
   462
    set z before
sl@0
   463
    update idletasks
sl@0
   464
    list $x $y $z
sl@0
   465
} {before after {after, y = after}}
sl@0
   466
test event-12.4 {Tcl_UpdateCmd procedure} {
sl@0
   467
    foreach i [after info] {
sl@0
   468
	after cancel $i
sl@0
   469
    }
sl@0
   470
    after 10; update; # On Mac make sure update won't take long
sl@0
   471
    after 200 {set x x-done}
sl@0
   472
    after 600 {set y y-done}
sl@0
   473
    after idle {set z z-done}
sl@0
   474
    set x before
sl@0
   475
    set y before
sl@0
   476
    set z before
sl@0
   477
    after 300
sl@0
   478
    update
sl@0
   479
    list $x $y $z
sl@0
   480
} {x-done before z-done}
sl@0
   481
sl@0
   482
test event-13.1 {Tcl_WaitForFile procedure, readable} {testfilehandler} {
sl@0
   483
    foreach i [after info] {
sl@0
   484
	after cancel $i
sl@0
   485
    }
sl@0
   486
    after 100 set x timeout
sl@0
   487
    testfilehandler close
sl@0
   488
    testfilehandler create 1 off off
sl@0
   489
    set x "no timeout"
sl@0
   490
    set result [testfilehandler wait 1 readable 0]
sl@0
   491
    update
sl@0
   492
    testfilehandler close
sl@0
   493
    list $result $x
sl@0
   494
} {{} {no timeout}}
sl@0
   495
test event-13.2 {Tcl_WaitForFile procedure, readable} testfilehandler {
sl@0
   496
    foreach i [after info] {
sl@0
   497
	after cancel $i
sl@0
   498
    }
sl@0
   499
    after 100 set x timeout
sl@0
   500
    testfilehandler close
sl@0
   501
    testfilehandler create 1 off off
sl@0
   502
    set x "no timeout"
sl@0
   503
    set result [testfilehandler wait 1 readable 100]
sl@0
   504
    update
sl@0
   505
    testfilehandler close
sl@0
   506
    list $result $x
sl@0
   507
} {{} timeout}
sl@0
   508
test event-13.3 {Tcl_WaitForFile procedure, readable} testfilehandler {
sl@0
   509
    foreach i [after info] {
sl@0
   510
	after cancel $i
sl@0
   511
    }
sl@0
   512
    after 100 set x timeout
sl@0
   513
    testfilehandler close
sl@0
   514
    testfilehandler create 1 off off
sl@0
   515
    testfilehandler fillpartial 1
sl@0
   516
    set x "no timeout"
sl@0
   517
    set result [testfilehandler wait 1 readable 100]
sl@0
   518
    update
sl@0
   519
    testfilehandler close
sl@0
   520
    list $result $x
sl@0
   521
} {readable {no timeout}}
sl@0
   522
test event-13.4 {Tcl_WaitForFile procedure, writable} \
sl@0
   523
	{testfilehandler nonPortable} {
sl@0
   524
    foreach i [after info] {
sl@0
   525
	after cancel $i
sl@0
   526
    }
sl@0
   527
    after 100 set x timeout
sl@0
   528
    testfilehandler close
sl@0
   529
    testfilehandler create 1 off off
sl@0
   530
    testfilehandler fill 1
sl@0
   531
    set x "no timeout"
sl@0
   532
    set result [testfilehandler wait 1 writable 0]
sl@0
   533
    update
sl@0
   534
    testfilehandler close
sl@0
   535
    list $result $x
sl@0
   536
} {{} {no timeout}}
sl@0
   537
test event-13.5 {Tcl_WaitForFile procedure, writable} \
sl@0
   538
	{testfilehandler nonPortable} {
sl@0
   539
    foreach i [after info] {
sl@0
   540
	after cancel $i
sl@0
   541
    }
sl@0
   542
    after 100 set x timeout
sl@0
   543
    testfilehandler close
sl@0
   544
    testfilehandler create 1 off off
sl@0
   545
    testfilehandler fill 1
sl@0
   546
    set x "no timeout"
sl@0
   547
    set result [testfilehandler wait 1 writable 100]
sl@0
   548
    update
sl@0
   549
    testfilehandler close
sl@0
   550
    list $result $x
sl@0
   551
} {{} timeout}
sl@0
   552
test event-13.6 {Tcl_WaitForFile procedure, writable} testfilehandler {
sl@0
   553
    foreach i [after info] {
sl@0
   554
	after cancel $i
sl@0
   555
    }
sl@0
   556
    after 100 set x timeout
sl@0
   557
    testfilehandler close
sl@0
   558
    testfilehandler create 1 off off
sl@0
   559
    set x "no timeout"
sl@0
   560
    set result [testfilehandler wait 1 writable 100]
sl@0
   561
    update
sl@0
   562
    testfilehandler close
sl@0
   563
    list $result $x
sl@0
   564
} {writable {no timeout}}
sl@0
   565
test event-13.7 {Tcl_WaitForFile procedure, don't call other event handlers} testfilehandler {
sl@0
   566
    foreach i [after info] {
sl@0
   567
	after cancel $i
sl@0
   568
    }
sl@0
   569
    after 100 lappend x timeout
sl@0
   570
    after idle lappend x idle
sl@0
   571
    testfilehandler close
sl@0
   572
    testfilehandler create 1 off off
sl@0
   573
    set x ""
sl@0
   574
    set result [list [testfilehandler wait 1 readable 200] $x]
sl@0
   575
    update
sl@0
   576
    testfilehandler close
sl@0
   577
    lappend result $x
sl@0
   578
} {{} {} {timeout idle}}
sl@0
   579
sl@0
   580
test event-13.8 {Tcl_WaitForFile procedure, waiting indefinitely} testfilewait {
sl@0
   581
    set f [open "|sleep 2" r]
sl@0
   582
    set result ""
sl@0
   583
    lappend result [testfilewait $f readable 100]
sl@0
   584
    lappend result [testfilewait $f readable -1]
sl@0
   585
    close $f
sl@0
   586
    set result
sl@0
   587
} {{} readable}
sl@0
   588
sl@0
   589
sl@0
   590
test event-14.1 {Tcl_WaitForFile procedure, readable, big fd} \
sl@0
   591
    -constraints {testfilehandler unix} \
sl@0
   592
    -setup {
sl@0
   593
	set chanList {}
sl@0
   594
	for {set i 0} {$i < 32} {incr i} {
sl@0
   595
	    lappend chanList [open /dev/null r]
sl@0
   596
	}
sl@0
   597
    } \
sl@0
   598
    -body {
sl@0
   599
	foreach i [after info] {
sl@0
   600
	    after cancel $i
sl@0
   601
	}
sl@0
   602
	after 100 set x timeout
sl@0
   603
	testfilehandler close
sl@0
   604
	testfilehandler create 1 off off
sl@0
   605
	set x "no timeout"
sl@0
   606
	set result [testfilehandler wait 1 readable 0]
sl@0
   607
	update
sl@0
   608
	testfilehandler close
sl@0
   609
	list $result $x
sl@0
   610
    } \
sl@0
   611
    -result {{} {no timeout}} \
sl@0
   612
    -cleanup {
sl@0
   613
	foreach chan $chanList {close $chan}
sl@0
   614
    }
sl@0
   615
sl@0
   616
test event-14.2 {Tcl_WaitForFile procedure, readable, big fd} \
sl@0
   617
    -constraints {testfilehandler unix} \
sl@0
   618
    -setup {
sl@0
   619
	set chanList {}
sl@0
   620
	for {set i 0} {$i < 32} {incr i} {
sl@0
   621
	    lappend chanList [open /dev/null r]
sl@0
   622
	}
sl@0
   623
    } \
sl@0
   624
    -body {
sl@0
   625
	foreach i [after info] {
sl@0
   626
	    after cancel $i
sl@0
   627
	}
sl@0
   628
	after 100 set x timeout
sl@0
   629
	testfilehandler close
sl@0
   630
	testfilehandler create 1 off off
sl@0
   631
	set x "no timeout"
sl@0
   632
	set result [testfilehandler wait 1 readable 100]
sl@0
   633
	update
sl@0
   634
	testfilehandler close
sl@0
   635
	list $result $x
sl@0
   636
    } \
sl@0
   637
    -result {{} timeout} \
sl@0
   638
    -cleanup {
sl@0
   639
	foreach chan $chanList {close $chan}
sl@0
   640
    }
sl@0
   641
sl@0
   642
test event-14.3 {Tcl_WaitForFile procedure, readable, big fd} \
sl@0
   643
    -constraints {testfilehandler unix} \
sl@0
   644
    -setup {
sl@0
   645
	set chanList {}
sl@0
   646
	for {set i 0} {$i < 32} {incr i} {
sl@0
   647
	    lappend chanList [open /dev/null r]
sl@0
   648
	}
sl@0
   649
    } \
sl@0
   650
    -body {
sl@0
   651
	foreach i [after info] {
sl@0
   652
	    after cancel $i
sl@0
   653
	}
sl@0
   654
	after 100 set x timeout
sl@0
   655
	testfilehandler close
sl@0
   656
	testfilehandler create 1 off off
sl@0
   657
	testfilehandler fillpartial 1
sl@0
   658
	set x "no timeout"
sl@0
   659
	set result [testfilehandler wait 1 readable 100]
sl@0
   660
	update
sl@0
   661
	testfilehandler close
sl@0
   662
	list $result $x
sl@0
   663
    } \
sl@0
   664
    -result {readable {no timeout}} \
sl@0
   665
    -cleanup {
sl@0
   666
	foreach chan $chanList {close $chan}
sl@0
   667
    }
sl@0
   668
sl@0
   669
test event-14.4 {Tcl_WaitForFile procedure, writable, big fd} \
sl@0
   670
    -constraints {testfilehandler unix nonPortable} \
sl@0
   671
    -setup {
sl@0
   672
	set chanList {}
sl@0
   673
	for {set i 0} {$i < 32} {incr i} {
sl@0
   674
	    lappend chanList [open /dev/null r]
sl@0
   675
	}
sl@0
   676
    } \
sl@0
   677
    -body {
sl@0
   678
	foreach i [after info] {
sl@0
   679
	    after cancel $i
sl@0
   680
	}
sl@0
   681
	after 100 set x timeout
sl@0
   682
	testfilehandler close
sl@0
   683
	testfilehandler create 1 off off
sl@0
   684
	testfilehandler fill 1
sl@0
   685
	set x "no timeout"
sl@0
   686
	set result [testfilehandler wait 1 writable 0]
sl@0
   687
	update
sl@0
   688
	testfilehandler close
sl@0
   689
	list $result $
sl@0
   690
    } \
sl@0
   691
    -result {{} {no timeout}} \
sl@0
   692
    -cleanup {
sl@0
   693
	foreach chan $chanList {close $chan}
sl@0
   694
    }
sl@0
   695
sl@0
   696
test event-14.5 {Tcl_WaitForFile procedure, writable, big fd} \
sl@0
   697
    -constraints {testfilehandler unix nonPortable} \
sl@0
   698
    -setup {
sl@0
   699
	set chanList {}
sl@0
   700
	for {set i 0} {$i < 32} {incr i} {
sl@0
   701
	    lappend chanList [open /dev/null r]
sl@0
   702
	}
sl@0
   703
    } \
sl@0
   704
    -body {
sl@0
   705
	foreach i [after info] {
sl@0
   706
	    after cancel $i
sl@0
   707
	}
sl@0
   708
	after 100 set x timeout
sl@0
   709
	testfilehandler close
sl@0
   710
	testfilehandler create 1 off off
sl@0
   711
	testfilehandler fill 1
sl@0
   712
	set x "no timeout"
sl@0
   713
	set result [testfilehandler wait 1 writable 100]
sl@0
   714
	update
sl@0
   715
	testfilehandler close
sl@0
   716
	list $result $x
sl@0
   717
    } \
sl@0
   718
    -result {{} timeout} \
sl@0
   719
    -cleanup {
sl@0
   720
	foreach chan $chanList {close $chan}
sl@0
   721
    }
sl@0
   722
sl@0
   723
test event-14.6 {Tcl_WaitForFile procedure, writable, big fd} \
sl@0
   724
    -constraints {testfilehandler unix} \
sl@0
   725
    -setup {
sl@0
   726
	set chanList {}
sl@0
   727
	for {set i 0} {$i < 32} {incr i} {
sl@0
   728
	    lappend chanList [open /dev/null r]
sl@0
   729
	}
sl@0
   730
    } \
sl@0
   731
    -body {
sl@0
   732
	foreach i [after info] {
sl@0
   733
	    after cancel $i
sl@0
   734
	}
sl@0
   735
	after 100 set x timeout
sl@0
   736
	testfilehandler close
sl@0
   737
	testfilehandler create 1 off off
sl@0
   738
	set x "no timeout"
sl@0
   739
	set result [testfilehandler wait 1 writable 100]
sl@0
   740
	update
sl@0
   741
	testfilehandler close
sl@0
   742
	list $result $x
sl@0
   743
    } \
sl@0
   744
    -result {writable {no timeout}} \
sl@0
   745
    -cleanup {
sl@0
   746
	foreach chan $chanList {close $chan}
sl@0
   747
    }
sl@0
   748
sl@0
   749
test event-14.7 {Tcl_WaitForFile, don't call other event handlers, big fd} \
sl@0
   750
    -constraints {testfilehandler unix} \
sl@0
   751
    -setup {
sl@0
   752
	set chanList {}
sl@0
   753
	for {set i 0} {$i < 32} {incr i} {
sl@0
   754
	    lappend chanList [open /dev/null r]
sl@0
   755
	}
sl@0
   756
    } \
sl@0
   757
    -body {
sl@0
   758
	foreach i [after info] {
sl@0
   759
	    after cancel $i
sl@0
   760
	}
sl@0
   761
	after 100 lappend x timeout
sl@0
   762
	after idle lappend x idle
sl@0
   763
	testfilehandler close
sl@0
   764
	testfilehandler create 1 off off
sl@0
   765
	set x ""
sl@0
   766
	set result [list [testfilehandler wait 1 readable 200] $x]
sl@0
   767
	update
sl@0
   768
	testfilehandler close
sl@0
   769
	lappend result $x
sl@0
   770
    } \
sl@0
   771
    -result {{} {} {timeout idle}} \
sl@0
   772
    -cleanup {
sl@0
   773
	foreach chan $chanList {close $chan}
sl@0
   774
    }
sl@0
   775
sl@0
   776
sl@0
   777
test event-14.8 {Tcl_WaitForFile procedure, waiting indefinitely, big fd} \
sl@0
   778
    -constraints {testfilewait unix} \
sl@0
   779
    -body {
sl@0
   780
	set f [open "|sleep 2" r]
sl@0
   781
	set result ""
sl@0
   782
	lappend result [testfilewait $f readable 100]
sl@0
   783
	lappend result [testfilewait $f readable -1]
sl@0
   784
	close $f
sl@0
   785
	set result
sl@0
   786
    } \
sl@0
   787
    -setup {
sl@0
   788
	set chanList {}
sl@0
   789
	for {set i 0} {$i < 32} {incr i} {
sl@0
   790
	    lappend chanList [open /dev/null r]
sl@0
   791
	}
sl@0
   792
    } \
sl@0
   793
    -result {{} readable} \
sl@0
   794
    -cleanup {
sl@0
   795
	foreach chan $chanList {close $chan}
sl@0
   796
    }
sl@0
   797
sl@0
   798
# cleanup
sl@0
   799
foreach i [after info] {
sl@0
   800
    after cancel $i
sl@0
   801
}
sl@0
   802
::tcltest::cleanupTests
sl@0
   803
return