File: 15_kernel_internal.t

package info (click to toggle)
libpoe-perl 2%3A1.3670-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 1,996 kB
  • ctags: 1,416
  • sloc: perl: 22,865; makefile: 9
file content (107 lines) | stat: -rw-r--r-- 3,317 bytes parent folder | download | duplicates (8)
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
#!/usr/bin/perl -w
# vim: ts=2 sw=2 filetype=perl expandtab

# This file contains tests for the _internal_ POE::Kernel interface
# i.e. the interface exposed to POE::Session, POE::Resources::* etc

use strict;

# We manipulate internals directly, so consistency is not always
# assured.
sub POE::Kernel::ASSERT_DEFAULT () { 0 }

BEGIN {
  package POE::Kernel;
  use constant TRACE_DEFAULT => exists($INC{'Devel/Cover.pm'});
}

# Tests _trap_death and _release_death indirectly (as well as directly when we
# test _croak etc) by checking that POE doesn't leave $SIG{__WARN__}
# and $SIG{__DIE__} altered.
my ($initial__die__, $initial__warn__, $last_exception);
BEGIN {
  *CORE::GLOBAL::die = sub {
    $last_exception = "die: @_";
    CORE::die(@_);
  };
  *CORE::GLOBAL::warn = sub {
    $last_exception = "warn: @_";
    CORE::warn(@_);
  };

  # reload Carp so it sees the CORE::GLOBAL overrides
  delete $INC{"Carp.pm"};
  require Symbol;
  Symbol::delete_package("Carp");
  require Carp;
}

use Test::More tests => 12;

BEGIN { use_ok("POE::Kernel"); }

# The expected size of the queue when the kernel is idle (without any
# user generated/requested events)
{
  my $base_size = $poe_kernel->_idle_queue_size();
  $poe_kernel->_idle_queue_grow();
  is( $poe_kernel->_idle_queue_size(), $base_size + 1,
    "growing idle queue");
  $poe_kernel->_idle_queue_grow();
  is( $poe_kernel->_idle_queue_size(), $base_size + 2,
    "growing idle queue (2)");
  $poe_kernel->_idle_queue_shrink();
  is( $poe_kernel->_idle_queue_size(), $base_size + 1,
    "shrinking idle queue");
  $poe_kernel->_idle_queue_shrink();
  is( $poe_kernel->_idle_queue_size(), $base_size,
    "shrinking idle queue (2)");
}

{
  $last_exception = '';
  eval { POE::Kernel::_trap("testing _trap") };
  ok($last_exception =~ /^die:/, "_trap confessed");
}
{
  $last_exception = '';
  open(SAVE_STDERR, ">&STDERR") or die $!; close(STDERR) or die $!;
  eval { POE::Kernel::_croak("testing _croak") };
  open(STDERR, ">&SAVE_STDERR") or die $!; close(SAVE_STDERR) or die $!;
  ok($last_exception =~ /^die:/, "_croak croaked");
}
{
  $last_exception = '';
  open(SAVE_STDERR, ">&STDERR") or die $!; close(STDERR) or die $!;
  eval { POE::Kernel::_confess("testing _confess") };
  open(STDERR, ">&SAVE_STDERR") or die $!; close(SAVE_STDERR) or die $!;
  ok($last_exception =~ /^die:/, "_confess confessed");
}
{
  $last_exception = '';
  open(SAVE_STDERR, ">&STDERR") or die $!; close(STDERR) or die $!;
  eval { POE::Kernel::_cluck("testing _cluck") };
  open(STDERR, ">&SAVE_STDERR") or die $!; close(SAVE_STDERR) or die $!;
  ok($last_exception =~ /^warn:/, "_cluck clucked");
}
{
  $last_exception = '';
  open(SAVE_STDERR, ">&STDERR") or die $!; close(STDERR) or die $!;
  eval { POE::Kernel::_carp("testing _carp") };
  open(STDERR, ">&SAVE_STDERR") or die $!; close(SAVE_STDERR) or die $!;
  ok($last_exception =~ /^warn:/, "_carp carped");
}
{
  $last_exception = '';
  open(SAVE_STDERR, ">&STDERR") or die $!; close(STDERR) or die $!;
  eval { POE::Kernel::_warn("testing _warn") };
  open(STDERR, ">&SAVE_STDERR") or die $!; close(SAVE_STDERR) or die $!;
  ok($last_exception =~ /^warn:/, "_warn warned");
}
{
  $last_exception = '';
  eval { POE::Kernel::_die("testing _die") };
  ok($last_exception =~ /^die:/, "_die died");
}

exit 0;