#!/usr/bin/perl
# Test the strict mode of RSS 0.9 and RSS 0.91
use strict;
use warnings;
use Test::More tests => 12;
use XML::RSS;
sub item_throws_like
{
local $Test::Builder::Level = $Test::Builder::Level + 1;
my ($rss, $params, $regex, $msg) = @_;
eval {
$rss->add_item(@$params);
};
like ($@, $regex, $msg);
}
{
my $rss = XML::RSS->new(version => "0.9");
$rss->strict(1);
$rss->channel(
title => "freshmeat.net",
link => "http://freshmeat.net",
description => "the one-stop-shop for all your Linux software needs",
);
# TEST
item_throws_like($rss, [link => "http://foobar.tld/from/"],
qr{\Atitle and link elements are required},
"strict - checking for exception on non-specified title"
);
# TEST
item_throws_like($rss, [title => "From Foobar"],
qr{\Atitle and link elements are required},
"strict - checking for exception on non-specified link"
);
# TEST
item_throws_like($rss, [link => "http://foobar.tld/",
title => ("Very long title indeed" x 50)],
qr{\Atitle cannot exceed},
"strict - checking for long title"
);
# TEST
item_throws_like($rss, [
link => "http://" . ("foobarminimoni" x 200) . ".tld/",
title => "Short Title"
],
qr{\Alink cannot exceed},
"strict - checking for long link"
);
# TEST
item_throws_like($rss, [
link => "http://foobar.tld/from/",
title => "Short Title",
description => ("This description is way too long!" x 100),
],
qr{\Adescription cannot exceed},
"strict - checking for a long description"
);
}
{
my $rss = XML::RSS->new(version => "0.9");
$rss->strict(1);
$rss->channel(
title => "freshmeat.net",
link => "http://freshmeat.net",
description => "the one-stop-shop for all your Linux software needs",
);
foreach my $i (1 .. 15)
{
$rss->add_item(
link => "http://foobar.tld/item-$i",
title => "Item $i",
);
}
# TEST
item_throws_like($rss, [
link => "http://foobar.tld/from/",
title => "Short Title",
description => "Good description",
],
qr{\Atotal items cannot exceed},
"strict - checking for too many items"
);
}
{
my $rss = XML::RSS->new(version => "0.9");
$rss->strict(1);
$rss->channel(
title => "freshmeat.net",
link => "http://freshmeat.net",
description => "the one-stop-shop for all your Linux software needs",
stupid_key => ("I think therefore I am." x 1000),
);
# TEST
ok (1, "Can add unknown keys of unlimited size without restriction");
}
{
my $rss = XML::RSS->new(version => "0.9");
$rss->strict(1);
eval {
$rss->channel(
title => "freshmeat.net",
link => "http://freshmeat.net",
description => ("I think therefore I am." x 1000),
);
};
# TEST
like ($@, qr{\Adescription cannot exceed 500 characters in length},
"Testing for exception thrown on a very long key"
);
}
{
my $rss = XML::RSS->new(version => "0.9");
$rss->strict(1);
eval {
$rss->skipHours(
hour => 5,
);
};
# TEST
like ($@, qr{\AUnregistered entity: Can't access skipHours field in object of class},
"Testing for exception thrown on an unknown field"
);
}
{
my $rss = XML::RSS->new(version => "0.9");
$rss->channel(
title => "freshmeat.net",
link => "http://freshmeat.net",
description => "the one-stop-shop for all your Linux software needs",
);
# TEST
is ($rss->channel()->{title},
"freshmeat.net",
"Testing for an AUTOLOAD accessor with 0 arguments"
);
# TEST
is ($rss->channel('title'),
"freshmeat.net",
"Testing for an AUTOLOAD accessor with 1 argument"
);
}
{
my $rss = XML::RSS->new(version => "0.91");
$rss->strict(1);
eval {
$rss->skipDays(
day => "FoolambdaCroakThemOfMonetaryJudgement"
);
};
# TEST
like ($@, qr{\Aday cannot exceed 10 characters in length},
"Testing for exception thrown on a key for 0.91"
);
}