1#!/usr/bin/perl 2use strict; 3use warnings; 4 5use Fennec::Lite; 6use Test::Exception; 7use Mock::Quick::Method; 8use Mock::Quick::Object; 9 10BEGIN { 11 tests load => sub { 12 require_ok qw/Mock::Quick::Util/; 13 lives_ok { Mock::Quick::Util->import() } "Import"; 14 can_ok( __PACKAGE__, @Mock::Quick::Util::EXPORT ); 15 }; 16 run_tests; 17} 18 19tests inject => sub { 20 inject( 'main', 'blah', sub { 'blah' }); 21 can_ok( 'main', 'blah' ); 22 is( blah(), 'blah', "injected sub" ); 23}; 24 25tests obj_meth => sub { 26 obj_meth foo => sub { 'foo' }; 27 can_ok( __PACKAGE__, 'foo' ); 28 dies_ok { __PACKAGE__->foo } "Class form dies"; 29 lives_and { 30 is( bless( {}, __PACKAGE__ )->foo, 'foo', "Object form works" ); 31 } "Object form should not die."; 32}; 33 34tests alt_meth => sub { 35 alt_meth alpha => ( 36 obj => sub { 'o' }, 37 class => sub { 'c' }, 38 ); 39 is( __PACKAGE__->alpha, 'c', "Class version" ); 40 is( bless( {}, __PACKAGE__ )->alpha, 'o', "Object version" ); 41}; 42 43tests call => sub { 44 my $ref = bless({}, 'Mock::Quick::Object'); 45 is( call( $ref, 'a' ), undef, "Not set" ); 46 is( call( $ref, 'a', 'a' ), 'a', "Alter" ); 47 is( call( $ref, 'a' ), 'a', "Altered" ); 48 is( call( $ref, 'a', \$Mock::Quick::Util::CLEAR ), undef, "Cleared" ); 49 is( call( $ref, 'a' ), undef, "Not set" ); 50 51 call( $ref, 'a', Mock::Quick::Method->new( sub { 'xxx' })); 52 53 is( call( $ref, 'a', 'foo' ), 'xxx', "Called method" ); 54 is( call( $ref, 'a', \$Mock::Quick::Util::CLEAR ), undef, "Cleared" ); 55 is( call( $ref, 'a' ), undef, "Not set" ); 56}; 57 58tests class_meth => sub { 59 my $ref = bless( { baz => 'baz' }, 'Mock::Quick::Object' ); 60 class_meth baz => sub { 'class baz' }; 61 is( $ref->baz, 'baz', "Object form" ); 62 is( __PACKAGE__->baz, 'class baz', "Class Form" ); 63}; 64 65run_tests; 66 67tests purge => sub { 68 purge_util(); 69 ok( !__PACKAGE__->can( $_ ), "$_ purged" ) 70 for @Mock::Quick::Util::EXPORT; 71}; 72run_tests; 73 74done_testing; 75