-
Notifications
You must be signed in to change notification settings - Fork 26
/
11_assert_usage.t
453 lines (377 loc) · 11.1 KB
/
11_assert_usage.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
#!/usr/bin/perl -w
# vim: ts=2 sw=2 filetype=perl expandtab
# Test the ASSERT_USAGE code in POE::Kernel. This involves a lot of
# dying.
use strict;
use lib qw(./mylib);
use Test::More tests => 76;
use Symbol qw(gensym);
sub POE::Kernel::ASSERT_USAGE () { 1 }
#sub POE::Kernel::TRACE_REFCNT () { 1 }
BEGIN {
package POE::Kernel;
use constant TRACE_DEFAULT => exists($INC{'Devel/Cover.pm'});
}
BEGIN { use_ok("POE") }
# Disable any "didn't call run" warnings. We create a bunch of
# sessions, but we're not testing whether they run. Furthermore, they
# may leave alarms or filehandles selected, which could cause the
# program to hang if we DO try to run it.
POE::Kernel->run();
# Test usage outside a running session.
foreach my $method (
qw(
alarm alarm_add alarm_adjust alarm_remove alarm_remove_all
alarm_set delay delay_add delay_adjust delay_set detach_child
detach_myself select select_expedite select_pause_read
select_pause_write select_read select_resume_read
select_resume_write select_write sig state yield
)
) {
my $message = "must call $method() from a running session";
eval { $poe_kernel->$method() };
ok( $@ && $@ =~ /\Q$message/, $message );
}
# Signal functions.
POE::Session->create(
inline_states => {
_start => sub {
eval { $poe_kernel->sig(undef) };
ok($@ && $@ =~ /undefined signal in sig/, "undefined signal assertion");
eval { $poe_kernel->signal(undef) };
ok(
$@ && $@ =~ /undefined destination in signal/,
"undefined destination in signal"
);
eval { $poe_kernel->signal($poe_kernel, undef) };
ok(
$@ && $@ =~ /undefined signal in signal/,
"undefined signal in signal"
);
}
}
);
# Internal _dispatch_event() function.
# TODO - Determine whether it needs ASSERT_USAGE checks.
# Post, yield, call.
POE::Session->create(
inline_states => {
_start => sub {
eval { $poe_kernel->post(undef) };
ok(
$@ && $@ =~ /destination is undefined in post/,
"destination undefined in post"
);
eval { $poe_kernel->post($poe_kernel, undef) };
ok(
$@ && $@ =~ /event is undefined in post/,
"event undefined in post"
);
eval { $poe_kernel->yield(undef) };
ok(
$@ && $@ =~ /event name is undefined in yield/,
"event undefined in yield"
);
eval { $poe_kernel->call(undef) };
ok(
$@ && $@ =~ /destination is undefined in call/,
"destination undefined in call"
);
eval { $poe_kernel->call($poe_kernel, undef) };
ok(
$@ && $@ =~ /event is undefined in call/,
"event undefined in call"
);
}
}
);
# Classic alarms.
POE::Session->create(
inline_states => {
_start => sub {
eval { $poe_kernel->alarm(undef) };
ok(
$@ && $@ =~ /event name is undefined in alarm/,
"event undefined in alarm"
);
eval { $poe_kernel->alarm_add(undef) };
ok(
$@ && $@ =~ /undefined event name in alarm_add/,
"event undefined in alarm_add"
);
eval { $poe_kernel->alarm_add(moo => undef) };
ok(
$@ && $@ =~ /undefined time in alarm_add/,
"time undefined in alarm_add"
);
eval { $poe_kernel->delay(undef) };
ok(
$@ && $@ =~ /undefined event name in delay/,
"event undefined in delay"
);
eval { $poe_kernel->delay_add(undef) };
ok(
$@ && $@ =~ /undefined event name in delay_add/,
"event undefined in delay_add"
);
eval { $poe_kernel->delay_add(moo => undef) };
ok(
$@ && $@ =~ /undefined time in delay_add/,
"time undefined in delay_add"
);
}
}
);
# New alarms.
POE::Session->create(
inline_states => {
_start => sub {
eval { $poe_kernel->alarm_set(undef) };
ok(
$@ && $@ =~ /undefined event name in alarm_set/,
"event undefined in alarm_set"
);
eval { $poe_kernel->alarm_set(moo => undef) };
ok(
$@ && $@ =~ /undefined time in alarm_set/,
"time undefined in alarm_set"
);
eval { $poe_kernel->alarm_remove(undef) };
ok(
$@ && $@ =~ /undefined alarm id in alarm_remove/,
"alarm ID undefined in alarm_remove"
);
eval { $poe_kernel->alarm_adjust(undef) };
ok(
$@ && $@ =~ /undefined alarm id in alarm_adjust/,
"alarm ID undefined in alarm_adjust"
);
eval { $poe_kernel->alarm_adjust(moo => undef) };
ok(
$@ && $@ =~ /undefined alarm delta in alarm_adjust/,
"alarm time undefined in alarm_adjust"
);
eval { $poe_kernel->delay_set(undef) };
ok(
$@ && $@ =~ /undefined event name in delay_set/,
"event name undefined in delay_set"
);
eval { $poe_kernel->delay_set(moo => undef) };
ok(
$@ && $@ =~ /undefined seconds in delay_set/,
"seconds undefined in delay_set"
);
eval { $poe_kernel->delay_adjust(undef) };
ok(
$@ && $@ =~ /undefined delay id in delay_adjust/,
"delay ID undefined in delay_adjust"
);
eval { $poe_kernel->delay_adjust(moo => undef) };
ok(
$@ && $@ =~ /undefined delay seconds in delay_adjust/,
"delay seconds undefined in delay_adjust"
);
}
}
);
POE::Session->create(
inline_states => {
_start => sub {
$_[KERNEL]->alias_set("moo");
}
}
);
POE::Session->create(
inline_states => {
_start => sub {
eval { $_[KERNEL]->alias_set("moo") };
ok(
$@ && $@ =~ /alias 'moo' is in use by another session/,
"alias already in use"
);
eval { $_[KERNEL]->alias_remove("moo") };
ok(
$@ && $@ =~ /alias does not belong to current session/,
"alias belongs to another session"
);
}
}
);
POE::Session->create(
inline_states => {
_start => sub {
eval { $poe_kernel->alias_remove("narf") };
ok(
$@ && $@ =~ /alias does not exist/,
"alias does not exist"
);
}
}
);
# Filehandle I/O.
POE::Session->create(
inline_states => {
_start => sub {
my $fh = gensym();
eval { $poe_kernel->select(undef) };
ok(
$@ && $@ =~ /undefined filehandle in select/,
"filehandle undefined in select"
);
eval { $poe_kernel->select($fh) };
ok(
$@ && $@ =~ /invalid filehandle in select/,
"filehandle closed in select"
);
eval { $poe_kernel->select_read(undef) };
ok(
$@ && $@ =~ /undefined filehandle in select_read/,
"filehandle undefined in select_read"
);
eval { $poe_kernel->select_read($fh) };
ok(
$@ && $@ =~ /invalid filehandle in select_read/,
"filehandle closed in select_read"
);
eval { $poe_kernel->select_write(undef) };
ok(
$@ && $@ =~ /undefined filehandle in select_write/,
"filehandle undefined in select_write"
);
eval { $poe_kernel->select_write($fh) };
ok(
$@ && $@ =~ /invalid filehandle in select_write/,
"filehandle closed in select_write"
);
eval { $poe_kernel->select_expedite(undef) };
ok(
$@ && $@ =~ /undefined filehandle in select_expedite/,
"filehandle undefined in select_expedite"
);
eval { $poe_kernel->select_expedite($fh) };
ok(
$@ && $@ =~ /invalid filehandle in select_expedite/,
"filehandle closed in select_expedite"
);
eval { $poe_kernel->select_pause_write(undef) };
ok(
$@ && $@ =~ /undefined filehandle in select_pause_write/,
"filehandle undefined in select_pause_write"
);
eval { $poe_kernel->select_pause_write($fh) };
ok(
$@ && $@ =~ /invalid filehandle in select_pause_write/,
"filehandle closed in select_pause_write"
);
eval { $poe_kernel->select_resume_write(undef) };
ok(
$@ && $@ =~ /undefined filehandle in select_resume_write/,
"filehandle undefined in select_resume_write"
);
eval { $poe_kernel->select_resume_write($fh) };
ok(
$@ && $@ =~ /invalid filehandle in select_resume_write/,
"filehandle closed in select_resume_write"
);
eval { $poe_kernel->select_pause_read(undef) };
ok(
$@ && $@ =~ /undefined filehandle in select_pause_read/,
"filehandle undefined in select_pause_read"
);
eval { $poe_kernel->select_pause_read($fh) };
ok(
$@ && $@ =~ /invalid filehandle in select_pause_read/,
"filehandle closed in select_pause_read"
);
eval { $poe_kernel->select_resume_read(undef) };
ok(
$@ && $@ =~ /undefined filehandle in select_resume_read/,
"filehandle undefined in select_resume_read"
);
eval { $poe_kernel->select_resume_read($fh) };
ok(
$@ && $@ =~ /invalid filehandle in select_resume_read/,
"filehandle closed in select_resume_read"
);
}
}
);
# Aliases.
POE::Session->create(
inline_states => {
_start => sub {
eval { $poe_kernel->alias_set(undef) };
ok(
$@ && $@ =~ /undefined alias in alias_set/,
"undefined alias in alias_set"
);
eval { $poe_kernel->alias_remove(undef) };
ok(
$@ && $@ =~ /undefined alias in alias_remove/,
"undefined alias in alias_remove"
);
eval { $poe_kernel->alias_resolve(undef) };
ok(
$@ && $@ =~ /undefined alias in alias_resolve/,
"undefined alias in alias_resolve"
);
}
}
);
# Kernel and session IDs.
POE::Session->create(
inline_states => {
_start => sub {
eval { $poe_kernel->ID_id_to_session(undef) };
ok(
$@ && $@ =~ /undefined ID in ID_id_to_session/,
"undefined ID in ID_id_to_session"
);
eval { $poe_kernel->ID_session_to_id(undef) };
ok(
$@ && $@ =~ /undefined session in ID_session_to_id/,
"undefined session in ID_session_to_id"
);
}
}
);
# Extra references.
POE::Session->create(
inline_states => {
_start => sub {
eval { $poe_kernel->refcount_increment(undef) };
ok(
$@ && $@ =~ /undefined session ID in refcount_increment/,
"undefined session ID in refcount_increment"
);
eval { $poe_kernel->refcount_increment("moo", undef) };
ok(
$@ && $@ =~ /undefined reference count tag in refcount_increment/,
"undefined tag in refcount_increment"
);
eval { $poe_kernel->refcount_decrement(undef) };
ok(
$@ && $@ =~ /undefined session ID in refcount_decrement/,
"undefined session ID in refcount_decrement"
);
eval { $poe_kernel->refcount_decrement("moo", undef) };
ok(
$@ && $@ =~ /undefined reference count tag in refcount_decrement/,
"undefined tag in refcount_decrement"
);
}
}
);
# Event handlers.
POE::Session->create(
inline_states => {
_start => sub {
eval { $poe_kernel->state(undef) };
ok(
$@ && $@ =~ /undefined event name in state/,
"undefined event name in state"
);
}
}
);
exit 0;