]> Sergey Matveev's repositories - public-inbox.git/commitdiff
testcommon: add require_mods method and use it
authorEric Wong <e@80x24.org>
Sun, 22 Dec 2019 22:17:37 +0000 (22:17 +0000)
committerEric Wong <e@80x24.org>
Tue, 24 Dec 2019 03:47:01 +0000 (03:47 +0000)
This cuts down on lines of code in individual test cases and
fixes some misnamed error messages by using "$0" consistently.

This will also provide us with a method of swapping out
dependencies which provide equivalent functionality (e.g
"Xapian" SWIG can replace "Search::Xapian" XS bindings).

48 files changed:
lib/PublicInbox/TestCommon.pm
t/altid.t
t/altid_v2.t
t/convert-compact.t
t/edit.t
t/filter_rubylang.t
t/httpd-corner.t
t/httpd-https.t
t/httpd-unix.t
t/httpd.t
t/indexlevels-mirror.t
t/init.t
t/mda_filter_rubylang.t
t/msgmap.t
t/nntp.t
t/nntpd-tls.t
t/nntpd.t
t/over.t
t/plack.t
t/psgi_attach.t
t/psgi_bad_mids.t
t/psgi_mount.t
t/psgi_multipart_not.t
t/psgi_scan_all.t
t/psgi_search.t
t/psgi_text.t
t/psgi_v2.t
t/purge.t
t/replace.t
t/search-thr-index.t
t/search.t
t/solver_git.t
t/v1-add-remove-add.t
t/v1reindex.t
t/v2-add-remove-add.t
t/v2mda.t
t/v2mirror.t
t/v2reindex.t
t/v2writable.t
t/watch_filter_rubylang.t
t/watch_maildir.t
t/watch_maildir_v2.t
t/www_listing.t
t/xcpdb-reshard.t
xt/git-http-backend.t
xt/msgtime_cmp.t
xt/nntpd-validate.t
xt/perf-nntpd.t

index 372cafa60d3e38b6eedc22325b2b64423185f007..9680b94c2821ea8c5aee8902610d175b2f51eda2 100644 (file)
@@ -8,7 +8,7 @@ use parent qw(Exporter);
 use Fcntl qw(FD_CLOEXEC F_SETFD F_GETFD :seek);
 use POSIX qw(dup2);
 use IO::Socket::INET;
-our @EXPORT = qw(tmpdir tcp_server tcp_connect require_git
+our @EXPORT = qw(tmpdir tcp_server tcp_connect require_git require_mods
        run_script start_script key2sub);
 
 sub tmpdir (;$) {
@@ -59,6 +59,20 @@ sub require_git ($;$) {
        1;
 }
 
+sub require_mods {
+       my @mods = @_;
+       my $maybe = pop @mods if $mods[-1] =~ /\A[0-9]+\z/;
+       my @need;
+       for my $mod (@mods) {
+               eval "require $mod";
+               push @need, $mod if $@;
+       }
+       return unless @need;
+       my $m = join(', ', @need)." missing for $0";
+       Test::More::skip($m, $maybe) if $maybe;
+       Test::More::plan(skip_all => $m)
+}
+
 sub key2script ($) {
        my ($key) = @_;
        return $key if (index($key, '/') >= 0);
index fc5bcbc2349a09852a0003f962ebaf00a9e4e6d2..a3f710449b0870b1be8dd2873e856e8a513bf2d5 100644 (file)
--- a/t/altid.t
+++ b/t/altid.t
@@ -4,11 +4,7 @@ use strict;
 use warnings;
 use Test::More;
 use PublicInbox::TestCommon;
-foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for altid.t" if $@;
-}
-
+require_mods(qw(DBD::SQLite Search::Xapian));
 use_ok 'PublicInbox::Msgmap';
 use_ok 'PublicInbox::SearchIdx';
 use_ok 'PublicInbox::Import';
index 5bd62e136e7730c1f681150e3a4977bc2deee2eb..2d2379ecb026b328ec4ca163001c2e5ce0b7b5d5 100644 (file)
@@ -5,11 +5,7 @@ use warnings;
 use Test::More;
 use PublicInbox::TestCommon;
 require_git(2.6);
-foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for altid_v2.t" if $@;
-}
-
+require_mods(qw(DBD::SQLite Search::Xapian));
 use_ok 'PublicInbox::V2Writable';
 use_ok 'PublicInbox::Inbox';
 my ($tmpdir, $for_destroy) = tmpdir();
index c6da64eaa69daf0ab0bf9f3b1c1ce654c2b06ea4..6e4a8268e4d593136705ad3fa92fd8f85338faaa 100644 (file)
@@ -7,11 +7,7 @@ use PublicInbox::MIME;
 use PublicInbox::Spawn qw(which);
 use PublicInbox::TestCommon;
 require_git(2.6);
-my @mods = qw(DBD::SQLite Search::Xapian);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for convert-compact.t" if $@;
-}
+require_mods(qw(DBD::SQLite Search::Xapian));
 which('xapian-compact') or
        plan skip_all => 'xapian-compact missing for '.__FILE__;
 
