#!perl -T use Test::More tests => 10; BEGIN { use_ok( 'MooseX::Recipe::Builder' ); } { { package Pie; use Moose; use Moose::Util::TypeConstraints; has q{ingredients} => (is => q{ro}, isa => q{ArrayRef}, default => sub { [] }); no Moose; 1; } { package Apple; use Moose::Role; around q{ingredients} => sub { my $next = shift; my @ingredients = @{ $next->(@_) }; return [@ingredients, q{apples}]; }; no Moose; 1; } { package Pear; use Moose::Role; around q{ingredients} => sub { my $next = shift; my @ingredients = @{ $next->(@_) }; return [@ingredients, q{pears}]; }; no Moose; 1; } { package Blackberry; use Moose::Role; around q{ingredients} => sub { my $next = shift; my @ingredients = @{ $next->(@_) }; return [@ingredients, q{blackberries}]; }; no Moose; 1; } } use strict; use warnings; use Test::More; use MooseX::Recipe::Builder; Apple_pie: { my $apple_pie = MooseX::Recipe::Builder->new({ class => q{Pie}, roles => [qw(Apple)] }); my $class = $apple_pie->class_name(); ok($class->does(q{Apple}), q{Pie does have apple}); my $obj = $class->new(); is_deeply( $obj->ingredients(), [ qw(apples) ], q{Pie has right ingredients}); } Pear_pie: { my $pear_pie = MooseX::Recipe::Builder->new({ class => q{Pie}, roles => [qw(Pear)] }); my $class = $pear_pie->class_name(); ok($class->does(q{Pear}), q{Pie does have pear}); my $obj = $class->new(); is_deeply( $obj->ingredients(), [ qw(pears) ], q{Pie has right ingredients}); } Apple_and_blackberry_pie: { my $mixed_pie = MooseX::Recipe::Builder->new({ class => q{Pie}, roles => [qw(Apple Blackberry)] }); my $class = $mixed_pie->class_name(); ok($class->does(qw(Apple Blackberry)), q{Pie does have apple and blackberry}); my $obj = $class->new(); is_deeply( $obj->ingredients(), [ qw(apples blackberries) ], q{Pie has right ingredients}); } Apple_and_pear_pie_as_chainsaw: { my $mixed_pie = MooseX::Recipe::Builder->new({ class => q{Pie}, roles => [qw(Apple Pear)], with_name => q{ChainSaw} }); my $class = $mixed_pie->class_name(); is($class, q{ChainSaw}, q{Class is ChainSaw}); ok($class->does(qw(Apple Pear)), q{ChainSaw does have apple and blackberry}); my $obj = $class->new(); is_deeply( $obj->ingredients(), [ qw(apples pears) ], q{ChainSaw has right ingredients}); }