#!/usr/bin/perl use strict; use Test::More 'no_plan'; my $class = 'Brick'; use_ok( $class ); my $brick = $class->new; isa_ok( $brick, $class ); my $bucket = $brick->bucket_class->new(); isa_ok( $bucket, $brick->bucket_class ); # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ok( defined &Brick::Bucket::get_brick_by_name, "Method is defined" ); { my $count = $bucket->get_brick_by_name( 'One' ); is( $count, 0, "No bricks in the bucket yet" ); } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Add one brick, not declaring unique # SHOULD WORK { my $sub = sub { __LINE__ }; my $name = 'One'; $bucket->add_to_bucket( { name => $name, description => 'This is the first subroutine', code => $sub, } ); { my $count = $bucket->get_brick_by_name( $name ); is( $count, 1, "One brick in the bucket now" ); } { my( $code_ref ) = $bucket->get_brick_by_name( $name ); isa_ok( $code_ref, ref sub {} ); is( $code_ref, $sub, "Got back the same code ref" ); } } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Add another brick, declaring unique # SHOULD WORK { my $sub2 = sub { __LINE__ }; my $name = 'Two'; { my $count = $bucket->get_brick_by_name( $name ); is( $count, 0, "No bricks in the bucket yet" ); } $bucket->add_to_bucket( { name => $name, description => 'This is the second subroutine', code => $sub2, unique => 1, } ); { my $count = $bucket->get_brick_by_name( $name ); is( $count, 1, "One brick in the bucket now" ); } { my( $code_ref ) = $bucket->get_brick_by_name( $name ); isa_ok( $code_ref, ref sub {} ); is( $code_ref, $sub2, "Got back the same code ref" ); } } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Add a brick already named, but not declared unique # SHOULD WORK { my $sub3 = sub { __LINE__ }; my $name = 'One'; { my $count = $bucket->get_brick_by_name( $name ); is( $count, 1, "One brick named [$name] already" ); } $bucket->add_to_bucket( { name => $name, description => 'This is the third subroutine', code => $sub3, } ); { my $count = $bucket->get_brick_by_name( $name ); is( $count, 2, "Two bricks name [$name] in the bucket now" ); } { my @code_refs = $bucket->get_brick_by_name( $name ); is( scalar @code_refs, 2, "Got two code refs" ); } } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Add a brick already named and declared unique # SHOULD FAIL { my $sub3 = sub { __LINE__ }; my $name = 'Two'; { my $count = $bucket->get_brick_by_name( $name ); is( $count, 1, "No bricks in the bucket yet" ); } eval { $bucket->add_to_bucket( { name => $name, description => 'This is the third subroutine', code => $sub3, } ); }; ok( $@, "Adding already unique name croaks" ); { my $count = $bucket->get_brick_by_name( $name ); is( $count, 1, "Still only one brick named [$name]" ); } } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Add a brick already named, declaring it unique # SHOULD FAIL { my $sub3 = sub { __LINE__ }; my $name = 'One'; { my $count = $bucket->get_brick_by_name( $name ); is( $count, 2, "Only one brick named [$name]" ); } eval { $bucket->add_to_bucket( { name => $name, description => 'This is the third subroutine', code => $sub3, unique => 1, } ); }; ok( $@, "Adding already unique name croaks" ); { my $count = $bucket->get_brick_by_name( $name ); is( $count, 2, "Still only one brick named [$name]" ); } }