index 9a78b45d3d95c9adef49f4817f914c7b112d7554..89283291d839e6debcf65964d0e703792b0c13ff 100644 (file)
--- a/t/edit.t
+++ b/t/edit.t
@@ -11,12 +11,7 @@ require PublicInbox::InboxWritable;
 require PublicInbox::Config;
 use PublicInbox::MID qw(mid_clean);
 
-my @mods = qw(DBI DBD::SQLite);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "missing $mod for $0" if $@;
-};
-
+require_mods('DBD::SQLite');
 my ($tmpdir, $for_destroy) = tmpdir();
 my $inboxdir = "$tmpdir/v2";
 my $ibx = PublicInbox::Inbox->new({
index 576cbdeb61883fc5b2439c01aaf019a80f9909d4..1288b72f1b8eddf92098f15652abffce8190a00a 100644 (file)
@@ -23,8 +23,7 @@ is($ret, $mime, "delivery successful");
 is($mime->body, "keep this\n", 'normal message filtered OK');
 
 SKIP: {
-       eval 'require DBD::SQLite';
-       skip 'DBD::SQLite missing for altid mapping', 4 if $@;
+       require_mods('DBD::SQLite', 4);
        use_ok 'PublicInbox::Inbox';
        my ($git_dir, $for_destroy) = tmpdir();
        is(mkdir("$git_dir/public-inbox"), 1, "created public-inbox dir");
index fb3ffcf1fba6abaadd38ca95ea754a8c2e56d947..4ef1618a60f171bb5abe1c746994671f3ae443df 100644 (file)
@@ -7,19 +7,14 @@ use warnings;
 use Test::More;
 use Time::HiRes qw(gettimeofday tv_interval);
 use PublicInbox::Spawn qw(which spawn);
-
-foreach my $mod (qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for httpd-corner.t" if $@;
-}
-
+use PublicInbox::TestCommon;
+require_mods(qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status));
 use Digest::SHA qw(sha1_hex);
 use IO::Socket;
 use IO::Socket::UNIX;
 use Fcntl qw(:seek);
 use Socket qw(IPPROTO_TCP TCP_NODELAY SOL_SOCKET);
 use POSIX qw(mkfifo);
-use PublicInbox::TestCommon;
 my ($tmpdir, $for_destroy) = tmpdir();
 my $fifo = "$tmpdir/fifo";
 ok(defined mkfifo($fifo, 0777), 'created FIFO');
index 1d2e4d5c25e0aa51da150d5985808b9277865c1c..265febe5ea843f7afb2691ab43657c1a5c8aafde 100644 (file)
@@ -4,11 +4,9 @@ use strict;
 use warnings;
 use Test::More;
 use Socket qw(SOCK_STREAM IPPROTO_TCP SOL_SOCKET);
+use PublicInbox::TestCommon;
 # IO::Poll is part of the standard library, but distros may split them off...
-foreach my $mod (qw(IO::Socket::SSL IO::Poll)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for $0" if $@;
-}
+require_mods(qw(IO::Socket::SSL IO::Poll));
 my $cert = 'certs/server-cert.pem';
 my $key = 'certs/server-key.pem';
 unless (-r $key && -r $cert) {
@@ -17,7 +15,6 @@ unless (-r $key && -r $cert) {
 }
 use_ok 'PublicInbox::TLS';
 use_ok 'IO::Socket::SSL';
-use PublicInbox::TestCommon;
 my $psgi = "./t/httpd-corner.psgi";
 my ($tmpdir, $for_destroy) = tmpdir();
 my $err = "$tmpdir/stderr.log";
index bd4ee12eeb6869101763f9bef05eaa54d49facab..6da2ac6be54455ea04de89a5c8e82fe2ad2b0a8c 100644 (file)
@@ -6,12 +6,7 @@ use warnings;
 use Test::More;
 use PublicInbox::TestCommon;
 use Errno qw(EADDRINUSE);
-
-foreach my $mod (qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for httpd-unix.t" if $@;
-}
-
+require_mods(qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status));
 use IO::Socket::UNIX;
 my ($tmpdir, $for_destroy) = tmpdir();
 my $unix = "$tmpdir/unix.sock";
@@ -85,8 +80,7 @@ check_sock($unix);
 }
 
 SKIP: {
-       eval 'require Net::Server::Daemonize';
-       skip('Net::Server missing for pid-file/daemonization test', 20) if $@;
+       require_mods('Net::Server::Daemonize', 20);
        my $pid_file = "$tmpdir/pid";
        for my $w (qw(-W0 -W1)) {
                # wait for daemonization
index 517329fbc5a37db2863479a6f46975c3c17a143a..880c69e62f601d9d54b48bd7624e6ff98f898f83 100644 (file)
--- a/t/httpd.t
+++ b/t/httpd.t
@@ -3,13 +3,9 @@
 use strict;
 use warnings;
 use Test::More;
-
-foreach my $mod (qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for httpd.t" if $@;
-}
-use Socket qw(IPPROTO_TCP SOL_SOCKET);
 use PublicInbox::TestCommon;
+use Socket qw(IPPROTO_TCP SOL_SOCKET);
+require_mods(qw(Plack::Util Plack::Builder HTTP::Date HTTP::Status));
 
 # FIXME: too much setup
 my ($tmpdir, $for_destroy) = tmpdir();
index 876abd2c133edfacf6c6989a06f290c2e66c5499..e4313faa73fffd2a3aebceb5053651df64c672f7 100644 (file)
@@ -10,11 +10,7 @@ require PublicInbox::Admin;
 use PublicInbox::TestCommon;
 my $PI_TEST_VERSION = $ENV{PI_TEST_VERSION} || 2;
 require_git('2.6') if $PI_TEST_VERSION == 2;
-
-foreach my $mod (qw(DBD::SQLite)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for $0" if $@;
-}
+require_mods(qw(DBD::SQLite));
 
 my $mime = PublicInbox::MIME->create(
        header => [
index f70d1c2036f9d5ab2776764efa04d109d5e588eb..786add137cd47b27fe8641038fbc413c242e8a00 100644 (file)
--- a/t/init.t
+++ b/t/init.t
@@ -50,10 +50,7 @@ sub quiet_fail {
 }
 
 SKIP: {
-       foreach my $mod (qw(DBD::SQLite Search::Xapian::WritableDatabase)) {
-               eval "require $mod";
-               skip "$mod missing for v2", 2 if $@;
-       }
+       require_mods(qw(DBD::SQLite Search::Xapian::WritableDatabase), 2);
        require_git(2.6, 1) or skip "git 2.6+ required", 2;
        local $ENV{PI_DIR} = "$tmpdir/.public-inbox/";
        my $cfgfile = "$ENV{PI_DIR}/config";
index a5b6af3c011ded71d540b4451de762de24a53e48..fec61b6887e118e1907faa156c74aa96db6f7d31 100644 (file)
@@ -7,12 +7,7 @@ use PublicInbox::MIME;
 use PublicInbox::Config;
 use PublicInbox::TestCommon;
 require_git(2.6);
-my @mods = qw(DBD::SQLite Search::Xapian);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for mda_filter_rubylang.t" if $@;
-}
-
+require_mods(qw(DBD::SQLite Search::Xapian));
 use_ok 'PublicInbox::V2Writable';
 my ($tmpdir, $for_destroy) = tmpdir();
 my $pi_config = "$tmpdir/pi_config";
index 6edeed5645fcef62dcaa92a991e2861dc72df990..197b0e554c297be0a76bce6e2b8140864088ff5c 100644 (file)
@@ -4,12 +4,7 @@ use strict;
 use warnings;
 use Test::More;
 use PublicInbox::TestCommon;
-
-foreach my $mod (qw(DBD::SQLite)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for nntpd.t" if $@;
-}
-
+require_mods('DBD::SQLite');
 use_ok 'PublicInbox::Msgmap';
 my ($tmpdir, $for_destroy) = tmpdir();
 my $d = PublicInbox::Msgmap->new($tmpdir, 1);
index aabfd4ffb46798f58240405f0cd70cb0d12fed79..11a175bb47d65c8c5b624e29b45dda4074731d9f 100644 (file)
--- a/t/nntp.t
+++ b/t/nntp.t
@@ -3,12 +3,8 @@
 use strict;
 use warnings;
 use Test::More;
-
-foreach my $mod (qw(DBD::SQLite Data::Dumper)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for nntp.t" if $@;
-}
-
+use PublicInbox::TestCommon;
+require_mods(qw(DBD::SQLite Data::Dumper));
 use_ok 'PublicInbox::NNTP';
 use_ok 'PublicInbox::Inbox';
 
index 25b7bd1c0913d7bf91a6b41167ca862b9041a6b2..edc1fab4bbb40a2755c204356126c03a981cae8d 100644 (file)
@@ -4,12 +4,10 @@ use strict;
 use warnings;
 use Test::More;
 use Socket qw(SOCK_STREAM IPPROTO_TCP SOL_SOCKET);
+use PublicInbox::TestCommon;
 # IO::Poll and Net::NNTP are part of the standard library, but
 # distros may split them off...
-foreach my $mod (qw(DBD::SQLite IO::Socket::SSL Net::NNTP IO::Poll)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for $0" if $@;
-}
+require_mods(qw(DBD::SQLite IO::Socket::SSL Net::NNTP IO::Poll));
 Net::NNTP->can('starttls') or
        plan skip_all => 'Net::NNTP does not support TLS';
 IO::Socket::SSL->VERSION(2.007) or
@@ -24,7 +22,6 @@ unless (-r $key && -r $cert) {
 
 use_ok 'PublicInbox::TLS';
 use_ok 'IO::Socket::SSL';
-use PublicInbox::TestCommon;
 require PublicInbox::InboxWritable;
 require PublicInbox::MIME;
 require PublicInbox::SearchIdx;
index c3712b67ea337c690f9f6db14ae95463dc97cf37..243b8e5637ce80ba7659a6df3b2468f288ffcd6c 100644 (file)
--- a/t/nntpd.t
+++ b/t/nntpd.t
@@ -3,10 +3,8 @@
 use strict;
 use warnings;
 use Test::More;
-foreach my $mod (qw(DBD::SQLite)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for nntpd.t" if $@;
-}
+use PublicInbox::TestCommon;
+require_mods(qw(DBD::SQLite));
 require PublicInbox::SearchIdx;
 require PublicInbox::Msgmap;
 require PublicInbox::InboxWritable;
@@ -15,7 +13,6 @@ use IO::Socket;
 use Socket qw(IPPROTO_TCP TCP_NODELAY);
 use Net::NNTP;
 use Sys::Hostname;
-use PublicInbox::TestCommon;
 
 # FIXME: make easier to test both versions
 my $version = $ENV{PI_TEST_VERSION} || 2;
@@ -106,10 +103,12 @@ EOF
        SKIP: {
                $n->can('starttls') or
                        skip('Net::NNTP too old to support STARTTLS', 2);
+               require_mods('IO::Socket::SSL', 2);
                eval {
-                       require IO::Socket::SSL;
                        IO::Socket::SSL->VERSION(2.007);
-               } or skip('IO::Socket::SSL <2.007 not supported by Net::NNTP');
+               } or skip(<<EOF, 2);
+IO::Socket::SSL <2.007 not supported by Net::NNTP
+EOF
                ok(!$n->starttls, 'STARTTLS fails when unconfigured');
                is($n->code, 580, 'got 580 code on server w/o TLS');
        };
index 5e33a0b0dc20aa5cc097923da91fc1d72f2b60aa..4e630bcd37d7ab6cc8f79ffd2e4c503f81f7dee3 100644 (file)
--- a/t/over.t
+++ b/t/over.t
@@ -5,11 +5,7 @@ use warnings;
 use Test::More;
 use Compress::Zlib qw(compress);
 use PublicInbox::TestCommon;
-foreach my $mod (qw(DBD::SQLite)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for over.t" if $@;
-}
-
+require_mods('DBD::SQLite');
 use_ok 'PublicInbox::OverIdx';
 my ($tmpdir, $for_destroy) = tmpdir();
 my $over = PublicInbox::OverIdx->new("$tmpdir/over.sqlite3");
index c9a2cf79521fbedf35befa20002778c100f69f79..f0dc4bbb515777299d437d13ec801f6494fdf94f 100644 (file)
--- a/t/plack.t
+++ b/t/plack.t
@@ -12,10 +12,7 @@ my $maindir = "$tmpdir/main.git";
 my $addr = 'test-public@example.com';
 my $cfgpfx = "publicinbox.test";
 my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for plack.t" if $@;
-}
+require_mods(@mods);
 use_ok 'PublicInbox::Import';
 use_ok 'PublicInbox::Git';
 my @ls;
index 5a7129f91ba35bc38f7299c663a2e5c0d4f88300..0c3174bc241c7c257567ea0905307c876316ae50 100644 (file)
@@ -10,10 +10,7 @@ my $maindir = "$tmpdir/main.git";
 my $addr = 'test-public@example.com';
 my $cfgpfx = "publicinbox.test";
 my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for plack.t" if $@;
-}
+require_mods(@mods);
 use_ok $_ foreach @mods;
 use PublicInbox::Import;
 use PublicInbox::Git;
index b22f36523fa75cb70de42dca267191307ee52f03..5cdd249e7ea3608fdc0c45da2de85e826d4c32cd 100644 (file)
@@ -9,10 +9,7 @@ use PublicInbox::WWW;
 use PublicInbox::TestCommon;
 my @mods = qw(DBD::SQLite HTTP::Request::Common Plack::Test
                URI::Escape Plack::Builder);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for psgi_bad_mids.t" if $@;
-}
+require_mods(@mods);
 use_ok($_) for @mods;
 use_ok 'PublicInbox::V2Writable';
 my ($inboxdir, $for_destroy) = tmpdir();
index a2621a2ad3a1931e280d01a7436d4b69d8743c6a..751c13b715a0c8616a79e7e5b0ef58eac3da8497 100644 (file)
@@ -10,10 +10,7 @@ my $maindir = "$tmpdir/main.git";
 my $addr = 'test-public@example.com';
 my $cfgpfx = "publicinbox.test";
 my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for plack.t" if $@;
-}
+require_mods(@mods);
 use_ok $_ foreach @mods;
 use PublicInbox::Import;
 use PublicInbox::Git;
@@ -88,10 +85,7 @@ test_psgi($app, sub {
 });
 
 SKIP: {
-       my @mods = qw(DBI DBD::SQLite Search::Xapian IO::Uncompress::Gunzip);
-       foreach my $mod (@mods) {
-               eval "require $mod" or skip "$mod not available: $@", 3;
-       }
+       require_mods(qw(DBD::SQLite Search::Xapian IO::Uncompress::Gunzip), 3);
        my $ibx = $config->lookup_name('test');
        require_ok 'PublicInbox::SearchIdx';
        PublicInbox::SearchIdx->new($ibx, 1)->index_sync;
index 9384d14a29ecf1ff630f4dd2813048b836965422..fbc09f55bd042e2f9a6fcf1f43370cd6821cd6f2 100644 (file)
@@ -9,10 +9,7 @@ use PublicInbox::WWW;
 use PublicInbox::TestCommon;
 my @mods = qw(DBD::SQLite Search::Xapian HTTP::Request::Common
               Plack::Test URI::Escape Plack::Builder Plack::Test);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for psgi_multipart_not.t" if $@;
-}
+require_mods(@mods);
 use_ok($_) for @mods;
 use_ok 'PublicInbox::V2Writable';
 my ($repo, $for_destroy) = tmpdir();
index fa636d324cbfd8888f99e7649d8495adfad6d0a5..09ed96e0477e5636beb89945f76e3160cf3d4e5f 100644 (file)
@@ -7,10 +7,7 @@ use Email::MIME;
 use PublicInbox::Config;
 use PublicInbox::TestCommon;
 my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape DBD::SQLite);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for psgi_scan_all.t" if $@;
