The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

# Tests for Process::Probe

use strict;
BEGIN {
	$|  = 1;
	$^W = 1;
}

use Test::More tests => 17;
use File::Spec::Functions ':ALL';
use Process::Probe;

sub object {
	my $probe = Process::Probe->new( qw{
		Process
		t::lib::MyDelegatableProcess
		My::Class::Does::Not::Exist
	} );
	isa_ok( $probe, 'Process::Probe'        );
	isa_ok( $probe, 'Process::Delegatable'  );
	isa_ok( $probe, 'Process::Serializable' );
	isa_ok( $probe, 'Process'               );

	return $probe;
}





#####################################################################
# Test Process::Backgroundable

# Run inside our process
SCOPE: {
	my $probe = object();
	is_deeply( [ $probe->available ], [ ],   '->available ok'   );
	is_deeply( [ $probe->unavailable ], [ ], '->unavailable ok' );
	is_deeply(
		[ $probe->unknown ],
		[ qw{
			My::Class::Does::Not::Exist
			Process
			t::lib::MyDelegatableProcess
		} ],
		'->unknown ok',
	);
	$probe->run;
	is_deeply( [ $probe->available ], [ qw{
		Process
		t::lib::MyDelegatableProcess
	} ],   '->available ok'   );
	is_deeply( [ $probe->unavailable ], [ qw{
		My::Class::Does::Not::Exist
	} ], '->unavailable ok' );
	is_deeply( [ $probe->unknown ], [ ], '->unknown ok' );
}

# Run in a delegated process
SCOPE: {
	my $probe = object();
	SCOPE: {
		local @Process::Delegatable::PERLCMD = (
			@Process::Delegatable::PERLCMD,
			'-I' . catdir('blib', 'arch'),
			'-I' . catdir('blib', 'lib'),
		);
		$probe->delegate;
	}
	is_deeply( [ $probe->available ], [ qw{
		Process
		t::lib::MyDelegatableProcess
	} ],   '->available ok'   );
	is_deeply( [ $probe->unavailable ], [ qw{
		My::Class::Does::Not::Exist
	} ], '->unavailable ok' );
	is_deeply( [ $probe->unknown ], [ ], '->unknown ok' );
}