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