-}
+require_mods(@mods);
 use_ok 'PublicInbox::V2Writable';
 foreach my $mod (@mods) { use_ok $mod; }
 my ($tmp, $for_destroy) = tmpdir();
index d1050437b232cc5e70f03c7072f37671e46af99c..95749c66b6831745b14a39c4f7155f2b7b265d5d 100644 (file)
@@ -12,11 +12,7 @@ use bytes (); # only for bytes::length
 use PublicInbox::TestCommon;
 my @mods = qw(DBD::SQLite Search::Xapian HTTP::Request::Common Plack::Test
                URI::Escape Plack::Builder);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for psgi_search.t" if $@;
-}
-
+require_mods(@mods);
 use_ok $_ foreach (@mods, qw(PublicInbox::SearchIdx));
 my ($tmpdir, $for_destroy) = tmpdir();
 
index ee4d9f1478076df0b9c14195988a4ca550f8d5ed..757a1294ba6d6d0312da3aa7154e02133adfb9e0 100644 (file)
@@ -10,10 +10,7 @@ my $maindir = "$tmpdir/main.git";
 my $addr = 'test-public@example.com';
 my $cfgpfx = "publicinbox.test";
 my @mods = qw(HTTP::Request::Common Plack::Test URI::Escape);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for psgi_text.t" if $@;
