File: 01-basic.t

package info (click to toggle)
libpoe-component-pubsub-perl 0.05-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 88 kB
  • sloc: perl: 363; makefile: 2
file content (127 lines) | stat: -r--r--r-- 2,962 bytes parent folder | download | duplicates (4)
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
use feature ':5.10';
use warnings;
use strict;

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

BEGIN
{
    use_ok('POE::Component::PubSub');
}

isa_ok(POE::Component::PubSub->new('pub_alias'), 'POE::Component::PubSub');

POE::Session->create
(
    'inline_states' =>
    {
        '_start' => sub
        {
            $_[KERNEL]->alias_set('runner');
            $_[KERNEL]->yield('continue');
        },
        
        'continue' => sub
        {
            make_publisher();
            make_subscriber();

            $_[KERNEL]->post('test1', 'fire');
        },
    }
);

POE::Kernel->run();

exit 0;

sub make_publisher()
{
    POE::Session->create
    (
        'inline_states' =>
        {
            '_start' => sub
            {
                $_[KERNEL]->alias_set('test1');
                $_[KERNEL]->yield('publisher');
            },
            
            'publisher' => sub
            {
                $_[KERNEL]->post('pub_alias', 'publish', 'foo');
                $_[KERNEL]->post('pub_alias', 'publish', 'bar', +PUBLISH_INPUT, 'input');
                pass('Published');
            },

            'fire' => sub
            {
                $_[KERNEL]->post('pub_alias', 'foo', 'ARGUMENT');
                pass('Event fired');
            },

            'input' => sub
            {
                pass('input event fired');

                if(defined($_[ARG0]))
                {
                    if($_[ARG0] == 1)
                    {
                        pass('input argument okay');
                        $_[KERNEL]->alias_remove('test1');
                        $_[KERNEL]->call('pub_alias', 'destroy');
                        $_[KERNEL]->yield('destroyed');
                        return;
                    }
                }
                fail('input argument not okay');
            },

            'destroyed' => sub
            {
                if(!$_[KERNEL]->post('pub_alias', 'nonexistant_events'))
                {
                    pass('destroy works');
                }
                else
                {
                    fail('destroy does not work appropriate');
                }
            }
        }
    );
}

sub make_subscriber()
{
    POE::Session->create
    (
        'inline_states' =>
        {
            '_start' => sub
            {
                $_[KERNEL]->alias_set('test2');
                $_[KERNEL]->yield('subscriber');
            },
            
            'subscriber' => sub
            {
                $_[KERNEL]->post('pub_alias', 'subscribe', 'foo', 'fired_event');
                pass('Subscribed');
            },

            'fired_event' => sub
            {
                pass('Event received');

                ok($_[ARG0] eq 'ARGUMENT', 'Argument passed successfully');
                
                $_[KERNEL]->post('pub_alias', 'bar', 1);
                $_[KERNEL]->alias_remove('test2');
            }
        }
    );
}