summaryrefslogtreecommitdiff
path: root/lib/DBM_Filter/t/utf8.t
diff options
context:
space:
mode:
Diffstat (limited to 'lib/DBM_Filter/t/utf8.t')
-rw-r--r--lib/DBM_Filter/t/utf8.t86
1 files changed, 86 insertions, 0 deletions
diff --git a/lib/DBM_Filter/t/utf8.t b/lib/DBM_Filter/t/utf8.t
new file mode 100644
index 0000000000..e37afa2d4a
--- /dev/null
+++ b/lib/DBM_Filter/t/utf8.t
@@ -0,0 +1,86 @@
+
+use strict;
+use warnings;
+use Carp;
+
+BEGIN
+{
+
+ eval { require Encode; };
+
+ if ($@) {
+ print "1..0 # Skip: Encode is not available\n";
+ exit 0;
+ }
+}
+
+require "dbm_filter_util.pl";
+
+use Test::More tests => 20;
+
+BEGIN { use_ok('DBM_Filter') };
+BEGIN { use_ok('SDBM_File') };
+BEGIN { use_ok('Fcntl') };
+BEGIN { use_ok('charnames', qw{greek})};
+
+use charnames qw{greek};
+
+unlink <Op_dbmx*>;
+END { unlink <Op_dbmx*>; }
+
+my %h1 = () ;
+my $db1 = tie(%h1, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640) ;
+
+ok $db1, "tied to SDBM_File";
+
+eval { $db1->Filter_Push('utf8') };
+is $@, '', "push a 'utf8' filter" ;
+
+{
+ no warnings 'uninitialized';
+ StoreData(\%h1,
+ {
+ undef() => undef(),
+ "beta" => "\N{beta}",
+ 'alpha' => "\N{alpha}",
+ "\N{gamma}"=> "gamma",
+ });
+
+}
+
+VerifyData(\%h1,
+ {
+ 'alpha' => "\N{alpha}",
+ "beta" => "\N{beta}",
+ "\N{gamma}"=> "gamma",
+ "" => "",
+ });
+
+undef $db1;
+{
+ use warnings FATAL => 'untie';
+ eval { untie %h1 };
+ is $@, '', "untie without inner references" ;
+}
+
+# read the dbm file without the filter
+my %h2 = () ;
+my $db2 = tie(%h2, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640) ;
+
+ok $db2, "tied to SDBM_File";
+
+VerifyData(\%h2,
+ {
+ 'alpha' => "\xCE\xB1",
+ 'beta' => "\xCE\xB2",
+ "\xCE\xB3"=> "gamma",
+ "" => "",
+ });
+
+undef $db2;
+{
+ use warnings FATAL => 'untie';
+ eval { untie %h2 };
+ is $@, '', "untie without inner references" ;
+}
+