-}
+require_mods(@mods);
 use_ok $_ foreach @mods;
 use PublicInbox::Import;
 use PublicInbox::Git;
index 101765168d44068b2843a9d4a2345399dbddf5e1..9a81ee9ada54a3c227ce849ee3bb02162c3d6a6f 100644 (file)
@@ -11,10 +11,7 @@ use PublicInbox::WWW;
 use PublicInbox::MID qw(mids);
 my @mods = qw(DBD::SQLite Search::Xapian HTTP::Request::Common Plack::Test
                URI::Escape Plack::Builder);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for psgi_v2_dupes.t" if $@;
-}
+require_mods(@mods);
 use_ok($_) for @mods;
 use_ok 'PublicInbox::V2Writable';
 my ($inboxdir, $for_destroy) = tmpdir();
index 0262f79153db1c5ac97edce4b61562e787b0cc4f..7f49bc60e30ed84f43dc2854f7b9be0b00d320d1 100644 (file)
--- a/t/purge.t
+++ b/t/purge.t
@@ -5,11 +5,7 @@ use warnings;
 use Test::More;
 use PublicInbox::TestCommon;
 require_git(2.6);
-my @mods = qw(DBI DBD::SQLite);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "missing $mod for t/purge.t" if $@;
-};
+require_mods(qw(DBD::SQLite));
 use Cwd qw(abs_path); # we need this since we chdir below
 local $ENV{HOME} = abs_path('t');
 my $purge = abs_path('blib/script/public-inbox-purge');
