summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2018-05-04 15:22:48 -0400
committerAndrew Dunstan <andrew@dunslane.net>2018-05-04 15:51:31 -0400
commit134db37d21358fa5b0030c179bfa97af414d0f69 (patch)
treefa87ad8d657fc4e7e39c1091db64a2c651939381
parentade3b273caeefc9ec51355607679f913606eab1b (diff)
Provide for testing on python3 modules when under MSVC
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.
-rw-r--r--src/tools/msvc/vcregress.pl54
1 files changed, 53 insertions, 1 deletions
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index 5d37a68b93c..88a89ebcf1d 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -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/<type 'exceptions\.([[:alpha:]]*)'>/<class '$1'>/g;
+ s/<type 'long'>/<class 'int'>/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";