Test-AutoMock

 view release on metacpan or  search on metacpan

lib/Test/AutoMock/Mock/TieHash.pm  view on Meta::CPAN

package Test::AutoMock::Mock::TieHash;
use strict;
use warnings;

sub TIEHASH {
    my ($class, $manager) = @_;

    bless \$manager => $class;
}

sub FETCH {
    my ($self, $key) = @_;
    my $manager = $$self;
    my $hashref = $manager->tie_hash;
    my $method_name = "{$key}";

    $manager->_call_method($method_name, [], sub {
        my $self = shift;
        $hashref->{$key} = $manager->child($method_name)->mock
                                                unless exists $hashref->{$key};
        $hashref->{$key};
    });
}

sub STORE {
    my ($self, $key, $value) = @_;
    my $manager = $$self;
    my $hashref = $manager->tie_hash;

    $manager->_call_method("{$key}", [$value], sub {
        my ($self, $value) = @_;
        $hashref->{$key} = $value;
    });
}

sub DELETE {
    my ($self, $key) = @_;
    my $manager = $$self;
    my $hashref = $manager->tie_hash;

    $manager->_call_method(DELETE => [$key], sub {
        my ($self, $key) = @_;
        delete $hashref->{$key};
    });
}

sub CLEAR {
    my $self = shift;
    my $manager = $$self;
    my $hashref = $manager->tie_hash;

    $manager->_call_method(CLEAR => [], sub {
        my $self = shift;
        %$hashref = ();
    });
}

sub EXISTS {
    my ($self, $key) = @_;
    my $manager = $$self;
    my $hashref = $manager->tie_hash;

    $manager->_call_method(EXISTS => [$key], sub {
        my ($self, $key) = @_;
        exists $hashref->{$key};
    });
}

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 1.780 second using v1.00-cache-2.02-grep-82fe00e-cpan-f73e49a70403 )