use Test::More tests => 11;
use HTTP::Proxy;
use HTTP::Proxy::HeaderFilter;
use HTTP::Proxy::BodyFilter;
my $stack;
my $hf = [ sub { 1 }, HTTP::Proxy::HeaderFilter->new() ];
my $hf2 = [ sub { 1 }, HTTP::Proxy::HeaderFilter->new() ];
my $bf = [ sub { 1 }, HTTP::Proxy::BodyFilter->new() ];
# test general stack workings
$stack = HTTP::Proxy::FilterStack->new();
# all, push
is_deeply( [ $stack->all ], [], "FilterStack is empty" );
$stack->push($hf);
is_deeply( [ $stack->all ], [ $hf ], "FilterStack has one element" );
$stack->push($hf2, $hf);
is_deeply( [ $stack->all ], [ $hf, $hf2, $hf ], "FilterStack has three elements" );
# insert
$stack->insert(1, $hf2);
is_deeply( [ $stack->all ], [ $hf, $hf2, $hf2, $hf ], "FilterStack is correct");
is( scalar $stack->all, 4, "Correct in scalar context too");
# remove
my $elem = $stack->remove(1);
is( $elem, $hf2, "Got back what was in the stack");
# check insertion in header FilterStack
eval { $stack->push( $bf ); };
like( $@, qr/is not a HTTP::Proxy::HeaderFilter/, "Incorrect Filter class" );
eval { $stack->insert( 0, $bf ); };
like( $@, qr/is not a HTTP::Proxy::HeaderFilter/, "Incorrect Filter class" );
{
package Foo;
use base qw( HTTP::Proxy::HeaderFilter );
}
my $foo = [ sub { 1 }, Foo->new() ];
eval { $stack->push( $foo ); };
is( $@, '', "Can push derived Filters" );
# same test for body FilterStack
my $bstack = HTTP::Proxy::FilterStack->new(1);
eval { $bstack->push( $hf ); };
like( $@, qr/is not a HTTP::Proxy::BodyFilter/, "Incorrect Filter class" );
eval { $bstack->insert( 0, $hf ); };
like( $@, qr/is not a HTTP::Proxy::BodyFilter/, "Incorrect Filter class" );
# current
# filter
# filter_last