#!/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';