rss2leafnode
view release on metacpan or search on metacpan
t/RSS2Leafnode.t view on Meta::CPAN
</channel>
</rss>
HERE
'http://foo.com/bar/index.html']) {
my ($xml, $want) = @$data;
my ($twig, $err) = $r2l->twig_parse ($xml);
my $elt = $twig->root->first_descendant('link') // die;
my $url = $elt->text;
my $got = App::RSS2Leafnode::XML::Twig::Other::elt_xml_based_uri($elt, $url);
is ($got, $want, "elt_xml_based_uri() $xml");
}
}
#------------------------------------------------------------------------------
# twig_parse()
{
my $r2l = App::RSS2Leafnode->new;
my $xml = <<'HERE';
<?xml version="1.0"?>
<a:feed xmlns:a="http://www.w3.org/2005/Atom">
<a:item a:foo="123"></a:item>
</a:feed>
HERE
my ($twig, $err) = $r2l->twig_parse ($xml);
{
my $elt = $twig->root;
is ($elt->tag, 'feed', 'twig_parse() <a:feed> stripped to <feed>');
}
{
my $elt = $twig->root->first_descendant(qr/item/);
is ($elt->tag, 'item',
'twig_parse() <a:item> stripped to <item>');
is_deeply ([$elt->att_names], ['atom:foo'],
'twig_parse() a:foo="" left as atom:foo="" for now');
}
}
#------------------------------------------------------------------------------
# elt_subtext()
{
my $r2l = App::RSS2Leafnode->new;
require URI;
$r2l->{'uri'} = URI->new('http://feedhost.com');
foreach my $data
(# Atom
[<<'HERE',
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<item>
<description>
<p>This bit subelem.</p><br/>
<![CDATA[This bit cdata.]]>
<b><a href="page.html">This bit more subelem</a></b><br/>
</description>
</item>
</channel>
</rss>
HERE
'<p>This bit subelem.</p><br/>
This bit cdata.
<b><a href="page.html">This bit more subelem</a></b><br/>'],
) {
my ($xml, $want) = @$data;
my ($twig, $err) = $r2l->twig_parse ($xml);
if ($err) { diag $err; }
my $elt = $twig->root->first_descendant('description');
my $got = App::RSS2Leafnode::elt_subtext($elt);
foreach ($got, $want) {
s/\s+/ /g; # ignore different whitespace
s/>\s+/>/g;
s/\s+</</g;
}
is ($got, $want, "elt_subtext() $xml");
}
}
#------------------------------------------------------------------------------
# uri_to_nntp_host()
{
require URI;
foreach my $data (['r2l.test', 'localhost:119'],
['news:r2l.test', 'localhost:119'],
['nntp:r2l.test', 'localhost:119'],
# default port
['news://foo.com/r2l.test', 'foo.com:119'],
['news://localhost/r2l.test', 'localhost:119'],
['news:///r2l.test', 'localhost:119'],
# is this bogus ?
# ['news://foo.com:/r2l.test', 'foo.com:119'],
# explicit port
['news://foo.com:8119/r2l.test', 'foo.com:8119'],
['news://localhost:8119/r2l.test', 'localhost:8119'],
['news://:8119/r2l.test', 'localhost:8119'],
) {
my ($uri_str, $want) = @$data;
my $uri = URI->new ($uri_str, 'news');
is (App::RSS2Leafnode::uri_to_nntp_host($uri),
$want,
"uri_to_nntp_host() $uri_str -> $uri");
}
}
#------------------------------------------------------------------------------
# isodate_to_rfc822()
foreach my $data (['Sun, 29 Jan 2006 17:17:44 GMT',
'Sun, 29 Jan 2006 17:17:44 GMT'],
['2000-01-01T12:00+00:00',
'Sat, 01 Jan 2000 12:00:00 +0000'],
( run in 0.764 second using v1.01-cache-2.11-cpan-13bb782fe5a )