The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More tests => 25;
use Test::Fatal;

BEGIN {
    use_ok('MooseX::Daemonize::Pid::File');
}

{
    my $f = MooseX::Daemonize::Pid::File->new(
        file => [ 't', 'foo.pid' ]
    );
    isa_ok($f, 'MooseX::Daemonize::Pid::File');

    isa_ok($f->file, 'Path::Class::File');

    is($f->pid, $$, '... the PID is our current process');

    is(
        exception { $f->write },
        undef,
        '... writing the PID file',
    );

    is($f->file->slurp(chomp => 1), $f->pid, '... the PID in the file is correct');
    
    ok($f->is_running, '... it is running too');

    is(
        exception { $f->remove },
        undef,
        '... removing the PID file',
    );

    ok(!-e $f->file, '... the PID file does not exist anymore');
}

{
    my $f = MooseX::Daemonize::Pid::File->new(
        file => [ 't', 'bar.pid' ]
    );
    isa_ok($f, 'MooseX::Daemonize::Pid::File');

    isa_ok($f->file, 'Path::Class::File');

    is(
        exception { $f->write },
        undef,
        '... writing the PID file',
    );

    is($f->file->slurp(chomp => 1), $f->pid, '... the PID in the file is correct');
    is($f->pid, $$, '... the PID is our current process');
    
    ok($f->is_running, '... it is running too');    

    is(
        exception { $f->remove },
        undef,
        '... removing the PID file',
    );

    ok(!-e $f->file, '... the PID file does not exist anymore');
}

{
    my $PID = 9999;
    
    my $f = MooseX::Daemonize::Pid::File->new(
        file => [ 't', 'baz.pid' ],
        pid  => $PID,
    );
    isa_ok($f, 'MooseX::Daemonize::Pid::File');

    isa_ok($f->file, 'Path::Class::File');
    
    is($f->pid, $PID, '... the PID is our made up PID');

    is(
        exception { $f->write },
        undef,
        '... writing the PID file',
    );

    is($f->file->slurp(chomp => 1), $f->pid, '... the PID in the file is correct');

    ok(!$f->is_running, '... it is not running (cause we made the PID up)');

    is(
        exception { $f->remove },
        undef,
        '... removing the PID file',
    );

    ok(!-e $f->file, '... the PID file does not exist anymore');
}