The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Test::Siebel::Srvrmgr::Daemon::ActionFactory;

use Test::Most;
use Siebel::Srvrmgr::ListParser;
use base 'Test::Siebel::Srvrmgr';

sub my_interface : Test(+1) {

    my $test = shift;

    can_ok( $test->class(), qw(create) );

}

sub create_instances : Tests(+9) {

    my $test = shift;

    my @available = (
        'Dummy',         'Dumper',     'ListCompDef',     'ListComps',
        'ListCompTypes', 'ListParams', 'LoadPreferences'
    );

    foreach my $class (@available) {

        my $full_name = 'Siebel::Srvrmgr::Daemon::Action::' . $class;

        isa_ok(
            $test->class()->create(
                $class,
                {
                    parser => Siebel::Srvrmgr::ListParser->new(),
                    params => ['somefile']
                }
            ),
            $full_name,
"create method returns an $full_name instance with the '$class' string as parameter"
        );

    }

    dies_ok( sub { $test->class()->create('CheckComps') },
        'expected to die since CheckComps required additional parameters with Roles applied' );

    dies_ok(
        sub { $test->class()->create('FooBar') },
'create method raises an exception trying to instantiate an object from a invalid class'
    );

}

1;