use strict;
use warnings;
use utf8;
use t::Utils;
use Test::More;
use DBIx::TransactionManager;
my $dbh = t::Utils::setup;
my $tm = DBIx::TransactionManager->new($dbh);
is scalar(@{$tm->active_transactions}), 0;
my $txn = $tm->txn_scope;
is scalar(@{$tm->active_transactions}), 1;
is $tm->active_transactions->[0]->{caller}->[0], 'main';
is $tm->active_transactions->[0]->{caller}->[1], __FILE__;
is $tm->active_transactions->[0]->{caller}->[2], 13;
is $tm->active_transactions->[0]->{pid} , $$;
{
my $txn = $tm->txn_scope;
is scalar(@{$tm->{active_transactions}}), 2;
is $tm->active_transactions->[1]->{caller}->[0], 'main';
is $tm->active_transactions->[1]->{caller}->[1], __FILE__;
is $tm->active_transactions->[1]->{caller}->[2], 22;
is $tm->active_transactions->[1]->{pid} , $$;
$txn->commit;
}
is scalar(@{$tm->active_transactions}), 1;
is $tm->active_transactions->[0]->{caller}->[0], 'main';
is $tm->active_transactions->[0]->{caller}->[1], __FILE__;
is $tm->active_transactions->[0]->{caller}->[2], 13;
is $tm->active_transactions->[0]->{pid} , $$;
$tm->txn_begin;
is scalar(@{$tm->active_transactions}), 2;
is $tm->active_transactions->[1]->{caller}->[0], 'main';
is $tm->active_transactions->[1]->{caller}->[1], __FILE__;
is $tm->active_transactions->[1]->{caller}->[2], 37;
is $tm->active_transactions->[1]->{pid} , $$;
$tm->txn_commit;
$tm->txn_begin;
is scalar(@{$tm->active_transactions}), 2;
is $tm->active_transactions->[1]->{caller}->[0], 'main';
is $tm->active_transactions->[1]->{caller}->[1], __FILE__;
is $tm->active_transactions->[1]->{caller}->[2], 47;
is $tm->active_transactions->[1]->{pid} , $$;
$tm->txn_rollback;
$txn->rollback;
is scalar(@{$tm->active_transactions}), 0;
$txn = $tm->txn_scope;
is scalar(@{$tm->active_transactions}), 1;
is $tm->active_transactions->[0]->{caller}->[0], 'main';
is $tm->active_transactions->[0]->{caller}->[1], __FILE__;
is $tm->active_transactions->[0]->{caller}->[2], 61;
is $tm->active_transactions->[0]->{pid} , $$;
{
package Mock;
sub do_txn {
my $tm = shift;
my $txn = $tm->txn_scope;
::is scalar(@{$tm->active_transactions}), 2;
::is $tm->active_transactions->[1]->{caller}->[0], 'Mock';
::is $tm->active_transactions->[1]->{caller}->[1], __FILE__;
::is $tm->active_transactions->[1]->{caller}->[2], 73;
::is $tm->active_transactions->[1]->{pid} , $$;
$txn->commit;
}
}
Mock::do_txn($tm);
$txn->commit;
is scalar(@{$tm->active_transactions}), 0;
done_testing;