CSV-Reader
view release on metacpan or search on metacpan
# Save this file in UTF-8 encoding!
use strict;
use warnings;
use utf8;
use Data::Dumper qw(Dumper); local $Data::Dumper::Terse = 1;
#use open ':std', ':encoding(utf8)';
use open OUT => ':locale'; # before Test::More because it duplicates STDOUT and STDERR
use Test::More qw(no_plan);
use Cwd ();
use File::Basename;
use lib (
File::Basename::dirname(Cwd::abs_path(__FILE__)) . '/../lib', # in build dir
File::Basename::dirname(Cwd::abs_path(__FILE__)) . '/../..' # in project dir with t subdir in same dir as .pm file
);
my $verbose = !$ENV{'HARNESS_ACTIVE'} && 0;
my $class = 'CSV::Reader';
require_ok($class) || BAIL_OUT("$class has errors");
my %default_options = (
'delimiter' => ';',
'enclosure' => '',
'field_aliases' => {
'Postal Code' => 'postcode',
},
);
#my $csvfile = ($0 =~ s|[^/]+$||r) . 'utf8_with_bom.csv';
my $csvfile = $0; $csvfile =~ s|[^/]+$||; $csvfile .= 'utf8_with_bom.csv';
my %tests = (
'file name' => {
'construct' => sub {
return $class->new($csvfile, %default_options);
},
'extra tests' => sub {
my $name = shift;
my $o = shift;
is_deeply(
[$o->fieldNames()],
[
'ID',
'postcode', # Aliased 'Postal Code',
'Street No',
'Street Entrance',
'Floor',
'Address Code 1',
'Address Code 2',
'Subscription list',
],
"$name: fieldNames() returns expected names"
);
},
'extra row tests' => sub {
my $name = shift;
my $o = shift;
my $row = shift;
my $addr = $row->{'Address Code 2'};
if (defined($addr)) {
ok(utf8::is_utf8($addr), "$name: Address \"$addr\" is flagged as UTF-8");
is($addr, 'Déjà vu straat', "$name: UTF-8 encoding is OK after parsing");
}
},
},
#'file handle' => {
# 'construct' => sub {
# open(my $h, '<', $csvfile) || die("Failed to open $csvfile: $!");
( run in 0.673 second using v1.01-cache-2.11-cpan-ceb78f64989 )