#!/usr/bin/perl
use strict;
use warnings;
use Test::More 'no_plan';
use Devel::Events::Generator::SubTrace;
use Devel::Events::Handler::Callback;
my @events;
my $h = Devel::Events::Handler::Callback->new(sub {
my ( $type, %args ) = @_;
push @events, [ $type => $args{name}, ( $type eq 'enter_sub' ? $args{args}[0] : $args{ret} ) ];
});
my $o = Devel::Events::Generator::SubTrace->new( handler => $h );
sub bar { 42 + shift }
sub foo { bar(2) + bar(5) + shift }
$o->enable;
my $v = foo(3);
$o->disable;
is( $v, ( 42 + 2 + 42 + 5 + 3 ), "values unchanged" );
is_deeply(
\@events,
[
[ enter_sub => 'main::foo' => 3 ],
[ enter_sub => 'main::bar' => 2 ],
[ leave_sub => 'main::bar' => 44 ],
[ enter_sub => 'main::bar' => 5 ],
[ leave_sub => 'main::bar' => 47 ],
[ leave_sub => 'main::foo' => ( 47 + 44 + 3 ) ],
],
"call chain events",
);