index 2346c3a19d1103cbee1d00f4f5d1512bebd51c84..085b49eea102c0cf7722bd4c89ac5de14515288c 100644 (file)
@@ -8,11 +8,7 @@ use PublicInbox::InboxWritable;
 use PublicInbox::TestCommon;
 use Cwd qw(abs_path);
 require_git(2.6); # replace is v2 only, for now...
-foreach my $mod (qw(DBD::SQLite)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for $0" if $@;
-}
-
+require_mods(qw(DBD::SQLite));
 local $ENV{HOME} = abs_path('t');
 
 sub test_replace ($$$) {
index 47454fe7c868af566fed10048b35c9bd4049416a..4750503cafc52aa43dbccff880aa84ef11b5b015 100644 (file)
@@ -4,16 +4,12 @@ use strict;
 use warnings;
 use bytes (); # only for bytes::length
 use Test::More;
+use PublicInbox::TestCommon;
 use PublicInbox::MID qw(mids);
 use Email::MIME;
-my @mods = qw(DBI DBD::SQLite Search::Xapian);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "missing $mod for $0" if $@;
-}
+require_mods(qw(DBD::SQLite Search::Xapian));
 require PublicInbox::SearchIdx;
 require PublicInbox::Inbox;
-use PublicInbox::TestCommon;
 my ($tmpdir, $for_destroy) = tmpdir();
 my $git_dir = "$tmpdir/a.git";
 
