Provide for testing on python3 modules when under MSVC
authorAndrew Dunstan
Fri, 4 May 2018 19:22:48 +0000 (15:22 -0400)
committerAndrew Dunstan
Fri, 4 May 2018 19:51:31 +0000 (15:51 -0400)
This should have been done some years ago as promised in commit
c4dcdd0c2. However, better late than never.

Along the way do a little housekeeping, including using a simpler test
for the python version being tested, and removing a redundant subroutine
parameter. These changes only apply back to release 9.5.

Backpatch to all live releases.

src/tools/msvc/vcregress.pl

index 5d37a68b93c902ff6df7ffd07276b313162d8bb7..88a89ebcf1deec66fe16b6711d91ebbb0993973a 100644 (file)
@@ -240,6 +240,51 @@ sub taptest
    exit $status if $status;
 }
 
+sub mangle_plpython3
+{
+   my $tests = shift;
+   mkdir "results" unless -d "results";
+   mkdir "sql/python3";
+   mkdir "results/python3";
+   mkdir "expected/python3";
+
+   foreach my $test (@$tests)
+   {
+       local $/ = undef;
+       foreach my $dir ('sql','expected')
+       {
+           my $extension = ($dir eq 'sql' ? 'sql' : 'out');
+
+           my @files = glob("$dir/$test.$extension $dir/${test}_[0-9].$extension");
+           foreach my $file (@files)
+           {
+               open(my $handle, "$file") || die "test file $file not found";
+               my $contents = <$handle>;
+               close($handle);
+               map
+               {
+                   s/except ([[:alpha:]][[:alpha:].]*), *([[:alpha:]][[:alpha:]]*):/except $1 as $2:/g;
+                   s///g;
+                   s///g;
+                   s/([0-9][0-9]*)L/$1/g;
+                   s/([ [{])u"/$1"/g;
+                   s/([ [{])u'/$1'/g;
+                   s/def next/def __next__/g;
+                   s/LANGUAGE plpython2?u/LANGUAGE plpython3u/g;
+                   s/EXTENSION ([^ ]*_)*plpython2?u/EXTENSION $1plpython3u/g;
+                   s/installing required extension "plpython2u"/installing required extension "plpython3u"/g;
+               } $contents;
+               my $base = basename $file;
+               open($handle, ">$dir/python3/$base") || die "opening python 3 file for $file";
+               print $handle $contents;
+               close($handle);
+           }
+       }
+   }
+   map { $_ =~ s!^!python3/!; } @$tests;
+   return @$tests;
+}
+
 sub plcheck
 {
    chdir "../../pl";
@@ -250,7 +295,8 @@ sub plcheck
        my $lang = $pl eq 'tcl' ? 'pltcl' : $pl;
        if ($lang eq 'plpython')
        {
-           next unless -d "../../$Config/plpython2";
+           next unless -d "$topdir/$Config/plpython2" ||
+               -d "$topdir/$Config/plpython3";
            $lang = 'plpythonu';
        }
        else
@@ -260,6 +306,8 @@ sub plcheck
        my @lang_args = ("--load-extension=$lang");
        chdir $pl;
        my @tests = fetchTests();
+       @tests = mangle_plpython3(\@tests)
+           if $lang eq 'plpythonu' && -d "$topdir/$Config/plpython3";
        if ($lang eq 'plperl')
        {
 
@@ -275,6 +323,10 @@ sub plcheck
                push(@tests, 'plperl_plperlu');
            }
        }
+       elsif ($lang eq 'plpythonu' && -d "$topdir/$Config/plpython3")
+       {
+           @lang_args = ();
+       }
        print
          "============================================================\n";
        print "Checking $lang\n";