[25] | 1 | # -*- tcl -*- |
---|
| 2 | # |
---|
| 3 | # notify.test -- |
---|
| 4 | # |
---|
| 5 | # This file tests several functions in the file, 'generic/tclNotify.c'. |
---|
| 6 | # |
---|
| 7 | # This file contains a collection of tests for one or more of the Tcl |
---|
| 8 | # built-in commands. Sourcing this file into Tcl runs the tests and |
---|
| 9 | # generates output for errors. No output means no errors were found. |
---|
| 10 | # |
---|
| 11 | # Copyright (c) 2003 by Kevin B. Kenny. All rights reserved. |
---|
| 12 | # |
---|
| 13 | # See the file "license.terms" for information on usage and redistribution |
---|
| 14 | # of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
---|
| 15 | # |
---|
| 16 | # RCS: @(#) $Id: notify.test,v 1.3 2003/10/06 14:32:22 dgp Exp $ |
---|
| 17 | |
---|
| 18 | if {[lsearch [namespace children] ::tcltest] == -1} { |
---|
| 19 | package require tcltest 2 |
---|
| 20 | namespace import -force ::tcltest::* |
---|
| 21 | } |
---|
| 22 | |
---|
| 23 | testConstraint testevent [llength [info commands testevent]] |
---|
| 24 | |
---|
| 25 | test notify-1.1 {Tcl_QueueEvent and delivery of a single event} \ |
---|
| 26 | -constraints {testevent} \ |
---|
| 27 | -body { |
---|
| 28 | set delivered {} |
---|
| 29 | after 10 set done 1 |
---|
| 30 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 31 | vwait done |
---|
| 32 | set delivered |
---|
| 33 | } \ |
---|
| 34 | -result {one} |
---|
| 35 | |
---|
| 36 | test notify-1.2 {Tcl_QueueEvent and delivery of events in order} \ |
---|
| 37 | -constraints {testevent} \ |
---|
| 38 | -body { |
---|
| 39 | set delivered {} |
---|
| 40 | after 10 set done 1 |
---|
| 41 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 42 | testevent queue two tail {lappend delivered two; expr 1} |
---|
| 43 | testevent queue three tail {lappend delivered three; expr 1} |
---|
| 44 | vwait done |
---|
| 45 | set delivered |
---|
| 46 | } \ |
---|
| 47 | -result {one two three} |
---|
| 48 | |
---|
| 49 | test notify-1.3 {Tcl_QueueEvent at head} \ |
---|
| 50 | -constraints {testevent} \ |
---|
| 51 | -body { |
---|
| 52 | set delivered {} |
---|
| 53 | after 10 set done 1 |
---|
| 54 | testevent queue one head {lappend delivered one; expr 1} |
---|
| 55 | vwait done |
---|
| 56 | set delivered |
---|
| 57 | } \ |
---|
| 58 | -result one |
---|
| 59 | |
---|
| 60 | test notify-1.4 {Tcl_QueueEvent multiple events at head} \ |
---|
| 61 | -constraints {testevent} \ |
---|
| 62 | -body { |
---|
| 63 | set delivered {} |
---|
| 64 | after 10 set done 1 |
---|
| 65 | testevent queue one head {lappend delivered one; expr 1} |
---|
| 66 | testevent queue two head {lappend delivered two; expr 1} |
---|
| 67 | testevent queue three head {lappend delivered three; expr 1} |
---|
| 68 | vwait done |
---|
| 69 | set delivered |
---|
| 70 | } \ |
---|
| 71 | -result {three two one} |
---|
| 72 | |
---|
| 73 | test notify-1.5 {Tcl_QueueEvent marker event into an empty queue} \ |
---|
| 74 | -constraints {testevent} \ |
---|
| 75 | -body { |
---|
| 76 | set delivered {} |
---|
| 77 | after 10 set done 1 |
---|
| 78 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 79 | vwait done |
---|
| 80 | set delivered |
---|
| 81 | } \ |
---|
| 82 | -result one |
---|
| 83 | |
---|
| 84 | test notify-1.6 {Tcl_QueueEvent first marker event in a nonempty queue} \ |
---|
| 85 | -constraints {testevent} \ |
---|
| 86 | -body { |
---|
| 87 | set delivered {} |
---|
| 88 | after 10 set done 1 |
---|
| 89 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 90 | testevent queue two mark {lappend delivered two; expr 1} |
---|
| 91 | testevent queue three head {lappend delivered three; expr 1} |
---|
| 92 | vwait done |
---|
| 93 | set delivered |
---|
| 94 | } \ |
---|
| 95 | -result {three two one} |
---|
| 96 | |
---|
| 97 | test notify-1.7 {Tcl_QueueEvent second marker event} \ |
---|
| 98 | -constraints {testevent} \ |
---|
| 99 | -body { |
---|
| 100 | set delivered {} |
---|
| 101 | after 10 set done 1 |
---|
| 102 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 103 | testevent queue two mark {lappend delivered two; expr 1} |
---|
| 104 | vwait done |
---|
| 105 | set delivered |
---|
| 106 | } \ |
---|
| 107 | -result {one two} |
---|
| 108 | |
---|
| 109 | test notify-1.8 {Tcl_QueueEvent preexisting event following second marker} \ |
---|
| 110 | -constraints {testevent} \ |
---|
| 111 | -body { |
---|
| 112 | set delivered {} |
---|
| 113 | after 10 set done 1 |
---|
| 114 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 115 | testevent queue two tail {lappend delivered two; expr 1} |
---|
| 116 | testevent queue three mark {lappend delivered three; expr 1} |
---|
| 117 | vwait done |
---|
| 118 | set delivered |
---|
| 119 | } \ |
---|
| 120 | -result {one three two} |
---|
| 121 | |
---|
| 122 | test notify-2.1 {remove sole element, don't replace } \ |
---|
| 123 | -constraints {testevent} \ |
---|
| 124 | -body { |
---|
| 125 | set delivered {} |
---|
| 126 | after 10 set done 1 |
---|
| 127 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 128 | testevent delete one |
---|
| 129 | vwait done |
---|
| 130 | set delivered |
---|
| 131 | } \ |
---|
| 132 | -result {} |
---|
| 133 | |
---|
| 134 | test notify-2.2 {remove and replace sole element} \ |
---|
| 135 | -constraints {testevent} \ |
---|
| 136 | -body { |
---|
| 137 | set delivered {} |
---|
| 138 | after 10 set done 1 |
---|
| 139 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 140 | testevent delete one |
---|
| 141 | testevent queue two tail {lappend delivered two; expr 1} |
---|
| 142 | vwait done |
---|
| 143 | set delivered |
---|
| 144 | } \ |
---|
| 145 | -result two |
---|
| 146 | |
---|
| 147 | test notify-2.3 {remove first element} \ |
---|
| 148 | -constraints {testevent} \ |
---|
| 149 | -body { |
---|
| 150 | set delivered {} |
---|
| 151 | after 10 set done 1 |
---|
| 152 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 153 | testevent queue two tail {lappend delivered two; expr 1} |
---|
| 154 | testevent delete one |
---|
| 155 | vwait done |
---|
| 156 | set delivered |
---|
| 157 | } \ |
---|
| 158 | -result {two} |
---|
| 159 | |
---|
| 160 | test notify-2.4 {remove and replace first element} \ |
---|
| 161 | -constraints {testevent} \ |
---|
| 162 | -body { |
---|
| 163 | set delivered {} |
---|
| 164 | after 10 set done 1 |
---|
| 165 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 166 | testevent queue two tail {lappend delivered two; expr 1} |
---|
| 167 | testevent delete one |
---|
| 168 | testevent queue three head {lappend delivered three; expr 1}; |
---|
| 169 | vwait done |
---|
| 170 | set delivered |
---|
| 171 | } \ |
---|
| 172 | -result {three two} |
---|
| 173 | |
---|
| 174 | test notify-2.5 {remove last element} \ |
---|
| 175 | -constraints {testevent} \ |
---|
| 176 | -body { |
---|
| 177 | set delivered {} |
---|
| 178 | after 10 set done 1 |
---|
| 179 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 180 | testevent queue two tail {lappend delivered two; expr 1} |
---|
| 181 | testevent delete two |
---|
| 182 | vwait done |
---|
| 183 | set delivered |
---|
| 184 | } \ |
---|
| 185 | -result {one} |
---|
| 186 | |
---|
| 187 | |
---|
| 188 | test notify-2.6 {remove and replace last element} \ |
---|
| 189 | -constraints {testevent} \ |
---|
| 190 | -body { |
---|
| 191 | set delivered {} |
---|
| 192 | after 10 set done 1 |
---|
| 193 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 194 | testevent queue two tail {lappend delivered two; expr 1} |
---|
| 195 | testevent delete two |
---|
| 196 | testevent queue three tail {lappend delivered three; expr 1}; |
---|
| 197 | vwait done |
---|
| 198 | set delivered |
---|
| 199 | } \ |
---|
| 200 | -result {one three} |
---|
| 201 | |
---|
| 202 | test notify-2.7 {remove a middle element} \ |
---|
| 203 | -constraints {testevent} \ |
---|
| 204 | -body { |
---|
| 205 | set delivered {} |
---|
| 206 | after 10 set done 1 |
---|
| 207 | testevent queue one tail {lappend delivered one; expr 1} |
---|
| 208 | testevent queue two tail {lappend delivered two; expr 1} |
---|
| 209 | testevent queue three tail {lappend delivered three; expr 1} |
---|
| 210 | testevent delete two |
---|
| 211 | vwait done |
---|
| 212 | set delivered |
---|
| 213 | } \ |
---|
| 214 | -result {one three} |
---|
| 215 | |
---|
| 216 | test notify-2.8 {remove a marker event that's the sole event in the queue} \ |
---|
| 217 | -constraints {testevent} \ |
---|
| 218 | -body { |
---|
| 219 | set delivered {} |
---|
| 220 | after 10 set done 1 |
---|
| 221 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 222 | testevent delete one |
---|
| 223 | vwait done |
---|
| 224 | set delivered |
---|
| 225 | } \ |
---|
| 226 | -result {} |
---|
| 227 | |
---|
| 228 | test notify-2.9 {remove and replace a marker event that's the sole event} \ |
---|
| 229 | -constraints {testevent} \ |
---|
| 230 | -body { |
---|
| 231 | set delivered {} |
---|
| 232 | after 10 set done 1 |
---|
| 233 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 234 | testevent delete one |
---|
| 235 | testevent queue two mark {lappend delivered two; expr 1} |
---|
| 236 | vwait done |
---|
| 237 | set delivered |
---|
| 238 | } \ |
---|
| 239 | -result two |
---|
| 240 | |
---|
| 241 | test notify-2.10 {remove marker event from head} \ |
---|
| 242 | -constraints {testevent} \ |
---|
| 243 | -body { |
---|
| 244 | set delivered {} |
---|
| 245 | after 10 set done 1 |
---|
| 246 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 247 | testevent queue two mark {lappend delivered two; expr 1} |
---|
| 248 | testevent delete one |
---|
| 249 | vwait done |
---|
| 250 | set delivered |
---|
| 251 | } \ |
---|
| 252 | -result two |
---|
| 253 | |
---|
| 254 | test notify-2.11 {remove and replace marker event at head} \ |
---|
| 255 | -constraints {testevent} \ |
---|
| 256 | -body { |
---|
| 257 | set delivered {} |
---|
| 258 | after 10 set done 1 |
---|
| 259 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 260 | testevent queue two tail {lappend delivered two; expr 1} |
---|
| 261 | testevent delete one |
---|
| 262 | testevent queue three mark {lappend delivered three; expr 1} |
---|
| 263 | vwait done |
---|
| 264 | set delivered |
---|
| 265 | } \ |
---|
| 266 | -result {three two} |
---|
| 267 | |
---|
| 268 | test notify-2.12 {remove marker event at tail} \ |
---|
| 269 | -constraints {testevent} \ |
---|
| 270 | -body { |
---|
| 271 | set delivered {} |
---|
| 272 | after 10 set done 1 |
---|
| 273 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 274 | testevent queue two mark {lappend delivered two; expr 1} |
---|
| 275 | testevent delete two |
---|
| 276 | vwait done |
---|
| 277 | set delivered |
---|
| 278 | } \ |
---|
| 279 | -result {one} |
---|
| 280 | |
---|
| 281 | test notify-2.13 {remove and replace marker event at tail} \ |
---|
| 282 | -constraints {testevent} \ |
---|
| 283 | -body { |
---|
| 284 | set delivered {} |
---|
| 285 | after 10 set done 1 |
---|
| 286 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 287 | testevent queue two mark {lappend delivered two; expr 1} |
---|
| 288 | testevent delete two |
---|
| 289 | testevent queue three mark {lappend delivered three; expr 1} |
---|
| 290 | vwait done |
---|
| 291 | set delivered |
---|
| 292 | } \ |
---|
| 293 | -result {one three} |
---|
| 294 | |
---|
| 295 | test notify-2.14 {remove marker event from middle} \ |
---|
| 296 | -constraints {testevent} \ |
---|
| 297 | -body { |
---|
| 298 | set delivered {} |
---|
| 299 | after 10 set done 1 |
---|
| 300 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 301 | testevent queue two mark {lappend delivered two; expr 1} |
---|
| 302 | testevent queue three mark {lappend delivered three; expr 1} |
---|
| 303 | testevent delete two |
---|
| 304 | vwait done |
---|
| 305 | set delivered |
---|
| 306 | } \ |
---|
| 307 | -result {one three} |
---|
| 308 | |
---|
| 309 | test notify-2.15 {remove and replace marker event at middle} \ |
---|
| 310 | -constraints {testevent} \ |
---|
| 311 | -body { |
---|
| 312 | set delivered {} |
---|
| 313 | after 10 set done 1 |
---|
| 314 | testevent queue one mark {lappend delivered one; expr 1} |
---|
| 315 | testevent queue two mark {lappend delivered two; expr 1} |
---|
| 316 | testevent queue three tail {lappend delivered three; expr 1} |
---|
| 317 | testevent delete two |
---|
| 318 | testevent queue four mark {lappend delivered four; expr 1}; |
---|
| 319 | vwait done |
---|
| 320 | set delivered |
---|
| 321 | } \ |
---|
| 322 | -result {one four three} |
---|
| 323 | |
---|
| 324 | # cleanup |
---|
| 325 | ::tcltest::cleanupTests |
---|
| 326 | return |
---|