The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More;
use strict;

BEGIN {
    eval("use Moose");
    plan skip_all => "Moose not installed" if $@;
}

package RoleTest;

use Moose::Role;

requires 'some_role';

sub non_role { }

package MooseTest;

use Moose;
has 'someattr' => ( is => 'rw', isa => 'Str', required => 1 );
sub word { }

package TestCases;

use Test::Pockito;
use Test::Pockito::Moose::Role;

use Test::Simple tests => 4;
{

    my $pocket = Test::Pockito->new("Foo");
    my $mock   = $pocket->mock("MooseTest");

    $pocket->when( $mock->word )->then(2);
    $pocket->when( $mock->someattr(1) )->then(2);

    ok( $mock->word == 2,        "Basic subs work" );
    ok( $mock->someattr(1) == 2, "Mocking an attribute works" );

}

{  
    Test::Pockito::Moose::Role::convert('Role','RoleTest');

    my $pocket = Test::Pockito->new("Mock");

    my $mock = $pocket->mock("Role::RoleTest");

    $pocket->when( $mock->some_role(1) )->then(2);
    $pocket->when( $mock->non_role(3) )->then(4);

    ok( $mock->some_role(1) == 2, "Mocking a role works" );
    ok( $mock->non_role(3) == 4,  "Mocking a sub in a role works" );
}

1;