The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Mason::Plugin::SliceFilter::t::Basic;

use Test::Class::Most parent => 'Mason::Test::Class';
sub test_slice_filter :Test(9){
  my $self = shift;

  my $STASH = {};

  $self->setup_interp( plugins => [ '@Default', 'SliceFilter' ] , allow_globals => [qw($STASH)]);
  $self->interp->set_global('$STASH' , $STASH);

  ## Just one slice without any param
  $self->test_comp( src =>
q|
% $.Slice(slice_id => 'aslice'){{
SliceA
% }}
|,
                    expect => 'SliceA');

## Hit the first slice
  $self->test_comp( src =>
q|
% $.Slice(slice_id => 'aslice'){{
SliceA
% }}
% $.Slice(slice_id => 'bslice' ){{
SliceB
% }}
|,
                    expect => 'SliceA' , args => { slice => 'aslice' });

## Hit the second slice
  $self->test_comp( src =>
q|
% $.Slice(slice_id => 'aslice'){{
SliceA
% }}
% $.Slice(slice_id => 'bslice' ){{
SliceB
% }}
|,
                    expect => 'SliceB' , args => { slice => 'bslice' });

## Nested ones.
  $self->test_comp( src =>
q|
% $.Slice(slice_id => 'aslice'){{
Before nest
% $.Slice(slice_id => 'nest' ){{
Nested
% }}
After nest
% }}
% $.Slice(slice_id => 'bslice' , can_skip => 1 ){{
SliceB
% }}
|,
                    expect => 'Nested' , args => { slice => 'nest' });

## Nested ones. Hitting the wrapping one should output the whole
## thing, even if the nested slice is can_skip
  $self->test_comp( src =>
q|
% $.Slice(slice_id => 'aslice'){{
Before nest
% $.Slice(slice_id => 'nest' , can_skip => 1 ){{
Nested
% }}
After nest
% }}
% $.Slice(slice_id => 'bslice' , can_skip => 1 ){{
SliceB
% }}
|,
                    expect => "Before nest\nNested\nAfter nest\n" , args => { slice => 'aslice' });




$STASH->{side_effect} = 0;
## After nesting with skipping
  $self->test_comp( src =>
q|
% $.Slice(slice_id => 'aslice' , can_skip => 1 ){{
Before nest
% $.Slice(slice_id => 'nest' ){{
% $STASH->{side_effect} = 1;
Nested
% }}
After nest
% }}
% $.Slice(slice_id => 'bslice' , can_skip => 1 ){{
SliceB
% }}
|,
                    expect => 'SliceB' , args => { slice => 'bslice' });

ok( $STASH->{side_effect} == 0 , "Side effect is still zero because of can_skip");

# Without skipping

  $self->test_comp( src =>
q|
% $.Slice(slice_id => 'aslice' , can_skip => 0 ){{
Before nest
% $.Slice(slice_id => 'nest' ){{
% $STASH->{side_effect} = 1;
Nested
% }}
After nest
% }}
% $.Slice(slice_id => 'bslice' , can_skip => 1 ){{
SliceB

% }}
|,
                    expect => 'SliceB' , args => { slice => 'bslice' });

ok( $STASH->{side_effect} == 1 , "Side effect occured because can_skip is 0");

}

1;