use strict; use Test::Base; use Web::Scraper; plan tests => 1 * blocks; filters { expected => 'chomp', want => 'eval', }; run { my $block = shift; my $s = scraper { process 'a', want => $block->want; result 'want'; }; my $want = $s->scrape('foo'); my $expected = $block->expected eq 'undef' ? undef : $block->expected; is $want, $expected, $block->name; }; BEGIN { package Web::Scraper::Filter::foo; use base qw( Web::Scraper::Filter ); sub filter { tr/a-z/b-za/ } package Web::Scraper::Filter::bar; use base qw( Web::Scraper::Filter ); sub filter { $_[1] . 'bar' } } package main; __DATA__ === tr --- want ['TEXT', 'foo'] --- expected gpp === shift + return --- want ['TEXT', 'bar'] --- expected foobar === inline callback --- want ['TEXT', sub { return "baz" } ] --- expected baz === inline callback + s/// --- want ['TEXT', sub { s/foo/bax/ } ] --- expected bax === stack --- want ['TEXT', 'bar', 'foo' ] --- expected gppcbs === stack --- want ['TEXT', 'bar', sub { s/foo/bar/ } ] --- expected barbar === no match --- want ['TEXT', sub { s/xxx/yyy/g }] --- expected foo === undef --- want ['TEXT', sub { return }] --- expected undef === number --- want ['TEXT', sub { return 3 }] --- expected 3 === object --- want ['TEXT', Web::Scraper::Filter::foo->new] --- expected gpp