Daizu

 view release on metacpan or  search on metacpan

t/80feeds.t  view on Meta::CPAN

   'atom: feed <link> blog type');

# atom feed <updated>
(@elem) = $feed_elem->getChildrenByTagName('updated');
is(scalar @elem, 1, 'atom: one feed <updated>');
like($elem[0]->textContent, qr/\A\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ\z/,
     'atom: feed <updated> is W3C datetime');

# atom entries
(@elem) = $feed_elem->getChildrenByTagName('entry');
is(scalar @elem, 3, 'atom: right number of feed <entry>');

my $entry_n = 1;
for my $entry_elem (@elem) {
    my @elem;

    my ($path, $exp_title, $exp_pubdate, $exp_url) =
        expected_article_values($entry_n);

    # atom entry <published>
    (@elem) = $entry_elem->getChildrenByTagName('published');
    is(scalar @elem, 1, 'atom: one entry <published>');
    is($elem[0]->textContent, $exp_pubdate,
       'atom: entry <published> is right datetime');

    # atom entry <updated>
    (@elem) = $entry_elem->getChildrenByTagName('updated');
    is(scalar @elem, 1, 'atom: one entry <updated>');
    like($elem[0]->textContent, qr/\A\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ\z/,
         'atom: entry <updated> is W3C datetime');

    # atom entry <id>
    (@elem) = $entry_elem->getChildrenByTagName('id');
    is(scalar @elem, 1, 'atom: one entry <id>');
    is($elem[0]->textContent, guid_uri_for_path($wc, $path),
       'atom: entry <id> right');

    # atom entry <link>
    (@elem) = $entry_elem->getChildrenByTagName('link');
    is(scalar @elem, 1, 'atom: one entry <link>');
    is($elem[0]->getAttribute('href'), $exp_url, 'atom: entry <link> href');
    is($elem[0]->getAttribute('rel'), 'alternate', 'atom: entry <link> rel');
    is($elem[0]->getAttribute('type'), 'text/html', 'atom: entry <link> type');

    # atom entry <title>
    (@elem) = $entry_elem->getChildrenByTagName('title');
    is(scalar @elem, 1, 'atom: one entry <title>');
    is($elem[0]->textContent, $exp_title, 'atom: entry <title> right');

    # atom entry <content>
    (@elem) = $entry_elem->getChildrenByTagName('content');
    is(scalar @elem, 1, 'atom: one entry <content>');
    is($elem[0]->getAttributeNS('http://www.w3.org/XML/1998/namespace', 'base'),
       $exp_url, 'atom: entry <content> xml:base');
    my $content_elem = $elem[0];
    is($content_elem->getAttribute('type'), 'xhtml',
       'atom: entry <content> type');
    (@elem) = $content_elem->getChildrenByTagName('div');
    is(scalar @elem, 1, 'atom: one entry <content><div>');
    is($elem[0]->namespaceURI, 'http://www.w3.org/1999/xhtml',
       'atom: entry <content><div> in XHTML namespace');

    # Article 5 has a syntax highlighted bit in, but for the feed
    # content the <span> elements and 'class' attribute should be
    # removed, so as not to confuse aggregators.
    if ($exp_title eq 'Article 5') {
        (@elem) = $content_elem->getElementsByTagName('span');
        is(scalar @elem, 0, 'atom: entry <content> has no <span> elements');
        (@elem) = $content_elem->getElementsByTagName('pre');
        SKIP: {
            is(scalar @elem, 1, 'atom: entry <content> has a <pre> element');
            skip '<pre> element missing', 1 unless @elem;
            ok(!$elem[0]->hasAttribute('class'), 'atom: <pre> has no class');
        }
    }

    ++$entry_n;
}


$xml = make_test_feed($cms, 'rss2', 'content');

# rss2 feed root
$feed_elem = $xml->documentElement;
is($feed_elem->localname, 'rss', 'rss2: <rss> root');
(@elem) = $feed_elem->getChildrenByTagName('channel');
is(scalar @elem, 1, 'rss2: one feed <channel>');
my $chan_elem = $elem[0];

# rss2 feed <title>
(@elem) = $chan_elem->getChildrenByTagName('title');
is(scalar @elem, 1, 'rss2: one feed <title>');
is($elem[0]->textContent, 'Foo Blog', 'rss2: right title');

# rss2 feed <description> - must exist even if it's empty
(@elem) = $chan_elem->getChildrenByTagName('description');
is(scalar @elem, 1, 'rss2: one feed <description>');

# rss2 feed <link>
(@elem) = $chan_elem->getChildrenByTagName('link');
is(scalar @elem, 1, 'rss2: one feed <link>');
is($elem[0]->textContent, 'http://foo.com/blog/', 'rss2: feed <link> right');

# rss2 feed <generator>
(@elem) = $chan_elem->getChildrenByTagName('generator');
is(scalar @elem, 1, 'rss2: one feed <generator>');
is($elem[0]->textContent, "http://www.daizucms.org/?v=$Daizu::VERSION",
   'rss2: feed <generator> content');

# rss2 feed <atom:link> to self
(@elem) = $chan_elem->getChildrenByTagName('atom:link');
is(scalar @elem, 1, 'rss2: one feed <atom:link>');
is($elem[0]->getAttribute('href'), 'http://foo.com/blog/feed.rss',
   'rss2: feed <link> self href');
is($elem[0]->getAttribute('rel'), 'self',
   'rss2: feed <link> self rel');
is($elem[0]->getAttribute('type'), 'application/rss+xml',
   'rss2: feed <link> self type');

# rss2 feed <lastBuildDate>
(@elem) = $chan_elem->getChildrenByTagName('lastBuildDate');



( run in 3.198 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )