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

use Test::More;
use FindBin;
use Path::Class qw( dir );
use Scalar::Util qw( refaddr );

use lib dir( $FindBin::Bin )->subdir( "tlib" )->absolute->stringify;
use t::util { '$repo' => 1 };

# FILENAME: 04_list.t
# CREATED: 29/05/12 08:34:56 by Kent Fredric (kentnl) <kentfredric@gmail.com>
# ABSTRACT: OnCommit::List test
use Git::PurePerl::Walker::OnCommit::CallBack;
use Git::PurePerl::Walker::OnCommit::List;

my $v = [];
my $i = [ 0, 0 ];

my $list_factory = Git::PurePerl::Walker::OnCommit::List->new();

$list_factory->add_event(
	Git::PurePerl::Walker::OnCommit::CallBack->new(
		callback => sub {
			$i->[ 0 ]++;
			$v->[ 0 ] = \@_;
		} ) );
$list_factory->add_event(
	Git::PurePerl::Walker::OnCommit::CallBack->new(
		callback => sub {
			$i->[ 1 ]++;
			$v->[ 1 ] = \@_;
		} ) );
my $li = $list_factory->for_repository( $repo );

$li->handle( $repo->master );

is( $v->[ 0 ]->[ 0 ]->sha1, '010fb4bcf7d92c031213f43d0130c811cbb355e7', 'Callback triggered' );
is( $v->[ 1 ]->[ 0 ]->sha1, '010fb4bcf7d92c031213f43d0130c811cbb355e7', 'Callback 2 triggered' );
isnt( refaddr $li->events->[ 0 ], refaddr $list_factory->events->[ 0 ], "callback is cloned x1" );
isnt( refaddr $li->events->[ 1 ], refaddr $list_factory->events->[ 1 ], "callback is cloned x2" );

my $c = Git::PurePerl::Walker::OnCommit::CallBack->new(
	callback => sub {
		$i->[ 2 ]++;
		$v->[ 2 ] = \@_;
	} );
$li->add_event( $c );
isnt( refaddr $li->events->[ 2 ], refaddr $c, "callback is cloned x3" );

done_testing;