File: 17_detach_start.t

package info (click to toggle)
libpoe-perl 2%3A1.3670-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,000 kB
  • ctags: 1,416
  • sloc: perl: 22,865; makefile: 9
file content (75 lines) | stat: -rw-r--r-- 1,800 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
# vim: ts=2 sw=2 sts=2 ft=perl expandtab
use strict;

$| = 1;

sub POE::Kernel::ASSERT_DEFAULT () { 1 }

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

use Test::More tests => 14;
use POE;

my $seq          = 0;
my $_child_fired = 0;

POE::Session->create(
  inline_states => {
    _start => sub {
      $_[KERNEL]->alias_set('Parent');
      is(++$seq, 1, "_start Parent");
      POE::Session->create(
        inline_states => {
          _start => sub {
            $_[KERNEL]->alias_set('Child');
            is(++$seq, 2, "_start Child");
          },
          _stop => sub {
            is(++$seq, 6, "_stop Child");
          },
        },
      );
      POE::Session->create(
        inline_states => {
          _start => sub {
            $_[KERNEL]->alias_set('Detached');
            is(++$seq, 4, "_start Detached");
            #diag "Detaching session 'Detached' from its parent";
            $_[KERNEL]->detach_myself;
          },
          _parent => sub {
            is(++$seq, 5, "_parent Detached");
            ok($_[ARG1]->isa("POE::Kernel"), "child parent is POE::Kernel");
          },
          _stop => sub {
            $seq++;
            ok($seq == 8 || $seq == 9, "_stop Detached");
          },
        },
      );
    },
    _child => sub {
      $seq++;
      ok($seq == 3 || $seq == 7, "_child Parent");
      $_child_fired++;
      ok(
        $_[KERNEL]->alias_list($_[ARG1]) ne 'Detached',
        "$_[STATE]($_[ARG0]) fired for " . $_[KERNEL]->alias_list($_[ARG1]->ID)
      );
    },
    _stop => sub {
      $seq++;
      ok($seq == 8 || $seq == 9, "_stop Parent");
    },
  },
);

POE::Kernel->run();

pass "_child not fired for session detached in _start" unless (
  $_child_fired != 2
);
pass "Stopped";