[DBD::Pg 1/3] Force client_encoding=utf8 in tests

dbdpg-commits-gENoVmVU/[email protected] Thu, 2 Oct 2014 11:51:04 +0000
Newsgroups gmane.comp.db.postgresql.dbdpg.cvs
Message-ID <[email protected]>
Committed by =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <[email protected]>

Subject: [DBD::Pg 1/3] Force client_encoding=utf8 in tests

Some tests were doing SET NAMES 'UTF8' for the non-ASCII bits, while
others were doing nothing and hoping, so just be consistent and use
UTF8 throughout.
---
 t/02attribs.t         | 12 ------------
 t/09arrays.t          |  6 ------
 t/12placeholders.t    |  6 ------
 t/dbdpg_test_setup.pl |  8 ++++++--
 4 files changed, 6 insertions(+), 26 deletions(-)

diff --git a/t/02attribs.t b/t/02attribs.t
index 5f43432..76bd6d4 100644
--- a/t/02attribs.t
+++ b/t/02attribs.t
@@ -403,13 +403,6 @@ SKIP: {
 	is ($result, 'off', $t);
 }
 
-## If Encode is available, we will insert some non-ASCII into the test table
-## Since this will fail with client encodings such as BIG5, we force UTF8
-my $old_encoding = $dbh->selectall_arrayref('SHOW client_encoding')->[0][0];
-if ($old_encoding ne 'UTF8') {
-	$dbh->do(q{SET NAMES 'UTF8'});
-}
-
 # Attempt to test whether or not we can get unicode out of the database
 SKIP: {
 	eval { require Encode; };
@@ -961,11 +954,6 @@ q{SELECT * FROM dbd_pg_test},
 	like ($result, qr/^$expected/, $t);
 }
 
-## From this point forward, it is safe to use the client's native encoding again
-if ($old_encoding ne 'UTF8') {
-	$dbh->do(qq{SET NAMES '$old_encoding'});
-}
-
 #
 # Test of the handle attribute "Active"
 #
diff --git a/t/09arrays.t b/t/09arrays.t
index 806e90c..764e500 100644
--- a/t/09arrays.t
+++ b/t/09arrays.t
@@ -541,12 +541,6 @@ SKIP: {
 	$t='Quoted array of strings should be UTF-8';
     ok (Encode::is_utf8( $quoted ), $t);
 
-	## Workaround for client encodings such as SJIS
-	my $old_encoding = $dbh->selectall_arrayref('SHOW client_encoding')->[0][0];
-	if ($old_encoding ne 'UTF8') {
-		$dbh->do(q{SET NAMES 'UTF8'});
-	}
-
 	$t='Inserting utf-8 into an array via quoted do() works';
 	$dbh->do('DELETE FROM dbd_pg_test');
 	$SQL = qq{INSERT INTO dbd_pg_test (id, testarray, val) VALUES (1, $quoted, 'one')};
diff --git a/t/12placeholders.t b/t/12placeholders.t
index c81bd43..912e449 100644
--- a/t/12placeholders.t
+++ b/t/12placeholders.t
@@ -169,12 +169,6 @@ is ($count, 1, $t);
 
 $sth->finish();
 
-## Force client encoding, as we cannot use backslashes in client-only encodings
-my $old_encoding = $dbh->selectall_arrayref('SHOW client_encoding')->[0][0];
-if ($old_encoding ne 'UTF8') {
-	$dbh->do(q{SET NAMES 'UTF8'});
-}
-
 $t='Prepare with backslashes inside quotes works';
 $SQL = q{SELECT setting FROM pg_settings WHERE name = 'backslash_quote'};
 $count = $dbh->selectall_arrayref($SQL)->[0];
diff --git a/t/dbdpg_test_setup.pl b/t/dbdpg_test_setup.pl
index e31ac55..01fc98c 100644
--- a/t/dbdpg_test_setup.pl
+++ b/t/dbdpg_test_setup.pl
@@ -221,6 +221,10 @@ version: $version
 		$testuser = 'postgres';
 	}
 
+    # non-ASCII parts of the tests assume UTF8
+    $testdsn =~ s/;?\bclient_encoding=[^;]+//;
+    $testdsn .= ';client_encoding=utf8';
+
 	## From here on out, we don't return directly, but save it first
   GETHANDLE: {
 		eval {
@@ -233,7 +237,7 @@ version: $version
 		if ($@ =~ /postgres/) {
 
 			if ($helpconnect) {
-				$testdsn .= 'dbname=postgres';
+				$testdsn .= ';dbname=postgres';
 				$helpconnect += 2;
 			}
 			$helpconnect += 4;
@@ -536,7 +540,7 @@ version: $version
 		}
 
 		## Attempt to connect to this server
-		$testdsn = "dbi:Pg:dbname=postgres;port=$testport";
+		$testdsn = "dbi:Pg:dbname=postgres;client_encoding=utf8;port=$testport";
 		if ($^O =~ /Win32/) {
 			$testdsn .= ';host=localhost';
 		}
-- 
1.8.4