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;
use Test::Exception;

my ($mn, $s) = qw/
    Gearman::ResponseParser
    foo
    /;

use_ok($mn);
my $m = new_ok($mn, [source => $s]);

throws_ok { $mn->new(source => $s, $s => 1, bla => 1) }
qr/^unsupported arguments/, "caught die of on arguments check";

can_ok(
    $m, qw/
        eof
        on_error
        on_packet
        parse_data
        parse_sock
        reset
        source
        /
);

foreach (qw/eof on_packet on_error/) {
    throws_ok { $m->$_ } qr/^SUBCLASSES SHOULD OVERRIDE THIS/,
        "caught die off in $_";
}

is($m->source, $s, "source");

subtest "reset", sub {
    $m->{$_} = $s for qw/
        header
        pkt
        /;

    $m->reset;

    is($m->{header}, '',    "header");
    is($m->{pkt},    undef, "pkt");
};

done_testing();