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

use strict;
use warnings;
use lib 't';

use Test::More tests => 36;

use MyClass;

do {
    my $c = MyClass->new();
    is $c->call('hello'), undef;
    is $c->run_hook('hello'), undef;

    $c->load_plugins({ module => 'Hello'}); # hashref.
    is $c->call('hello'), 'hello';
    is $c->run_hook('hello')->[0], 'hook hello';
    is scalar(@{ $c->run_hook('hello') }), 1;

    $c->load_plugins({ module => 'Hello'}); # hashref.
    is $c->call('hello'), 'hello';
    is $c->run_hook('hello')->[0], 'hook hello';
    is $c->run_hook('hello')->[1], 'hook hello';
    is scalar(@{ $c->run_hook('hello') }), 2;
};

do {
    my $c = MyClass->new();
    is $c->call('hello'), undef;
    is $c->run_hook('hello'), undef;

    $c->load_plugins({ module => 'Hello', config => {} }); # hashref.
    is $c->call('hello'), 'hello';
    is $c->run_hook('hello')->[0], 'hook hello';
    is scalar(@{ $c->run_hook('hello') }), 1;

    $c->load_plugins({ module => 'Hello', config => {} }); # hashref.
    is $c->call('hello'), 'hello';
    is $c->run_hook('hello')->[0], 'hook hello';
    is $c->run_hook('hello')->[1], 'hook hello';
    is scalar(@{ $c->run_hook('hello') }), 2;
};

do {
    my $c = MyClass->new();
    is $c->call('hello'), undef;
    is $c->run_hook('hello'), undef;

    $c->load_plugins('Hello'); # simple string
    is $c->call('hello'), 'hello';
    is $c->run_hook('hello')->[0], 'hook hello';
    is scalar(@{ $c->run_hook('hello') }), 1;

    $c->load_plugins('Hello'); # simple string
    is $c->call('hello'), 'hello';
    is $c->run_hook('hello')->[0], 'hook hello';
    is $c->run_hook('hello')->[1], undef;
    is scalar(@{ $c->run_hook('hello') }), 1;
};

do {
    my $c = MyClass->new();
    is $c->call('hello'), undef;
    is $c->run_hook('hello'), undef;

    $c->load_plugins('+MyClass::Plugin::Hello'); # full path
    is $c->call('hello'), 'hello';
    is $c->run_hook('hello')->[0], 'hook hello';
    is scalar(@{ $c->run_hook('hello') }), 1;

    $c->load_plugins('+MyClass::Plugin::Hello'); # full path
    is $c->call('hello'), 'hello';
    is $c->run_hook('hello')->[0], 'hook hello';
    is $c->run_hook('hello')->[1], undef;
    is scalar(@{ $c->run_hook('hello') }), 1;
};