XML-FeedPP-0.95/ 0000755 0001750 0000144 00000000000 13266472404 013736 5 ustar 00markov users 0000000 0000000 XML-FeedPP-0.95/t/ 0000755 0001750 0000144 00000000000 13266472404 014201 5 ustar 00markov users 0000000 0000000 XML-FeedPP-0.95/t/32_two_titles.t 0000755 0001750 0000144 00000005114 13265137544 017075 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More tests => 13;
BEGIN { use_ok('XML::FeedPP') };
# ----------------------------------------------------------------
{
my $source = <<'EOT';
sample channel
sample channel
http://www.example.com/
sample channel
-
http://www.example.com/sample1.html
http://www.example.com/sample1.html
sample item #1
-
http://www.example.com/sample2.html
http://www.example.com/sample2.html
sample item #2 A
sample item #2 B
-
http://www.example.com/sample3.html
http://www.example.com/sample3.html
sample item #3 A
sample item #3 B
EOT
&test_main( $source );
}
# ----------------------------------------------------------------
sub test_main {
my $source = shift;
my $feed = XML::FeedPP->new( $source );
my $ftitle = $feed->title;
is( $ftitle, 'sample channel', 'feed title' );
my @ftitles = $feed->title;
is( (scalar @ftitles), 2, 'num of feed titles' );
my $item1 = $feed->get_item( 0 );
my $ititle1 = $item1->title;
is( $ititle1, 'sample item #1', '1: item title with xmlns' );
my @ititles1 = $item1->title;
is( (scalar @ititles1), 1, '1: num of item titles' );
my $item2 = $feed->get_item( 1 );
my $ititle2 = $item2->title;
is( $ititle2, 'sample item #2 A', '2: item title by array' );
my @ititles2 = $item2->title;
is( (scalar @ititles2), 2, '2: num of item titles' );
is( $ititles2[0], 'sample item #2 A', '2A: item title' );
is( $ititles2[1], 'sample item #2 B', '2B: item title' );
my $item3 = $feed->get_item( 2 );
my $ititle3 = $item3->title;
is( $ititle3, 'sample item #3 A', '3: item title with xmlns by array' );
my @ititles3 = $item3->title;
is( (scalar @ititles3), 2, '3: num of item titles' );
is( $ititles3[0], 'sample item #3 A', '3A: item title' );
is( $ititles3[1], 'sample item #3 B', '3B: item title with xmlns' );
}
# ----------------------------------------------------------------
XML-FeedPP-0.95/t/43_indent_atom.t 0000644 0001750 0000144 00000002270 13265137544 017200 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More;
# ----------------------------------------------------------------
my $link = "http://www.kawa.net/";
my $title = "foobar";
# ----------------------------------------------------------------
{
plan tests => 9;
use_ok('XML::FeedPP');
my $feeds = [
XML::FeedPP::RDF->new(),
XML::FeedPP::RSS->new(),
XML::FeedPP::Atom::Atom03->new(),
XML::FeedPP::Atom::Atom10->new(),
];
foreach my $feed1 ( @$feeds ) {
&test_indent( 2, $feed1 );
&test_indent( 4, $feed1 );
}
}
# ----------------------------------------------------------------
sub test_indent {
my $indent = shift;
my $feed = shift;
my $type = ref $feed;
$feed->link($link);
$feed->add_item($link);
my $string1 = $feed->to_string( indent => $indent );
is( indent($string1), ' ' x $indent, "$type indent $indent" );
}
# ----------------------------------------------------------------
sub indent {
my $str = shift;
my $indent = ( $str =~ m#^(\040+)#m )[0];
$indent;
}
# ----------------------------------------------------------------
XML-FeedPP-0.95/t/42_indent.t 0000755 0001750 0000144 00000004642 13265137544 016167 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More;
# ----------------------------------------------------------------
{
local $@;
eval { require 5.008001; };
plan skip_all => 'Perl 5.8.1 is required.' if $@;
}
# ----------------------------------------------------------------
{
plan tests => 31;
use_ok('XML::FeedPP');
&test_indent( 2 );
&test_indent( 4 );
}
# ----------------------------------------------------------------
sub test_indent {
my $indent = shift;
my $feed = XML::FeedPP::RSS->new();
$feed->title( "\xC3\xAB" );
my $string1 = $feed->to_string( indent => $indent );
my $string2 = $feed->to_string( 'UTF-8' , indent => $indent );
my $string3 = $feed->to_string( 'Latin-1', indent => $indent );
my $string4 = $feed->to_string( output_encoding => 'UTF-8' , indent => $indent );
my $string5 = $feed->to_string( output_encoding => 'Latin-1', indent => $indent );
is( encoding($string1), 'UTF-8', 'encoding default' );
is( encoding($string2), 'UTF-8', 'encoding 3 args UTF-8' );
is( encoding($string3), 'LATIN-1', 'encoding 3 args Latin-1' );
is( encoding($string4), 'UTF-8', 'encoding 4 args UTF-8' );
is( encoding($string5), 'LATIN-1', 'encoding 4 args Latin-1' );
is( title($string1), "\xC3\xAB", 'title default' );
is( title($string2), "\xC3\xAB", 'title 3 args UTF-8' );
is( title($string3), "\xEB", 'title 3 args Latin-1' );
is( title($string4), "\xC3\xAB", 'title 4 args UTF-8' );
is( title($string5), "\xEB", 'title 4 args Latin-1' );
is( indent($string1), ' ' x $indent, 'indent default' );
is( indent($string2), ' ' x $indent, 'indent 3 args UTF-8' );
is( indent($string3), ' ' x $indent, 'indent 3 args Latin-1' );
is( indent($string4), ' ' x $indent, 'indent 4 args UTF-8' );
is( indent($string5), ' ' x $indent, 'indent 4 args Latin-1' );
}
# ----------------------------------------------------------------
sub indent {
my $str = shift;
my $indent = ( $str =~ m#^(\040+)#m )[0];
$indent;
}
sub encoding {
my $str = shift;
my $encoding = ( $str =~ m#]*encoding="([^"]*)"# )[0];
uc($encoding);
}
sub title {
my $str = shift;
my $title = ( $str =~ m#
([^<>]*)# )[0];
$title =~ s/^\s+//;
$title =~ s/\s+$//;
$title;
}
# ----------------------------------------------------------------
XML-FeedPP-0.95/t/29_rfc2822.t 0000644 0001750 0000144 00000005223 13265137544 015774 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More tests => 11;
BEGIN { use_ok('XML::FeedPP') };
# ----------------------------------------------------------------
=rfc2822
obs-zone = "UT" / "GMT" / ; Universal Time
; North American UT
; offsets
"EST" / "EDT" / ; Eastern: - 5/ - 4
"CST" / "CDT" / ; Central: - 6/ - 5
"MST" / "MDT" / ; Mountain: - 7/ - 6
"PST" / "PDT" / ; Pacific: - 8/ - 7
EDT is semantically equivalent to -0400
EST is semantically equivalent to -0500
CDT is semantically equivalent to -0500
CST is semantically equivalent to -0600
MDT is semantically equivalent to -0600
MST is semantically equivalent to -0700
PDT is semantically equivalent to -0700
PST is semantically equivalent to -0800
=cut
# ----------------------------------------------------------------
{
my $rfc2822 = {
'1200000000' => 'Thu, 10 Jan 2008 21:20:00 GMT',
'1210000000' => 'Mon, 05 May 2008 15:06:40 UT',
'1220000000' => 'Fri, 29 Aug 2008 08:53:20 EDT',
'1230000000' => 'Tue, 23 Dec 2008 02:40:00 EST',
'1240000000' => 'Fri, 17 Apr 2009 20:26:40 CDT',
'1250000000' => 'Tue, 11 Aug 2009 14:13:20 CST',
'1260000000' => 'Sat, 05 Dec 2009 08:00:00 MDT',
'1270000000' => 'Wed, 31 Mar 2010 01:46:40 MST',
'1280000000' => 'Sat, 24 Jul 2010 19:33:20 PDT',
'1290000000' => 'Wed, 17 Nov 2010 13:20:00 PST',
};
my $w3cdtf = {
'1200000000' => '2008-01-10T21:20:00Z',
'1210000000' => '2008-05-05T15:06:40Z',
'1220000000' => '2008-08-29T08:53:20-04:00',
'1230000000' => '2008-12-23T02:40:00-05:00',
'1240000000' => '2009-04-17T20:26:40-05:00',
'1250000000' => '2009-08-11T14:13:20-06:00',
'1260000000' => '2009-12-05T08:00:00-06:00',
'1270000000' => '2010-03-31T01:46:40-07:00',
'1280000000' => '2010-07-24T19:33:20-07:00',
'1290000000' => '2010-11-17T13:20:00-08:00',
};
foreach my $key ( sort keys %$rfc2822 ) {
my $input = $rfc2822->{$key};
my $check = $w3cdtf->{$key};
my $out = XML::FeedPP::Util::rfc1123_to_w3cdtf( $input );
$out =~ s/[\+\-]00:00$/Z/;
my $name = ( $input =~ /(\w+)$/ )[0];
is( $out, $check, $name );
}
}
# ----------------------------------------------------------------
;1;
# ----------------------------------------------------------------
XML-FeedPP-0.95/t/35_no_xml_decl.t 0000755 0001750 0000144 00000004655 13265137544 017177 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More tests => 49;
BEGIN { use_ok('XML::FeedPP') };
# ----------------------------------------------------------------
{
my $rss = <<'EOT';
kawa.net
http://www.kawa.net/
EOT
my $rdf = <<'EOT';
kawa.net
http://www.kawa.net/
EOT
my $atom03 = <<'EOT';
kawa.net
EOT
my $atom10 = <<'EOT';
kawa.net
EOT
my $bom = "\xEF\xBB\xBF";
my $xml = '';
# without xml decl
&test_main( 'NoDecl RSS 2.0', $rss );
&test_main( 'NoDecl RSS 1.0', $rdf );
&test_main( 'NoDecl Atom 0.3', $atom03 );
&test_main( 'NoDecl Atom 1.0', $atom10 );
# with xml decl
&test_main( 'XMLDecl RSS 2.0', $xml.$rss );
&test_main( 'XMLDecl RSS 1.0', $xml.$rdf );
&test_main( 'XMLDecl Atom 0.3', $xml.$atom03 );
&test_main( 'XMLDecl Atom 1.0', $xml.$atom10 );
# with bom but no xml decl
&test_main( 'BOM RSS 2.0', $bom.$rss );
&test_main( 'BOM RSS 1.0', $bom.$rdf );
&test_main( 'BOM Atom 0.3', $bom.$atom03 );
&test_main( 'BOM Atom 1.0', $bom.$atom10 );
# with bom and xml decl
&test_main( 'BOM XMLDecl RSS 2.0', $bom.$xml.$rss );
&test_main( 'BOM XMLDecl RSS 1.0', $bom.$xml.$rdf );
&test_main( 'BOM XMLDecl Atom 0.3', $bom.$xml.$atom03 );
&test_main( 'BOM XMLDecl Atom 1.0', $bom.$xml.$atom10 );
}
# ----------------------------------------------------------------
sub test_main {
my $title = shift;
my $source = shift;
my $feed = XML::FeedPP->new($source);
ok( $feed, 'load: '.$title );
is( +$feed->title, 'kawa.net', 'title: '.$title );
is( +$feed->link, 'http://www.kawa.net/', 'link: '.$title );
}
# ----------------------------------------------------------------
XML-FeedPP-0.95/t/18_image_atom.t 0000644 0001750 0000144 00000005014 13265137544 017002 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More tests => 12;
BEGIN { use_ok('XML::FeedPP') };
# ----------------------------------------------------------------
my $f_title = "Title of the site";
my $f_link = "http://www.kawa.net/";
my $f_image = "http://www.kawa.net/xp/images/mixi-3.jpg";
# ----------------------------------------------------------------
my $i_link = "http://www.perl.org/";
my $i_title = "The Perl Directory - perl.org";
# ----------------------------------------------------------------
my $feed1 = XML::FeedPP::Atom->new();
$feed1->title( $f_title );
$feed1->link( $f_link );
$feed1->image( $f_image );
my $item1 = $feed1->add_item( $i_link );
$item1->title( $i_title );
# ----------------------------------------------------------------
is( scalar $feed1->link(), $f_link, "Atom link 1" );
is( scalar $feed1->image(), $f_image, "Atom image 1" );
$feed1->image( $f_image );
$feed1->link( $f_link );
is( scalar $feed1->link(), $f_link, "Atom link 2" );
is( scalar $feed1->image(), $f_image, "Atom image 2" );
# ----------------------------------------------------------------
# Atom -> RDF -> Atom
# ----------------------------------------------------------------
my $feed2 = XML::FeedPP::RDF->new();
$feed2->merge( $feed1->to_string() );
is( scalar $feed2->image(), $f_image, "RDF image" );
# ----------------------------------------------------------------
my $feed3 = XML::FeedPP::Atom->new();
$feed3->merge( $feed2->to_string() );
is( scalar $feed1->link(), $f_link, "Atom link 3" );
is( scalar $feed3->image(), $f_image, "Atom image 3" );
# ----------------------------------------------------------------
# Atom -> RSS -> Atom
# ----------------------------------------------------------------
my $feed4 = XML::FeedPP::RSS->new();
$feed4->merge( $feed1->to_string() );
is( scalar $feed4->image(), $f_image, "RSS image" );
# ----------------------------------------------------------------
my $feed5 = XML::FeedPP::Atom->new();
$feed5->merge( $feed4->to_string() );
is( scalar $feed1->link(), $f_link, "Atom link 4" );
is( scalar $feed5->image(), $f_image, "Atom image 4" );
# ----------------------------------------------------------------
is( $feed3->to_string(), $feed5->to_string(), "Atom source" );
# ----------------------------------------------------------------
;1;
# ----------------------------------------------------------------
XML-FeedPP-0.95/t/23_match_item.t 0000644 0001750 0000144 00000006332 13265137544 017012 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More tests => 22;
BEGIN { use_ok('XML::FeedPP') };
# ----------------------------------------------------------------
my $flink = 'http://www.kawa.net/';
my $ftitle = 'Kawa.net XP';
my $ilink1 = 'http://kawa.at.webry.info/';
my $ilink2 = 'http://kawanet.blogspot.com/';
my $ilink3 = 'http://picasaweb.google.com/www.kawa.net/';
my $ititle1 = 'Kawa.net Blog (ja)';
my $ititle2 = 'Kawa.net Blog (en)';
my $ititle3 = 'Kawa.net Albums';
my $iorgkey = 'foo:bar';
my $iorgv1 = 'test #1';
my $iorgv2 = 'testing #2';
my $iorgv3 = 'tested #3';
# ----------------------------------------------------------------
my $initfeed = {
link => $flink,
title => $ftitle,
};
# ----------------------------------------------------------------
my $initem1 = {
link => $ilink1,
title => $ititle1,
$iorgkey => $iorgv1,
};
# ----------------------------------------------------------------
my $initem2 = {
link => $ilink2,
title => $ititle2,
$iorgkey => $iorgv2,
};
# ----------------------------------------------------------------
my $initem3 = {
link => $ilink3,
title => $ititle3,
$iorgkey => $iorgv3,
};
# ----------------------------------------------------------------
my $feeds = [
XML::FeedPP::RSS->new( %$initfeed ),
XML::FeedPP::RDF->new( %$initfeed ),
XML::FeedPP::Atom->new( %$initfeed ),
];
foreach my $feed1 ( @$feeds ) {
my $type = ref $feed1;
my $item1 = $feed1->add_item( %$initem1 );
my $item2 = $feed1->add_item( %$initem2 );
my $item3 = $feed1->add_item( %$initem3 );
# ----------------------------------------------------------------
my @item8 = $feed1->get_item();
is( scalar @item8, 3, "$type feed has 3 items" );
# ----------------------------------------------------------------
my @item4 = $feed1->match_item( link => qr/google.com/i );
is( scalar @item4, 1, "$type match 1 item by title" );
is( $item4[0]->link(), $ilink3, "$type match google.com by link" );
# ----------------------------------------------------------------
my @item5 = $feed1->match_item( title => qr/blog/i );
is( scalar @item5, 2, "$type match 2 items by title" );
# ----------------------------------------------------------------
my @item6 = $feed1->match_item( $iorgkey => qr/^test/i );
is( scalar @item6, 3, "$type match 3 items by $iorgkey" );
# ----------------------------------------------------------------
my @item7 = $feed1->match_item(
link => $ilink2,
title => qr/blog/i,
$iorgkey => qr/testing/i
);
is( scalar @item7, 1, "$type match 1 item by 3 args" );
is( $item7[0]->link(), $ilink2, "$type match blogspot.com by 3 args" );
# ----------------------------------------------------------------
}
# ----------------------------------------------------------------
;1;
# ----------------------------------------------------------------
XML-FeedPP-0.95/t/30_invalid_rdfseq.t 0000755 0001750 0000144 00000012003 13265137544 017663 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More tests => 13;
BEGIN { use_ok('XML::FeedPP') };
# ----------------------------------------------------------------
my $invalid = <<'EOT';
ja
2008-03-24T16:54:33 +0900
-
sample item #1
http://www.example.com/sample1.html
2008-03-24T16:54:33 +0900
-
sample item #2
http://www.example.com/sample2.html
2008-02-29T18:21:38 +0900
-
sample item #3
http://www.example.com/sample3.html
2008-02-25T11:54:15 +0900
EOT
# ----------------------------------------------------------------
my $valid = <<'EOT';
ja
2008-03-24T16:54:33+09:00
-
sample item #1
http://www.example.com/sample1.html
2008-03-24T16:54:33+09:00
-
sample item #2
http://www.example.com/sample2.html
2008-02-29T18:21:38+09:00
-
sample item #3
http://www.example.com/sample3.html
2008-02-25T11:54:15+09:00
EOT
# ----------------------------------------------------------------
my $vfeed = XML::FeedPP->new( $valid );
is( $vfeed->pubDate, '2008-03-24T16:54:33+09:00', 'valid feed pubDate' );
is( scalar $vfeed->get_item(), 3, 'valid feed item number' );
my $vitem = $vfeed->get_item( 2 );
is( $vitem->title, 'sample item #3', 'valid item title' );
is( $vitem->pubDate, '2008-02-25T11:54:15+09:00', 'valid item pubDate' );
# ----------------------------------------------------------------
my $ifeed = XML::FeedPP->new( $invalid );
is( $ifeed->pubDate, '2008-03-24T16:54:33 +0900', 'invalid feed pubDate' );
is( scalar $ifeed->get_item(), 3, 'invalid feed item number' );
my $iitem = $ifeed->get_item( 2 );
is( $iitem->title, 'sample item #3', 'invalid item title' );
is( $iitem->pubDate, '2008-02-25T11:54:15 +0900', 'invalid item pubDate' );
# ----------------------------------------------------------------
my $isource = $ifeed->to_string();
my $rss = XML::FeedPP::RSS->new();
$rss->merge( $isource );
my $rsource = $rss->to_string();
my $rfeed = XML::FeedPP::RDF->new();
$rfeed->merge( $rsource );
# ----------------------------------------------------------------
is( $rfeed->pubDate, '2008-03-24T16:54:33+09:00', 'round trip feed pubDate' );
is( scalar $rfeed->get_item(), 3, 'round trip feed item number' );
my $ritem = $rfeed->get_item( 2 );
is( $ritem->title, 'sample item #3', 'round trip item title' );
is( $ritem->pubDate, '2008-02-25T11:54:15+09:00', 'round trip item pubDate' );
# ----------------------------------------------------------------
XML-FeedPP-0.95/t/15_clone_item.t 0000644 0001750 0000144 00000005407 13265137544 017021 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More tests => 49;
BEGIN { use_ok('XML::FeedPP') };
# ----------------------------------------------------------------
my $link = "http://www.kawa.net/";
my $title = "Kawa.net XP";
my $description = "Yusuke Kawasaki's website";
my $author = "Yusuke Kawasaki";
my $pubDate = "2004-11-09T11:33:20Z";
# ----------------------------------------------------------------
my $media = {
'media:title' => 'Kawa.net xp',
'media:text' => 'Welcome to Kawa.net xp',
'media:text@type' => 'text',
'media:thumbnail@url' => 'http://www.kawa.net/xp/images/xp-title-256.gif',
'media:thumbnail@width' => 256,
'media:thumbnail@height' => 48,
'media:content@url' => 'http://www.kawa.net/xp/images/xp-title-512.gif',
'media:content@type' => 'image/gif',
'media:content@width' => 512,
'media:content@height' => 96,
};
# ----------------------------------------------------------------
my $feed0 = XML::FeedPP::RSS->new();
$feed0->link( $link );
my $item0 = $feed0->add_item( $link );
$item0->title( $title );
$item0->description( $description );
$item0->author( $author );
$item0->pubDate( $pubDate );
$item0->set( %$media );
# ----------------------------------------------------------------
my $prev = $item0;
# ----------------------------------------------------------------
my $feeds = [
XML::FeedPP::RSS->new(),
XML::FeedPP::RDF->new(),
XML::FeedPP::RDF->new(),
XML::FeedPP::Atom->new(),
XML::FeedPP::Atom->new(),
XML::FeedPP::RSS->new(),
];
# ----------------------------------------------------------------
foreach my $feed1 ( @$feeds ) {
my $type = ref $feed1;
$feed1->link( $link );
my $item1 = $feed1->add_item( $prev );
is( $item1->link(), $link, "$type link" );
is( $item1->title(), $title, "$type title" );
is( $item1->description(), $description, "$type description" );
is( $item1->author(), $author, "$type author" );
is( $item1->pubDate(), $pubDate, "$type pubDate" );
is( $item1->get('media:title'), $media->{'media:title'}, "$type media:title" );
is( $item1->get('media:text'), $media->{'media:text'}, "$type media:text" );
is( $item1->get('media:content@url'), $media->{'media:content@url'}, "$type media:content\@url" );
$prev = $item1;
}
# ----------------------------------------------------------------
;1;
# ----------------------------------------------------------------
XML-FeedPP-0.95/t/14_clear_item.t 0000644 0001750 0000144 00000003766 13265137544 017014 0 ustar 00markov users 0000000 0000000 # ----------------------------------------------------------------
use strict;
use Test::More tests => 28;
BEGIN { use_ok('XML::FeedPP') };
# ----------------------------------------------------------------
my $link0 = "http://www.kawa.net/";
my $title0 = "Site 0";
my $link1 = "http://www.kawa.net/xp/index-e.html";
my $title1 = "Entry 1";
my $link2 = "http://www.flickr.com/photos/u-suke/";
my $title2 = "Entry 2";
my $link3 = "http://kawa.at.webry.info/";
my $title3 = "Entry 3";
# ----------------------------------------------------------------
my $feeds = [
XML::FeedPP::RSS->new(),
XML::FeedPP::RDF->new(),
XML::FeedPP::Atom->new(),
];
# ----------------------------------------------------------------
foreach my $feed ( @$feeds ) {
my $type = ref $feed;
$feed->link( $link0 );
$feed->title( $title0 );
is( scalar $feed->get_item(), 0, "$type no item at first" );
my $item1 = $feed->add_item( $link1 );
$item1->title( $title1 );
my $item2 = $feed->add_item( $link2 );
$item2->title( $title2 );
my $item3 = $feed->add_item( $link3 );
$item3->title( $title3 );
is( scalar $feed->get_item(), 3, "$type 3 items" );
my $srcA = $feed->to_string();
ok( $srcA =~ m/clear_item();
is( scalar $feed->get_item(), 0, "$type no item after clear" );
my $srcB = $feed->to_string();
ok( $srcB !~ m/