CSV-Reader

 view release on metacpan or  search on metacpan

t/reader.t  view on Meta::CPAN

# 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 )