]> Sergey Matveev's repositories - public-inbox.git/commitdiff
tests: switch to XML::TreePP for testing Atom feeds
authorEric Wong <e@yhbt.net>
Thu, 6 Feb 2020 20:59:45 +0000 (20:59 +0000)
committerEric Wong <e@yhbt.net>
Fri, 7 Feb 2020 07:21:18 +0000 (07:21 +0000)
XML::Feed pulls in a lot of dependencies, some of which XS.
That makes testing with blead or any non-OS-supplied Perl
installations more time consuming and more difficult because
of the need to have development headers and libraries for
libexpat1 or libxml2.

Performance from libexpat1 or libxml2 for our small tests cases
isn't relevant, either, and the pure Perl XML::TreePP seems up
to the task.  It's also available in CentOS 7.x, FreeBSD 11.x,
and Debian, at least.

INSTALL
ci/deps.perl
t/cgi.t
t/feed.t
t/psgi_v2.t

diff --git a/INSTALL b/INSTALL
index 0b4c3957eb139c16ca1b18c8efa9a9a9bba5e370..bf1c821a9448602d18c21faf3f761ec67272db38 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -174,9 +174,9 @@ Optional packages testing and development:
                                    pkg: perl5
                                    rpm: perl-Test-Simple
 
-- XML::Feed                        deb: libxml-feed-perl
-                                   pkg: p5-XML-Feed
-                                   rpm: perl-XML-Feed
+- XML::TreePP                      deb: libxml-treepp-perl
+                                   pkg: p5-XML-TreePP
+                                   rpm: perl-XML-TreePP
 
 standard MakeMaker installation (Perl)
 --------------------------------------
index 5ecf9c9f63ecefa8ac06cc91769f5a6fd959d24e..b960089f415366a8f6acaac95451701047f7ee2f 100755 (executable)
@@ -50,7 +50,7 @@ my $profiles = {
 
        # optional developer stuff
        devtest => [ qw(
-               XML::Feed
+               XML::TreePP
                curl
                w3m
                ) ],
diff --git a/t/cgi.t b/t/cgi.t
index dc1c8b8a58bd6c09d289732c7f43c0ddd728a721..97bdebd982a191e5cd96ec83620f097af7f721ae 100644 (file)
--- a/t/cgi.t
+++ b/t/cgi.t
@@ -121,18 +121,19 @@ EOF
                SKIP: { skip 'DBD::SQLite not available', 2 };
        }
 
-       my $have_xml_feed = eval { require XML::Feed; 1 } if $indexed;
-       if ($have_xml_feed) {
+       my $have_xml_treepp = eval { require XML::TreePP; 1 } if $indexed;
+       if ($have_xml_treepp) {
                $path = "/test/blahblah\@example.com/t.atom";
                $res = cgi_run($path);
                like($res->{head}, qr/^Status: 200 /, "atom returned 200");
                like($res->{head}, qr!^Content-Type: application/atom\+xml!m,
                        "search returned atom");
-               my $p = XML::Feed->parse(\($res->{body}));
-               is($p->format, "Atom", "parsed atom feed");
-               is(scalar $p->entries, 3, "parsed three entries");
+               my $t = XML::TreePP->new->parse($res->{body});
+               is(scalar @{$t->{feed}->{entry}}, 3, "parsed three entries");
+               like($t->{feed}->{-xmlns}, qr/\bAtom\b/,
+                               'looks like an an Atom feed');
        } else {
-               SKIP: { skip 'DBD::SQLite or XML::Feed missing', 2 };
+               SKIP: { skip 'DBD::SQLite or XML::TreePP missing', 2 };
        }
 }
 
index 5333d5827985419908bb1bf8a6ec782a4f5060a8..cfa09a7c68eae9549668c40b07589d8b20d6c3c4 100644 (file)
--- a/t/feed.t
+++ b/t/feed.t
@@ -7,7 +7,7 @@ use Email::MIME;
 use PublicInbox::Feed;
 use PublicInbox::Import;
 use PublicInbox::Inbox;
