1N/A
1N/Ause strict;
1N/Ause warnings;
1N/Ause Carp;
1N/A
1N/ABEGIN
1N/A{
1N/A
1N/A eval { require Encode; };
1N/A
1N/A if ($@) {
1N/A print "1..0 # Skip: Encode is not available\n";
1N/A exit 0;
1N/A }
1N/A}
1N/A
1N/Arequire "dbm_filter_util.pl";
1N/A
1N/Ause Test::More tests => 20;
1N/A
1N/ABEGIN { use_ok('DBM_Filter') };
1N/ABEGIN { use_ok('SDBM_File') };
1N/ABEGIN { use_ok('Fcntl') };
1N/ABEGIN { use_ok('charnames', qw{greek})};
1N/A
1N/Ause charnames qw{greek};
1N/A
1N/Aunlink <Op_dbmx*>;
1N/AEND { unlink <Op_dbmx*>; }
1N/A
1N/Amy %h1 = () ;
1N/Amy $db1 = tie(%h1, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640) ;
1N/A
1N/Aok $db1, "tied to SDBM_File";
1N/A
1N/Aeval { $db1->Filter_Push('utf8') };
1N/Ais $@, '', "push a 'utf8' filter" ;
1N/A
1N/A{
1N/A no warnings 'uninitialized';
1N/A StoreData(\%h1,
1N/A {
1N/A undef() => undef(),
1N/A "beta" => "\N{beta}",
1N/A 'alpha' => "\N{alpha}",
1N/A "\N{gamma}"=> "gamma",
1N/A });
1N/A
1N/A}
1N/A
1N/AVerifyData(\%h1,
1N/A {
1N/A 'alpha' => "\N{alpha}",
1N/A "beta" => "\N{beta}",
1N/A "\N{gamma}"=> "gamma",
1N/A "" => "",
1N/A });
1N/A
1N/Aundef $db1;
1N/A{
1N/A use warnings FATAL => 'untie';
1N/A eval { untie %h1 };
1N/A is $@, '', "untie without inner references" ;
1N/A}
1N/A
1N/A# read the dbm file without the filter
1N/Amy %h2 = () ;
1N/Amy $db2 = tie(%h2, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640) ;
1N/A
1N/Aok $db2, "tied to SDBM_File";
1N/A
1N/AVerifyData(\%h2,
1N/A {
1N/A 'alpha' => "\xCE\xB1",
1N/A 'beta' => "\xCE\xB2",
1N/A "\xCE\xB3"=> "gamma",
1N/A "" => "",
1N/A });
1N/A
1N/Aundef $db2;
1N/A{
1N/A use warnings FATAL => 'untie';
1N/A eval { untie %h2 };
1N/A is $@, '', "untie without inner references" ;
1N/A}
1N/A