The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More no_plan;
use File::Temp qw(tempfile);
use FindBin;
use lib "$FindBin::Bin/../lib";
use Config::INIPlus;

my $filename = "$FindBin::Bin/../examples/example.ini";
my $eol      = qr/(?:\015?\012)/;

my $cfg = eval { Config::INIPlus->new( file => $filename ); };
is( $@, '', "Initial parse test using filename" );
$@ && diag("Failure: $@");

open my $fh, '<', $filename;
local $/ = undef;
my $string = <$fh>;
close $fh;

$cfg = eval { Config::INIPlus->new( string => $string ); };
is( $@, '', "Initial parse test using string in UNIX mode" );
$@ && diag("Failure: $@");

$string =~ s/$eol/\015\012/gs;

my $cfg_dos = eval { Config::INIPlus->new( string => $string ); };
is( $@, '', "Initial parse test using string in DOS mode" );
$@ && diag("Failure: $@");

is_deeply( $cfg->as_hashref, $cfg_dos->as_hashref,
    'Test if structure extracted in Unix mode is the same as DOS mode' );

( $fh, my $temp_filename ) = tempfile();
$fh->close;
eval { $cfg->write($temp_filename) };
is( $@, '', "Write INI file" );
$@ && diag("Failure: $@");

my $cfg_temp = eval { Config::INIPlus->new( file => $temp_filename ); };
is( $@, '', "Read in tempfile by filename" );
$@ && diag("Failure: $@");

is_deeply( $cfg->as_hashref, $cfg_temp->as_hashref,
    'Test if structure extracted from written file is identical to original'
);