[DBD::Pg 7/8] Extend the Unicode round-trip tests to verify ASCII, BMP and non-BMP code points.
[email protected] Wed, 21 May 2014 15:35:16 +0000
| Newsgroups | perl.dbd.pg.changes |
|---|---|
| Message-ID | <[email protected]> |
Committed by Nicholas Clark <[email protected]> Subject: [DBD::Pg 7/8] Extend the Unicode round-trip tests to verify ASCII, BMP and non-BMP code points. Test that everything round trips, and that the Pg server has the same idea of string length as we do. --- t/30unicode.t | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/t/30unicode.t b/t/30unicode.t index d843220..d0a5e41 100644 --- a/t/30unicode.t +++ b/t/30unicode.t @@ -23,20 +23,38 @@ if (! $dbh) { isnt ($dbh, undef, 'Connect to database for unicode testing'); -my $name_d = my $name_u = "\N{LATIN CAPITAL LETTER E WITH ACUTE}milie du Ch\N{LATIN SMALL LETTER A WITH CIRCUMFLEX}telet"; -utf8::downgrade($name_d); -utf8::upgrade($name_u); -# Before 5.12.0 the text to the left of => gets to be SvUTF8() under use utf8; -# even if it's plain ASCII. This would confuse what we test for below. +my @tests; + +# Beware, characters used for testing need to be known to Unicode version 4.0.0, +# which is what perl 5.8.1 shipped with. foreach ( - [upgraded => 'text' => $name_u], - [downgraded => 'text' => $name_d], - [upgraded => 'text[]' => [$name_u]], - [downgraded => 'text[]' => [$name_d]], - [mixed => 'text[]' => [$name_d,$name_u]], -) { - my ($state, $type, $value) = @$_; + [ascii => 'Ada Lovelace'], + ['latin 1 range' => "\N{LATIN CAPITAL LETTER E WITH ACUTE}milie du Ch\N{LATIN SMALL LETTER A WITH CIRCUMFLEX}telet"], + # I'm finding it awkward to continue the theme of female mathematicians + ['base plane' => "Interrobang\N{INTERROBANG}"], + ['astral plane' => "\N{MUSICAL SYMBOL CRESCENDO}"], + ) { + my ($range, $text) = @$_; + my $name_d = my $name_u = $text; + utf8::upgrade($name_u); + # Before 5.12.0 the text to the left of => gets to be SvUTF8() under use utf8; + # even if it's plain ASCII. This would confuse what we test for below. + push @tests, ( + [upgraded => $range => 'text' => $name_u], + [upgraded => $range => 'text[]' => [$name_u]], + ); + if (utf8::downgrade($name_d, 1)) { + push @tests, ( + [downgraded => $range => 'text' => $name_d], + [downgraded => $range => 'text[]' => [$name_d]], + [mixed => $range => 'text[]' => [$name_d,$name_u]], + ); + } +} + +foreach (@tests) { + my ($state, $range, $type, $value) = @$_; foreach my $test ( { qtype => 'placeholder', @@ -48,6 +66,7 @@ foreach ( qtype => 'interpolated', sql => "SELECT '$value'::$type", }, + # Test that what we send is the same as the database's idea of characters: { qtype => 'placeholder length', sql => "SELECT length(?::$type)", @@ -62,7 +81,7 @@ foreach ( ):()), ) { foreach my $enable_utf8 (1, 0, -1) { - my $desc = "$state UTF-8 $test->{qtype} $type (pg_enable_utf8=$enable_utf8)"; + my $desc = "$state $range UTF-8 $test->{qtype} $type (pg_enable_utf8=$enable_utf8)"; my @args = @{$test->{args} || []}; my $want = exists $test->{want} ? $test->{want} : $value; if (!$enable_utf8) { -- 1.8.4