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 => 3;

use Test::Run::Base;

package MyTestRun::Plug::Iface;

package MyTestRun::Pluggable;

use Moose;
extends("Test::Run::Base::PlugHelpers");

use MRO::Compat;

sub BUILD
{
    my $self = shift;

    $self->register_pluggable_helper(
        {
            id => "myplug",
            base => "MyTestRun::Plug::Base",
            collect_plugins_method => "_my_plugin_collector",
        }
    );
}

sub _my_plugin_collector
{
    return
    [
        "MyTestRun::Plug::P::One",
        "MyTestRun::Plug::P::Two",
    ];
}

sub helpers_base_namespace
{
    my $self = shift;

    return "MyTestRun::Pluggable::Helpers";
}

package main;

use lib "./t/lib";

{
    my $main_obj = MyTestRun::Pluggable->new({});

    my $obj = $main_obj->create_pluggable_helper_obj(
        {
            id => "myplug",
            args =>
            {
                first => "Aharon",
                'last' => "Smith",
            },
        }
    );

    # TEST
    isa_ok ($obj, $main_obj->calc_helpers_namespace("myplug"));

    # TEST
    is ($obj->my_calc_first(),
        "First is {{{Aharon}}}",
    );

    # TEST
    is ($obj->my_calc_last(),
        "If you want the last name, it is: Smith"
    );
}