[DBD::Pg] Overhaul t/00_release.t: add in new dbdimp.c version string. In the process, refactor everything into a single hash, and verify the number of version strings per file as well.

dbdpg-commits-gENoVmVU/[email protected] Fri, 2 Jan 2015 17:29:23 +0000
Newsgroups gmane.comp.db.postgresql.dbdpg.cvs
Message-ID <[email protected]>
Committed by Greg Sabino Mullane <greg-O9fzpki4YnJWk0Htik3J/[email protected]>

Overhaul t/00_release.t: add in new dbdimp.c version
string. In the process, refactor everything into a single hash, and verify
the number of version strings per file as well.

---
 t/00_release.t | 104 +++++++++++++++++++++++++++------------------------------
 1 file changed, 49 insertions(+), 55 deletions(-)

diff --git a/t/00_release.t b/t/00_release.t
index 7a59769..3b70a92 100644
--- a/t/00_release.t
+++ b/t/00_release.t
@@ -12,73 +12,66 @@ use lib 't','.';
 if (! $ENV{RELEASE_TESTING}) {
 	plan (skip_all =>  'Test skipped unless environment variable RELEASE_TESTING is set');
 }
-plan tests => 1;
+plan tests => 2;
 
-my %v;
 my $vre = qr{(\d+\.\d+\.\d+\_?\d*)};
 
-## Grab version from various files
-my $file = 'META.yml';
-open my $fh, '<', $file or die qq{Could not open "$file": $!\n};
-while (<$fh>) {
-	push @{$v{$file}} => [$1,$.] if /version\s*:\s*$vre/;
-}
-close $fh or warn qq{Could not close "$file": $!\n};
+my %filelist = (
+	'dbdimp.c'             => [1, [ qr{ping test v$vre},        ]],
+	'META.yml'             => [3, [ qr{version\s*:\s*$vre},     ]],
+	'Pg.pm'                => [3, [ qr{VERSION = qv\('$vre'},
+			                        qr{documents version $vre},
+                                    qr{ping test v$vre},        ]],
+	'lib/Bundle/DBD/Pg.pm' => [1, [ qr{VERSION = '$vre'},       ]],
+	'Makefile.PL'          => [1, [ qr{VERSION = '$vre'},       ]],
+	'README'               => [1, [ qr{is version $vre},
+                                    qr{TEST VERSION \($vre},    ]],
+	'Changes'              => [1, [ qr{^(?:Version )*$vre},     ]],
+);
 
-$file = 'Makefile.PL';
-open $fh, '<', $file or die qq{Could not open "$file": $!\n};
-while (<$fh>) {
-	push @{$v{$file}} => [$1,$.] if /VERSION = '$vre'/;
-}
-close $fh or warn qq{Could not close "$file": $!\n};
+my %v;
+my $goodversion = 1;
+my $goodcopies = 1;
+my $lastversion = '?';
 
-$file = 'Pg.pm';
-open $fh, '<', $file or die qq{Could not open "$file": $!\n};
-while (<$fh>) {
-	push @{$v{$file}} => [$1,$.] if (/VERSION = qv\('$vre'/ or /documents version $vre/);
-}
-close $fh or warn qq{Could not close "$file": $!\n};
+## Walk through each file and slurp out the version numbers
+## Make sure that the version number matches
+## Verify the total number of version instances in each file as well
 
-$file = 'lib/Bundle/DBD/Pg.pm';
-open $fh, '<', $file or die qq{Could not open "$file": $!\n};
-while (<$fh>) {
-	push @{$v{$file}} => [$1,$.] if /VERSION = '$vre'/;
-}
-close $fh or warn qq{Could not close "$file": $!\n};
-
-$file = 'Changes';
-open $fh, '<', $file or die qq{Could not open "$file": $!\n};
-while (<$fh>) {
-	if (/^(?:Version )*$vre/) {
-		push @{$v{$file}} => [$1,$.];
-		last;
+for my $file (sort keys %filelist) {
+	my ($expected,$regexlist) = @{ $filelist{$file} };
+	#diag "Want file $file to have $expected";
+
+	my $instances = 0;
+	open my $fh, '<', $file or die qq{Could not open "$file": $!\n};
+  SLURP: while (<$fh>) {
+		for my $regex (@{ $regexlist }) {
+			if ($_ =~ /$regex/) {
+				push @{$v{$file}} => [$1, $.];
+				$instances++;
+				last SLURP if $file eq 'Changes'; ## Only the top version please
+			}
+		}
 	}
+	close $fh or warn qq{Could not close "$file": $!\n};
+
+	if ($instances != $expected) {
+		$goodcopies = 0;
+		diag "Version instance mismatch for $file: expected $expected, found $instances";
+	}
+
 }
-close $fh or warn qq{Could not close "$file": $!\n};
 
-$file = 'README';
-open $fh, '<', $file or die qq{Could not open "$file": $!\n};
-while (<$fh>) {
-	push @{$v{$file}} => [$1,$.] if (/is version $vre/ or /TEST VERSION \($vre/);
+
+if ($goodcopies) {
+	pass ('All files had the expected number of version strings');
 }
-close $fh or warn qq{Could not close "$file": $!\n};
-
-my $good = 1;
-my $lastver;
-for my $filename (keys %v) {
-	for my $glob (@{$v{$filename}}) {
-		my ($ver,$line) = @$glob;
-		if (! defined $lastver) {
-			$lastver = $ver;
-		}
-		elsif ($ver ne $lastver) {
-			$good = 0;
-		}
-	}
+else {
+	fail ('All files did not have the expected number of version strings');
 }
 
-if ($good) {
-	pass ("All version numbers are the same ($lastver)");
+if ($goodversion) {
+	pass ("All version numbers are the same ($lastversion)");
 }
 else {
 	fail ('All version numbers were not the same!');
@@ -91,3 +84,4 @@ else {
 }
 
 exit;
+
-- 
1.8.4