1#!/usr/bin/perl -w
2use strict;
3use Test::More;
4use autodie;
5
6use constant SYSINIT => 1;
7
8if ($^O eq 'MSWin32') {
9    plan skip_all => "Can't send signals to own process on recent versions of Windows.";
10}
11
12if (not CORE::kill(0,$$)) {
13    plan skip_all => "Can't send signals to own process on this system.";
14}
15
16if (CORE::kill(0, SYSINIT)) {
17    plan skip_all => "Can unexpectedly signal process 1. Won't run as root.";
18}
19
20$SIG{HUP} = sub { }; # Ignore SIGHUP
21
22plan tests => 6;
23
24eval { my $rv = kill(0, $$); };
25is($@, '', "Signalling self is fine");
26
27eval { kill('HUP', $$); };
28is($@, '', "Kill with non-zero signal, in void context is ok");
29
30eval { kill(0, SYSINIT) };
31isa_ok($@, 'autodie::exception', "kill 0 should die if called in void context");
32
33eval { my $rv = kill(0, SYSINIT) };
34is($@, '', "kill 0 should never die if called in scalar context");
35
36eval { my $rv = kill('HUP', $$, SYSINIT) };
37isa_ok($@, 'autodie::exception', 'kill exception on single failure.');
38is($@->return, 1, "kill fails correctly on a 'true' failure.");
39