]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/TestCommon.pm
treewide: "require" + "use" cleanup and docs
[public-inbox.git] / lib / PublicInbox / TestCommon.pm
index 9680b94c2821ea8c5aee8902610d175b2f51eda2..d6d1e9394937c1ea652ccb06b52b41d82cc06470 100644 (file)
@@ -64,7 +64,19 @@ sub require_mods {
        my $maybe = pop @mods if $mods[-1] =~ /\A[0-9]+\z/;
        my @need;
        for my $mod (@mods) {
-               eval "require $mod";
+               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;
@@ -183,14 +195,20 @@ sub run_script ($;$$) {
        my $spawn_opt = {};
        for my $fd (0..2) {
                my $redir = $opt->{$fd};
-               next unless ref($redir);
-               open my $fh, '+>', undef or die "open: $!";
-               $fhref->[$fd] = $fh;
-               $spawn_opt->{$fd} = fileno($fh);
-               next if $fd > 0;
-               $fh->autoflush(1);
-               print $fh $$redir or die "print: $!";
-               seek($fh, 0, SEEK_SET) or die "seek: $!";
+               my $ref = ref($redir);
+               if ($ref eq 'SCALAR') {
+                       open my $fh, '+>', undef or die "open: $!";
+                       $fhref->[$fd] = $fh;
+                       $spawn_opt->{$fd} = $fh;
+                       next if $fd > 0;
+                       $fh->autoflush(1);
+                       print $fh $$redir or die "print: $!";
+                       seek($fh, 0, SEEK_SET) or die "seek: $!";
+               } elsif ($ref eq 'GLOB') {
+                       $spawn_opt->{$fd} = $fhref->[$fd] = $redir;
+               } elsif ($ref) {
+                       die "unable to deal with $ref $redir";
+               }
        }
        if ($run_mode == 0) {
                # spawn an independent new process, like real-world use cases: