The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

# This script attempts to reproduce:
# http://rt.cpan.org/Public/Bug/Display.html?id=51445
#
# #51445: 2.52 CRLF-ini with multi-value params fails under Linux

use Test::More tests => 20;

use strict;
use warnings;

use Config::IniFiles;

use File::Spec;

my $ini_filename =
    File::Spec->catfile(
        File::Spec->curdir(), "t", 'test25.ini'
    );

{

    # being pedantic, we don't take line breaks from this or an external file for granted
    my $sample_ini =
    "<eol>
    <sol># this is a sample file for testing the proper detection of line endings in Config::Inifiles<eol>
    <sol><eol>
    <sol>[single values]<eol>
    <sol>firstval = first value<eol>
    <sol>secondval=2nd<eol>
    <sol><eol>
    <sol># in v2.52 on linux multi values with crlf lines are failing<eol>
    <sol>[multi value]<eol>
    <sol>Pathes=<<EOT<eol>
    <sol>path1<eol>
    <sol>path2<eol>
    <sol>EOT<eol>
    <sol><eol>
    <sol>";

    foreach my $lf (("\x0d\x0a", "\x0d", "\x0a", "\x15", "\n")) {
        my $ini = $sample_ini;
        $ini =~ s/<eol>[^<]*<sol>/$lf/g;

        open my $INI, '>', $ini_filename or die $!;
        binmode $INI;
        print $INI $ini;
        close $INI;

        my $lf_print = join('', map {sprintf '\x%0.2x', ord $_} split(//, $lf));

        my $cfg = Config::IniFiles->new(-file => $ini_filename);

        # TEST
        ok($cfg, "Loading from a '$lf_print'-separated file");

        # TEST
        my $value = $cfg->val('single values', 'firstval');
        is (
            $value, 'first value',
            "Reading a single value from a '$lf_print'-separated file"
        );

        # TEST
        $value = $cfg->val('single values', 'secondval');
        is (
            $value, '2nd',
            "Reading a single value from a '$lf_print'-separated file"
        );

        my @vals = $cfg->val("multi value", "Pathes");

        # TEST
        is_deeply(
            \@vals,
            ['path1', 'path2'],
            "Reading a multiple value from a '$lf_print'-separated file",
        );

    }

}

unlink ($ini_filename);