#!/usr/bin/perl
use strict;
use Test::More tests =>
15;
use FindBin;
use Path::Class;
# use Log::Any::Adapter;
# use Log::Any::Adapter::Test::Memory;
# Log::Any::Adapter->set('Test::Memory');
# my $logger = Log::Any->get_logger(category => 'Feed::Pipe');
use_ok('Feed::Pipe');
my @feeds =
( file($FindBin::Bin, 'atom1.atom')->stringify # valid atom feed
, file($FindBin::Bin, 'rss1.xml')->stringify # RSS 1 from delicious
, file($FindBin::Bin, 'rss2wp.xml')->stringify # RSS 2 from Wordpress
);
sub duplicate {($_,$_)}
sub nullify{}
sub truncate_title {
my $entry = $_;
if (length($entry->title) > 10) {
$entry->title(substr($entry->title,0,10));
}
return $entry;
}
my $feed = Feed::Pipe
->cat(@feeds)
->map(\&truncate_title)
;
is $feed->count, 10, 'correct number of entries in result';
for my $entry ($feed->entries) {
is length($entry->title), 10, 'filtered';
}
#diag join "\n", map { $_->title } $feed->entries;
# diag $feed->as_xml;
my $gotit = eval {require Test::Warn};
SKIP: { skip 'Test::Warn not installed', 1 if $@;
Test::Warn::warning_like(sub{$feed->map}, qr/Ignoring map/, 'map warns when no coderef passed');
# like $logger->{msgs}[-1]{text}, qr/Ignoring map/, 'map logs warning when no coderef passed';
}
$feed->map(\&duplicate);
is $feed->count, 20, 'map function can return multiple results';
$feed->map(\&nullify);
is $feed->count, 0, 'map function can return no results';