summaryrefslogtreecommitdiff
path: root/t/33_non_latin_path.t
diff options
context:
space:
mode:
Diffstat (limited to 't/33_non_latin_path.t')
-rw-r--r--t/33_non_latin_path.t105
1 files changed, 105 insertions, 0 deletions
diff --git a/t/33_non_latin_path.t b/t/33_non_latin_path.t
new file mode 100644
index 0000000..45ba39e
--- /dev/null
+++ b/t/33_non_latin_path.t
@@ -0,0 +1,105 @@
+#!/usr/bin/perl
+
+# Tests path containing non-latine-1 characters
+# currently fails on Windows
+
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+use t::lib::Test;
+use Test::More;
+BEGIN {
+ if ( $] >= 5.008005 ) {
+ plan( tests => (($^O eq 'cygwin') ? 15 : 27) );
+ } else {
+ plan( skip_all => 'Unicode is not supported before 5.8.5' );
+ }
+}
+use Test::NoWarnings;
+use File::Temp ();
+use File::Spec::Functions ':ALL';
+
+my $dir = File::Temp::tempdir( CLEANUP => 1 );
+foreach my $subdir ( 'longascii', 'adatbázis', 'name with spaces', '¿¿¿ ¿¿¿¿¿¿') {
+ if ($^O eq 'cygwin') {
+ next if (($subdir eq 'adatbázis') || ($subdir eq '¿¿¿ ¿¿¿¿¿¿'));
+ }
+ # rt48048: don't need to "use utf8" nor "require utf8"
+ utf8::upgrade($subdir);
+ ok(
+ mkdir(catdir($dir, $subdir)),
+ "$subdir created",
+ );
+
+ # Open the database
+ my $dbfile = catfile($dir, $subdir, 'db.db');
+ eval {
+ my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile", undef, undef, {
+ RaiseError => 1,
+ PrintError => 0,
+ } );
+ isa_ok( $dbh, 'DBI::db' );
+ };
+ is( $@, '', "Could connect to database in $subdir" );
+ diag( $@ ) if $@;
+ unlink(_path($dbfile)) if -e _path($dbfile);
+
+ # Repeat with the unicode flag on
+ my $ufile = $dbfile;
+ eval {
+ my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile", undef, undef, {
+ RaiseError => 1,
+ PrintError => 0,
+ sqlite_unicode => 1,
+ } );
+ isa_ok( $dbh, 'DBI::db' );
+ };
+ is( $@, '', "Could connect to database in $subdir" );
+ diag( $@ ) if $@;
+ unlink(_path($ufile)) if -e _path($ufile);
+
+ # when the name of the database file has non-latin characters
+ my $dbfilex = catfile($dir, "$subdir.db");
+ eval {
+ DBI->connect("dbi:SQLite:dbname=$dbfilex", "", "", {RaiseError => 1, PrintError => 0});
+ };
+ ok(!$@, "Could connect to database in $dbfilex") or diag $@;
+ unlink(_path($dbfilex)) if -e _path($dbfilex);
+}
+
+
+# connect to an empty filename - sqlite will create a tempfile
+eval {
+ my $dbh = DBI->connect("dbi:SQLite:dbname=", undef, undef, {
+ RaiseError => 1,
+ PrintError => 0,
+ } );
+ isa_ok( $dbh, 'DBI::db' );
+};
+is( $@, '', "Could connect to temp database (empty filename)" );
+diag( $@ ) if $@;
+
+
+
+
+sub _path { # copied from DBD::SQLite::connect
+ my $path = shift;
+
+ if ($^O =~ /MSWin32/) {
+ require Win32;
+ require File::Basename;
+
+ my ($file, $dir, $suffix) = File::Basename::fileparse($path);
+ my $short = Win32::GetShortPathName($path);
+ if ( $short && -f $short ) {
+ # Existing files will work directly.
+ $path = $short;
+ } elsif ( -d $dir ) {
+ $path = join '', grep { defined } Win32::GetShortPathName($dir), $file, $suffix;
+ }
+ }
+ return $path;
+}