1*5759b3d2Safresh1use strict; 2*5759b3d2Safresh1use warnings; 3*5759b3d2Safresh1use Test2::IPC; 4*5759b3d2Safresh1use Test2::Tools::Tiny; 5*5759b3d2Safresh1use Test2::API::Stack; 6*5759b3d2Safresh1use Test2::API qw/test2_ipc/; 7*5759b3d2Safresh1 8*5759b3d2Safresh1ok(my $stack = Test2::API::Stack->new, "Create a stack"); 9*5759b3d2Safresh1 10*5759b3d2Safresh1ok(!@$stack, "Empty stack"); 11*5759b3d2Safresh1ok(!$stack->peek, "Nothing to peek at"); 12*5759b3d2Safresh1 13*5759b3d2Safresh1ok(!exception { $stack->cull }, "cull lives when stack is empty"); 14*5759b3d2Safresh1ok(!exception { $stack->all }, "all lives when stack is empty"); 15*5759b3d2Safresh1ok(!exception { $stack->clear }, "clear lives when stack is empty"); 16*5759b3d2Safresh1 17*5759b3d2Safresh1like( 18*5759b3d2Safresh1 exception { $stack->pop(Test2::Hub->new) }, 19*5759b3d2Safresh1 qr/No hubs on the stack/, 20*5759b3d2Safresh1 "No hub to pop" 21*5759b3d2Safresh1); 22*5759b3d2Safresh1 23*5759b3d2Safresh1my $hub = Test2::Hub->new; 24*5759b3d2Safresh1ok($stack->push($hub), "pushed a hub"); 25*5759b3d2Safresh1 26*5759b3d2Safresh1like( 27*5759b3d2Safresh1 exception { $stack->pop($hub) }, 28*5759b3d2Safresh1 qr/You cannot pop the root hub/, 29*5759b3d2Safresh1 "Root hub cannot be popped" 30*5759b3d2Safresh1); 31*5759b3d2Safresh1 32*5759b3d2Safresh1$stack->push($hub); 33*5759b3d2Safresh1like( 34*5759b3d2Safresh1 exception { $stack->pop(Test2::Hub->new) }, 35*5759b3d2Safresh1 qr/Hub stack mismatch, attempted to pop incorrect hub/, 36*5759b3d2Safresh1 "Must specify correct hub to pop" 37*5759b3d2Safresh1); 38*5759b3d2Safresh1 39*5759b3d2Safresh1is_deeply( 40*5759b3d2Safresh1 [ $stack->all ], 41*5759b3d2Safresh1 [ $hub, $hub ], 42*5759b3d2Safresh1 "Got all hubs" 43*5759b3d2Safresh1); 44*5759b3d2Safresh1 45*5759b3d2Safresh1ok(!exception { $stack->pop($hub) }, "Popped the correct hub"); 46*5759b3d2Safresh1 47*5759b3d2Safresh1is_deeply( 48*5759b3d2Safresh1 [ $stack->all ], 49*5759b3d2Safresh1 [ $hub ], 50*5759b3d2Safresh1 "Got all hubs" 51*5759b3d2Safresh1); 52*5759b3d2Safresh1 53*5759b3d2Safresh1is($stack->peek, $hub, "got the hub"); 54*5759b3d2Safresh1is($stack->top, $hub, "got the hub"); 55*5759b3d2Safresh1 56*5759b3d2Safresh1$stack->clear; 57*5759b3d2Safresh1 58*5759b3d2Safresh1is_deeply( 59*5759b3d2Safresh1 [ $stack->all ], 60*5759b3d2Safresh1 [ ], 61*5759b3d2Safresh1 "no hubs" 62*5759b3d2Safresh1); 63*5759b3d2Safresh1 64*5759b3d2Safresh1ok(my $top = $stack->top, "Generated a top hub"); 65*5759b3d2Safresh1is($top->ipc, test2_ipc, "Used sync's ipc"); 66*5759b3d2Safresh1ok($top->format, 'Got formatter'); 67*5759b3d2Safresh1 68*5759b3d2Safresh1is($stack->top, $stack->top, "do not generate a new top if there is already a top"); 69*5759b3d2Safresh1 70*5759b3d2Safresh1ok(my $new = $stack->new_hub(), "Add a new hub"); 71*5759b3d2Safresh1is($stack->top, $new, "new one is on top"); 72*5759b3d2Safresh1is($new->ipc, $top->ipc, "inherited ipc"); 73*5759b3d2Safresh1is($new->format, $top->format, "inherited formatter"); 74*5759b3d2Safresh1 75*5759b3d2Safresh1my $new2 = $stack->new_hub(formatter => undef, ipc => undef); 76*5759b3d2Safresh1ok(!$new2->ipc, "built with no ipc"); 77*5759b3d2Safresh1ok(!$new2->format, "built with no formatter"); 78*5759b3d2Safresh1 79*5759b3d2Safresh1done_testing; 80