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

use strict;
use warnings;

use Test::More tests => 4;

package MyClass;

use Moose;

extends ('Test::Run::Base::PlugHelpers');

package main;

{
    my $obj = MyClass->new();
    eval
    {
        $obj->register_pluggable_helper(
            {
                id => "foo",
                base => "MyClass::Foo",
            },
        );
    };

    my $Err = $@;

    # TEST
    like ($Err, qr{\A\s*'?"collect_plugins_method" not specified},
        "Missing collect_plugins_method",
    );
}

{
    my $obj = MyClass->new();
    eval
    {
        $obj->register_pluggable_helper(
            {
                base => "MyClass::Sophie",
                collect_plugins_method => "collector",
            },
        );
    };

    my $Err = $@;

    # TEST
    like ($Err, qr{\A\s*'?"id" not specified},
        "Missing id",
    );
}

{
    my $obj = MyClass->new();
    eval
    {
        $obj->register_pluggable_helper(
            {
                id => "quux",
                collect_plugins_method => "collector",
            },
        );
    };

    my $Err = $@;

    # TEST
    like ($Err, qr{\A\s*'?"base" not specified},
        "Missing id",
    );
}

{
    my $obj = MyClass->new();
    $obj->register_pluggable_helper(
        {
            id => "foo",
            base => "MyClass::Foo",
            collect_plugins_method => "collector",
        },
    );

    my $result;
    eval
    {
        $result = $obj->create_pluggable_helper_obj({id => "unknown"});  
    };
    my $Err = $@;

    # TEST
    like ($Err, qr{\AUnknown Pluggable Helper ID},
        "Missing collect_plugins_method",
    );
}