#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Test::Exception;
use Role::Tiny;
my $pkg;
BEGIN {
$pkg = 'Catmandu::Addable';
use_ok $pkg;
}
require_ok $pkg;
my $data = [];
{
package T::AddableWithoutAdd;
use Moo;
package T::Addable;
use Moo;
with $pkg;
sub add {
push @$data, $_[1];
}
package T::WithoutGenerator;
use Moo;
package T::WithGenerator;
use Moo;
sub generator { sub {} }
}
throws_ok { Role::Tiny->apply_role_to_package('T::AddableWithoutAdd', $pkg) } qr/missing add/;
my $a = T::Addable->new;
can_ok $a, 'add_many';
is_deeply $a->add({a=>'pony'}), {a=>'pony'}, 'add returns data added';
lives_ok { $a->add_many({}) } 'add_many takes a single hash ref';
lives_ok { $a->add_many([]) } 'add_many takes an array ref';
lives_ok { $a->add_many(sub {}) } 'add_many takes a generator code ref';
lives_ok { $a->add_many(T::WithGenerator->new) } 'add_many takes an object with a generator method';
throws_ok { $a->add_many(T::WithoutGenerator->new) } qr/should be able to generator/;
$data = [];
is $a->add_many([1,2,3]), 3, 'add_many returns count of data added';
is_deeply $data, [1,2,3], 'add_many passes all data to add';
done_testing 12;