use
POE
qw(Filter::Line)
;
my
(
$temp_fh
,
$temp_file
) = tempfile(
UNLINK
=> 1);
my
$inode
= (
stat
$temp_fh
)[1];
$temp_fh
->autoflush(1);
print
$temp_fh
"moocow\n"
;
my
$bot
= POE::Component::IRC->spawn(
plugin_debug
=> 1 );
POE::Session->create(
package_states
=> [
main
=> [
qw(_start irc_plugin_add irc_plugin_del irc_tail_input)
],
],
);
$poe_kernel
->run();
sub
_start {
$bot
->yield(
register
=>
'all'
);
my
$plugin
= POE::Component::IRC::Plugin::FollowTail->new(
filename
=>
$temp_file
,
filter
=> POE::Filter::Line->new(),
);
isa_ok(
$plugin
,
'POE::Component::IRC::Plugin::FollowTail'
);
if
(!
$bot
->plugin_add(
'TestPlugin'
,
$plugin
) ) {
fail(
'plugin_add failed'
);
$bot
->yield(
'shutdown'
);
}
}
sub
irc_plugin_add {
my
(
$name
,
$plugin
) =
@_
[ARG0, ARG1];
return
if
$name
ne
'TestPlugin'
;
isa_ok(
$plugin
,
'POE::Component::IRC::Plugin::FollowTail'
);
print
$temp_fh
"Cows go moo, yes they do\n"
;
}
sub
irc_tail_input {
my
(
$sender
,
$filename
,
$input
) =
@_
[SENDER, ARG0, ARG1];
my
$irc
=
$sender
->get_heap();
SKIP: {
skip
"No inodes on Windows"
, 1
if
$^O eq
'MSWin32'
;
is((
stat
$filename
)[1],
$inode
,
'Filename is okay'
);
}
is(
$input
,
'Cows go moo, yes they do'
,
'Cows go moo!'
);
if
(!
$irc
->plugin_del(
'TestPlugin'
)) {
fail(
'plugin_del failed'
);
$irc
->yield(
'shutdown'
);
}
}
sub
irc_plugin_del {
my
(
$sender
,
$name
,
$plugin
) =
@_
[SENDER, ARG0, ARG1];
my
$irc
=
$sender
->get_heap();
return
if
$name
ne
'TestPlugin'
;
isa_ok(
$plugin
,
'POE::Component::IRC::Plugin::FollowTail'
);
$irc
->yield(
'shutdown'
);
}