use strict; use warnings; use Test::More 0.88; use lib 't/lib'; use Encode; use MLTests; my $str = <<'END_STR'; x = 1 y = 1 x = 10 z = 2 x = 2 END_STR for my $pair ( [ string => $str ], [ file => 't/data.txt' ], [ handle => sub { open my $fh, '<', 't/data.txt' or die "can't open test data"; $fh } ], ) { my $base = "read_$pair->[0]"; my $arg = ref $pair->[1] ? $pair->[1]->() : $pair->[1]; is_deeply( MLTests->$base($arg), { x => 13, y => 1, z => 2 }, $base, ); my $sub = "read_$pair->[0]_sub"; $arg = ref $pair->[1] ? $pair->[1]->() : $pair->[1]; is_deeply( MLTests->$sub($arg), { x => -13, y => -1, z => -2 }, $sub, ); my $mul = "read_$pair->[0]_mul"; $arg = ref $pair->[1] ? $pair->[1]->() : $pair->[1]; is_deeply( MLTests->$mul($arg), { x => 20, y => 1, z => 2 }, $mul, ); } my $utf8_str = <<'END_STR'; Queensrÿche = 10 Spin̈al Tap = 20 END_STR # Note that while the input string is octets, the keys below will be # characters. This is intentional. read_string will have applied a utf-8 # decoding layer. -- rjbs, 2013-12-19 { use utf8; # <-- for the benefit of the hash keys is_deeply( MLTests->read_string($utf8_str), { 'Queensrÿche' => 10, 'Spin̈al Tap' => 20 }, "read a UTF-8 encoded string", ); } # Let's do something weird to test reading strings encoded in something other # than UTF-8... { use utf8; my $eo_string = <<'END_STR'; abomenaĵo = 10 ŝaktabulo = 20 END_STR my $latin3 = Encode::encode('Latin-3', $eo_string); is_deeply( MLTests->read_string({ binmode => 'encoding(Latin-3)' }, $latin3), { 'abomenaĵo' => 10, 'ŝaktabulo' => 20 }, "read a Latin-3 encoded string", ); } done_testing;