-my $have_xml_feed = eval { require XML::Feed; 1 };
+my $have_xml_treepp = eval { require XML::TreePP; 1 };
 use PublicInbox::TestCommon;
 
 sub string_feed {
@@ -79,12 +79,14 @@ EOF
        {
                my $feed = string_feed({ -inbox => $ibx });
                SKIP: {
-                       skip 'XML::Feed missing', 2 unless $have_xml_feed;
-                       my $p = XML::Feed->parse(\$feed);
-                       is($p->format, "Atom", "parsed atom feed");
-                       is(scalar $p->entries, 3, "parsed three entries");
-                       is($p->id, 'mailto:test@example',
-                               "id is set to default");
+                       skip 'XML::TreePP missing', 3 unless $have_xml_treepp;
+                       my $t = XML::TreePP->new->parse($feed);
+                       like($t->{feed}->{-xmlns}, qr/\bAtom\b/,
+                               'looks like an an Atom feed');
+                       is(scalar @{$t->{feed}->{entry}}, 3,
+                               'parsed three entries');
+                       is($t->{feed}->{id}, 'mailto:test@example',
+                               'id is set to default');
                }
 
                like($feed, qr/drop me/, "long quoted text kept");
@@ -111,10 +113,12 @@ EOF
        {
                my $spammy_feed = string_feed({ -inbox => $ibx });
                SKIP: {
-                       skip 'XML::Feed missing', 2 unless $have_xml_feed;
-                       my $p = XML::Feed->parse(\$spammy_feed);
-                       is($p->format, "Atom", "parsed atom feed");
-                       is(scalar $p->entries, 3, "parsed three entries");
+                       skip 'XML::TreePP missing', 2 unless $have_xml_treepp;
+                       my $t = XML::TreePP->new->parse($spammy_feed);
+                       like($t->{feed}->{-xmlns}, qr/\bAtom\b/,
+                               'looks like an an Atom feed');
+                       is(scalar @{$t->{feed}->{entry}}, 3,
+                               'parsed three entries');
                }
                like($spammy_feed, qr/SPAM/s, "spam showed up :<");
        }
@@ -127,10 +131,12 @@ EOF
        {
                my $feed = string_feed({ -inbox => $ibx });
                SKIP: {
-                       skip 'XML::Feed missing', 2 unless $have_xml_feed;
-                       my $p = XML::Feed->parse(\$feed);
-                       is($p->format, "Atom", "parsed atom feed");
-                       is(scalar $p->entries, 3, "parsed three entries");
+                       skip 'XML::TreePP missing', 2 unless $have_xml_treepp;
+                       my $t = XML::TreePP->new->parse($feed);
+                       like($t->{feed}->{-xmlns}, qr/\bAtom\b/,
+                               'looks like an an Atom feed');
+                       is(scalar @{$t->{feed}->{entry}}, 3,
+                               'parsed three entries');
                }
                unlike($feed, qr/SPAM/, "spam gone :>");
        }
index fc825acf621936c13b323e673d069fc268bf21dd..2c9387a496cb0d16b31019bf2297d12ecba3d834 100644 (file)
@@ -160,11 +160,11 @@ test_psgi(sub { $www->call(@_) }, sub {
        $res = $cb->(GET('/v2test/?q=m:a-mid@b&x=A'));
        is($res->code, 200, 'success with Atom search');
        SKIP: {
-               require_mods(qw(XML::Feed), 2);
-               $raw = $res->content;
-               my $p = XML::Feed->parse(\$raw);
-               is($p->format, "Atom", "parsed atom feed");
-               is(scalar $p->entries, 3, "parsed three entries");
+               require_mods(qw(XML::TreePP), 2);
+               my $t = XML::TreePP->new->parse($res->content);
+               like($t->{feed}->{-xmlns}, qr/\bAtom\b/,
+                       'looks like an an Atom feed');
+               is(scalar @{$t->{feed}->{entry}}, 3, 'parsed three entries');
        };
 
        local $SIG{__WARN__} = 'DEFAULT';