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:
# https://sourceforge.net/tracker/index.php?func=detail&aid=1230339&group_id=6926&atid=106926

use strict;
use warnings;

use Test::More tests => 2;
use File::Spec;

use Config::IniFiles;

my $filename = File::Spec->catfile( File::Spec->curdir(), "t",
    "store-and-retrieve-here-doc-terminator.ini" );

my @file_write_subs = (
    sub {
        my ($cfg) = @_;

        $cfg->WriteConfig($filename);

        return;
    },
    sub {
        my ($cfg) = @_;

        open my $fh, '>', $filename
            or die "Cannot open '$filename' for writing - $!";
        $cfg->OutputConfigToFileHandle($fh);
        close($fh);

        return;
    },
);
foreach my $write_sub (@file_write_subs)
{
    # Prepare the offending file.
    {
        # Delete the stray file - we want to over-write it.
        unlink($filename);
        my $cfg = Config::IniFiles->new();

        $cfg->newval( "MySection", "MyParam", "Hello\nEOT\n" );

        $write_sub->($cfg);
    }

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

        # TEST*2
        is(
            scalar( $cfg->val( "MySection", "MyParam" ) ),
            "Hello\nEOT\n",
            "Default here-doc terminator was stored and retrieved correctly",
        );
    }

    # Delete it again to keep the working-copy clean.
    unlink($filename);
}