index 33a7596e625c681f21364c18443a2dad283bc1f3..c40e1363d07b7b91b77568ef0988ec8f9d25b9be 100644 (file)
@@ -3,14 +3,10 @@
 use strict;
 use warnings;
 use Test::More;
-my @mods = qw(DBI DBD::SQLite Search::Xapian);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "missing $mod for $0" if $@;
-};
+use PublicInbox::TestCommon;
+require_mods(qw(DBD::SQLite Search::Xapian));
 require PublicInbox::SearchIdx;
 require PublicInbox::Inbox;
-use PublicInbox::TestCommon;
 use Email::MIME;
 my ($tmpdir, $for_destroy) = tmpdir();
 my $git_dir = "$tmpdir/a.git";
index 99ee9b5ea2337ed0bfd73788ed63c269de003e71..4cadd06adf10acdca5613713f94a400a30599f13 100644 (file)
@@ -7,12 +7,7 @@ use Cwd qw(abs_path);
 use PublicInbox::TestCommon;
 require_git(2.6);
 use PublicInbox::Spawn qw(spawn);
-
-my @mods = qw(DBD::SQLite Search::Xapian);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for $0" if $@;
-}
+require_mods(qw(DBD::SQLite Search::Xapian));
 chomp(my $git_dir = `git rev-parse --git-dir 2>/dev/null`);
 plan skip_all => "$0 must be run from a git working tree" if $?;
 
@@ -116,11 +111,7 @@ is_deeply($res, $hinted, 'hints work (or did not hurt :P');
 
 my @psgi = qw(HTTP::Request::Common Plack::Test URI::Escape Plack::Builder);
 SKIP: {
-       my @missing;
-       for my $mod (@psgi) {
-               eval("require $mod") or push(@missing, $mod);
-       }
-       skip("missing: ".join(', ', @missing), 7 + scalar(@psgi)) if @missing;
+       require_mods(@psgi, 7 + scalar(@psgi));
        use_ok($_) for @psgi;
        my $binfoo = "$inboxdir/binfoo.git";
        system(qw(git init --bare -q), $binfoo) == 0 or die "git init: $?";
index aabb2fa53ef648b3e08fddd62836f3ca77c82247..6fac5a0277ed2bcced9dd7cb6fef977e0da94c47 100644 (file)
@@ -6,11 +6,7 @@ use Test::More;
 use PublicInbox::MIME;
 use PublicInbox::Import;
 use PublicInbox::TestCommon;
-
-foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for v1-add-remove-add.t" if $@;
-}
+require_mods(qw(DBD::SQLite Search::Xapian));
 require PublicInbox::SearchIdx;
 my ($inboxdir, $for_destroy) = tmpdir();
 is(system(qw(git init --bare -q), $inboxdir), 0);
index 321b3b21e7b47eb7510491bf212afc871265abb4..bf1d45f02de425bf04f9f6b6803f14dc9ecdae09 100644 (file)
@@ -8,11 +8,7 @@ use PublicInbox::ContentId qw(content_digest);
 use File::Path qw(remove_tree);
 use PublicInbox::TestCommon;
 require_git(2.6);
-
-foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for v1reindex.t" if $@;
-}
+require_mods(qw(DBD::SQLite Search::Xapian));
 use_ok 'PublicInbox::SearchIdx';
 use_ok 'PublicInbox::Import';
 my ($inboxdir, $for_destroy) = tmpdir();
index 7cce249376ea1a5a320af59d0de3b38c98de4398..8be551234017f3c60a7375257ab4764fa4ee22ae 100644 (file)
@@ -6,11 +6,7 @@ use Test::More;
 use PublicInbox::MIME;
 use PublicInbox::TestCommon;
 require_git(2.6);
-
-foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for v2-add-remove-add.t" if $@;
-}
+require_mods(qw(DBD::SQLite Search::Xapian));
 use_ok 'PublicInbox::V2Writable';
 my ($inboxdir, $for_destroy) = tmpdir();
 my $ibx = {
index 4b1249ea14f0bc00e45fc78e273637a11e7e7ef3..bd49a38ad36d48a8127df4706537ae192d9b57a4 100644 (file)
--- a/t/v2mda.t
+++ b/t/v2mda.t
@@ -10,10 +10,7 @@ use PublicInbox::TestCommon;
 require_git(2.6);
 
 my $V = 2;
-foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for v2mda.t" if $@;
-}
+require_mods(qw(DBD::SQLite Search::Xapian));
 use_ok 'PublicInbox::V2Writable';
 my ($tmpdir, $for_destroy) = tmpdir();
 my $ibx = {
index e3c384fa77a1f546741e153a59492d2d96b49c20..64b2f636e2e652cee68758cfb5424a29b9e10d2e 100644 (file)
@@ -9,11 +9,8 @@ require_git(2.6);
 local $ENV{HOME} = abs_path('t');
 
 # Integration tests for HTTP cloning + mirroring
-foreach my $mod (qw(Plack::Util Plack::Builder
-                       HTTP::Date HTTP::Status Search::Xapian DBD::SQLite)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for v2mirror.t" if $@;
-}
+require_mods(qw(Plack::Util Plack::Builder
+               HTTP::Date HTTP::Status Search::Xapian DBD::SQLite));
 use IO::Socket;
 use POSIX qw(dup2);
 use_ok 'PublicInbox::V2Writable';
index a14bf798d6f6c67a8e92532ba0d26460c63a7354..2c6bdd571979c0777c5f21293a6024307bb90365 100644 (file)
@@ -8,11 +8,7 @@ use PublicInbox::ContentId qw(content_digest);
 use File::Path qw(remove_tree);
 use PublicInbox::TestCommon;
 require_git(2.6);
-
-foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for v2reindex.t" if $@;
-}
+require_mods(qw(DBD::SQLite Search::Xapian));
 use_ok 'PublicInbox::V2Writable';
 my ($inboxdir, $for_destroy) = tmpdir();
 my $ibx_config = {
index bf2064d0055905525f1645cca4c832bbe94b5630..63f27f962b896dd89653376f17e463b37311b312 100644 (file)
@@ -8,10 +8,7 @@ use PublicInbox::ContentId qw(content_digest);
 use PublicInbox::TestCommon;
 use Cwd qw(abs_path);
 require_git(2.6);
-foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for nntpd.t" if $@;
-}
+require_mods(qw(DBD::SQLite Search::Xapian));
 local $ENV{HOME} = abs_path('t');
 use_ok 'PublicInbox::V2Writable';
 umask 007;
index 0ea680eef853cdecbde0b40b7c09e6006becd666..72895d8595ccfbf97c8bf02b083ebe78bf283b23 100644 (file)
@@ -6,12 +6,7 @@ use PublicInbox::TestCommon;
 use Test::More;
 use PublicInbox::MIME;
 use PublicInbox::Config;
-my @mods = qw(Filesys::Notify::Simple DBD::SQLite Search::Xapian);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for watch_filter_rubylang_v2.t" if $@;
-}
-
+require_mods(qw(Filesys::Notify::Simple DBD::SQLite Search::Xapian));
 use_ok 'PublicInbox::WatchMaildir';
 use_ok 'PublicInbox::Emergency';
 my ($tmpdir, $for_destroy) = tmpdir();
index 38297043d9b7199d9fde8a6baa85fed5a00fdfa6..a5fb52b2b083a1a94995b2849eaf8c699497b501 100644 (file)
@@ -6,12 +6,7 @@ use Email::MIME;
 use Cwd;
 use PublicInbox::Config;
 use PublicInbox::TestCommon;
-my @mods = qw(Filesys::Notify::Simple);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for watch_maildir.t" if $@;
-}
-
+require_mods(qw(Filesys::Notify::Simple));
 my ($tmpdir, $for_destroy) = tmpdir();
 my $git_dir = "$tmpdir/test.git";
 my $maildir = "$tmpdir/md";
index 77e4b981f83515dbd4e107fc1029aac8fac97159..db407f78e2e95d9fae7a16df20c66a9d75d7648b 100644 (file)
@@ -7,11 +7,7 @@ use Cwd;
 use PublicInbox::Config;
 use PublicInbox::TestCommon;
 require_git(2.6);
-my @mods = qw(Search::Xapian DBD::SQLite Filesys::Notify::Simple);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for watch_maildir_v2.t" if $@;
-}
+require_mods(qw(Search::Xapian DBD::SQLite Filesys::Notify::Simple));
 require PublicInbox::V2Writable;
 my ($tmpdir, $for_destroy) = tmpdir();
 my $inboxdir = "$tmpdir/v2";
index 75698ee53c2ee744f37175d361aa28c6db5e32a7..4fcb43ea7bf88eaec38025e3c53ddc9971fde117 100644 (file)
@@ -6,12 +6,8 @@ use warnings;
 use Test::More;
 use PublicInbox::Spawn qw(which);
 use PublicInbox::TestCommon;
