]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/TestCommon.pm
tests: fix running without SQLite or Xapian
[public-inbox.git] / lib / PublicInbox / TestCommon.pm
index 2828c0d012f22cd864553b84503f1257591c1b9d..68785969fc8a27c939c9b74e74ee159181bb73ed 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 (;$) {
@@ -53,11 +53,38 @@ sub require_git ($;$) {
        my $cur_int = ($cur_maj << 24) | ($cur_min << 16);
        if ($cur_int < $req_int) {
                return 0 if $maybe;
-               plan(skip_all => "git $req+ required, have $cur_maj.$cur_min");
+               Test::More::plan(skip_all =>
+                               "git $req+ required, have $cur_maj.$cur_min");
        }
        1;
 }
 
+sub require_mods {
+       my @mods = @_;
+       my $maybe = pop @mods if $mods[-1] =~ /\A[0-9]+\z/;
+       my @need;
+       for my $mod (@mods) {
+               if ($mod eq 'Search::Xapian') {
+                       if (eval { require PublicInbox::Search } &&
+                               PublicInbox::Search::load_xapian()) {
+                               next;
+                       }
+               } elsif ($mod eq 'Search::Xapian::WritableDatabase') {
+                       if (eval { require PublicInbox::SearchIdx } &&
+                               PublicInbox::SearchIdx::load_xapian_writable()){
+                                       next;
+                       }
+               } else {
+                       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);
@@ -171,7 +198,7 @@ sub run_script ($;$$) {
                next unless ref($redir);
                open my $fh, '+>', undef or die "open: $!";
                $fhref->[$fd] = $fh;
-               $spawn_opt->{$fd} = fileno($fh);
+               $spawn_opt->{$fd} = $fh;
                next if $fd > 0;
                $fh->autoflush(1);
                print $fh $$redir or die "print: $!";