#!perl use strict; use warnings; use Test::Exception; use Test::More tests => 8; use lib 't/'; use LocalTest; use IPC::Concurrency::DBI::Application; can_ok( 'IPC::Concurrency::DBI::Application', 'new', ); my $dbh = LocalTest::ok_database_handle(); my $tests = [ { test_name => 'Instantiate an application by name.', new_args => { database_handle => $dbh, name => 'cron_script.pl', }, expected_result => 'success', }, { test_name => 'Instantiate an application by ID.', new_args => { database_handle => $dbh, id => 1, }, expected_result => 'success', }, { test_name => 'Instantiate an application with a missing database handle.', new_args => { id => 1, }, expected_result => 'failure', }, { test_name => 'Instantiate an application with neither a name nor an ID.', new_args => { database_handle => $dbh, }, expected_result => 'failure', }, { test_name => 'Instantiate an application with an invalid name.', new_args => { database_handle => $dbh, name => 'cron_script_invalid.pl', }, expected_result => 'failure', }, { test_name => 'Instantiate an application with an invalid ID.', new_args => { database_handle => $dbh, id => 100000000, }, expected_result => 'failure', }, ]; foreach my $test ( @$tests ) { subtest( $test->{'test_name'}, sub { plan( tests => 2 ); my $application; my $test_sub = sub { $application = IPC::Concurrency::DBI::Application->new( %{ $test->{'new_args'} }, ); }; if ( $test->{'expected_result'} eq 'success' ) { lives_ok( sub { $test_sub->(); }, 'Instantiate application.', ); isa_ok( $application, 'IPC::Concurrency::DBI::Application', 'Return value of new()', ); } else { dies_ok( sub { $test_sub->(); }, 'Instantiate application.', ); is( $application, undef, 'No return value.', ); } } ); }