about summary refs log tree commit homepage
path: root/lib/PublicInbox/TestCommon.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/TestCommon.pm')
-rw-r--r--lib/PublicInbox/TestCommon.pm12
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm
index 45306a5a..85cda031 100644
--- a/lib/PublicInbox/TestCommon.pm
+++ b/lib/PublicInbox/TestCommon.pm
@@ -60,7 +60,7 @@ sub require_git ($;$) {
 
 sub key2script ($) {
         my ($key) = @_;
-        return $key if $key =~ m!\A/!;
+        return $key if (index($key, '/') >= 0);
         # n.b. we may have scripts which don't start with "public-inbox" in
         # the future:
         $key =~ s/\A([-\.])/public-inbox$1/;
@@ -101,9 +101,11 @@ sub key2sub ($) {
                 my $f = key2script($key);
                 open my $fh, '<', $f or die "open $f: $!";
                 my $str = do { local $/; <$fh> };
-                my ($fc, $rest) = ($key =~ m/([a-z])([a-z0-9]+)\z/);
-                $fc = uc($fc);
-                my $pkg = "PublicInbox::TestScript::$fc$rest";
+                my $pkg = (split(m!/!, $f))[-1];
+                $pkg =~ s/([a-z])([a-z0-9]+)(\.t)?\z/\U$1\E$2/;
+                $pkg .= "_T" if $3;
+                $pkg =~ tr/-.//d;
+                $pkg = "PublicInbox::TestScript::$pkg";
                 eval <<EOF;
 package $pkg;
 use strict;
@@ -111,6 +113,8 @@ use subs qw(exit);
 
 *exit = *PublicInbox::TestCommon::run_script_exit;
 sub main {
+# the below "line" directive is a magic comment, see perlsyn(1) manpage
+# line 1 "$f"
 $str
         0;
 }