-my @mods = qw(URI::Escape Plack::Builder Digest::SHA
-               IO::Compress::Gzip IO::Uncompress::Gunzip HTTP::Tiny);
-foreach my $mod (@mods) {
-       eval("require $mod") or plan skip_all => "$mod missing for $0";
-}
-
+require_mods(qw(URI::Escape Plack::Builder Digest::SHA
+               IO::Compress::Gzip IO::Uncompress::Gunzip HTTP::Tiny));
 require PublicInbox::WwwListing;
 my $json = eval { PublicInbox::WwwListing::_json() };
 plan skip_all => "JSON module missing: $@" if $@;
index 0d78d2b200b3e58136a9d5e997f4de788c114f42..1eae234dc59d52bf34c431fc20871ced602f2e89 100644 (file)
@@ -3,12 +3,8 @@
 use strict;
 use warnings;
 use Test::More;
-my @mods = qw(DBI DBD::SQLite Search::Xapian);
-foreach my $mod (@mods) {
-       eval "require $mod";
-       plan skip_all => "missing $mod for $0" if $@;
-};
 use PublicInbox::TestCommon;
+require_mods(qw(DBD::SQLite Search::Xapian));
 require_git('2.6');
 use PublicInbox::MIME;
 use PublicInbox::InboxWritable;
index 5f96369f0f02adf21b40289d8d7aaaa88b906efc..421c6316ed43a31c346c3e9d744d32e788a41020 100644 (file)
@@ -11,12 +11,8 @@ use PublicInbox::TestCommon;
 
 my $git_dir = $ENV{GIANT_GIT_DIR};
 plan 'skip_all' => 'GIANT_GIT_DIR not defined' unless $git_dir;
-foreach my $mod (qw(BSD::Resource
-                       Plack::Util Plack::Builder
-                       HTTP::Date HTTP::Status Net::HTTP)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for git-http-backend.t" if $@;
-}
+require_mods(qw(BSD::Resource Plack::Util Plack::Builder
+               HTTP::Date HTTP::Status Net::HTTP));
 my $psgi = "./t/git-http-backend.psgi";
 my ($tmpdir, $for_destroy) = tmpdir();
 my $err = "$tmpdir/stderr.log";
index 469756c61357b3ec5b5373023a9b53f0a48ea2b8..4f798006fb63685830925e8033c3a2abaeb175a7 100644 (file)
@@ -9,7 +9,7 @@ use PublicInbox::Inbox;
 use PublicInbox::Git;
 use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp);
 use POSIX qw(strftime);
-eval { require Date::Parse } or plan skip_all => "Date::Parse missing for $0";
+require_mods('Date::Parse');
 my $git;
 my ($inboxdir, $git_dir) = @ENV{qw(GIANT_INBOX_DIR GIANT_GIT_DIR)};
 if (defined $inboxdir) {
index c82d46e27ef156a1499aaadee3ef406655e83dcb..bf5c1ba8e9144435467ab277edea0b7457dd025e 100644 (file)
@@ -8,16 +8,13 @@ use Test::More;
 use Symbol qw(gensym);
 use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
 use POSIX qw(_exit);
+use PublicInbox::TestCommon;
 my $inbox_dir = $ENV{GIANT_INBOX_DIR};
 plan skip_all => "GIANT_INBOX_DIR not defined for $0" unless $inbox_dir;
 my $mid = $ENV{TEST_MID};
 
 # Net::NNTP is part of the standard library, but distros may split it off...
-foreach my $mod (qw(DBD::SQLite Net::NNTP Compress::Raw::Zlib)) {
-       eval "require $mod";
-       plan skip_all => "$mod missing for $0" if $@;
-}
-
+require_mods(qw(DBD::SQLite Net::NNTP Compress::Raw::Zlib));
 my $test_compress = Net::NNTP->can('compress');
 if (!$test_compress) {
        diag 'Your Net::NNTP does not yet support compression';
@@ -29,7 +26,6 @@ my $key = 'certs/server-key.pem';
 if ($test_tls && !-r $key || !-r $cert) {
        plan skip_all => "certs/ missing for $0, run $^X ./certs/create-certs.perl";
 }
-use PublicInbox::TestCommon;
 my ($tmpdir, $ftd) = tmpdir();
 $File::Temp::KEEP_ALL = !!$ENV{TEST_KEEP_TMP};
 my (%OPT, $td, $host_port, $group);
index df5ecb412a14e00592ca8ac0ca8598182ea00878..e4fd7355901496b722cd196954a9b6be6a5967ea 100644 (file)
@@ -8,7 +8,6 @@ use PublicInbox::Inbox;
 use Net::NNTP;
 my $inboxdir = $ENV{GIANT_INBOX_DIR} // $ENV{GIANT_PI_DIR};
 plan skip_all => "GIANT_INBOX_DIR not defined for $0" unless defined($inboxdir);
-eval { require PublicInbox::Search };
 my ($host_port, $group, %opts, $s, $td, $tmp_obj);
 use PublicInbox::TestCommon;