#!/usr/bin/perl
# As of version 2.73 the .ini files generated on Microsoft Windows did not
# contain carriage returns (CRs). This is a regression test for that.
# Thanks to Ben Johnson for reporting this and for a preliminary test
# script.
use strict;
use warnings;
use lib "./t/lib";
use Config::IniFiles::Slurp qw( bin_slurp );
use Test::More;
if ($^O !~ m/\AMSWin/)
{
plan skip_all => 'Test is only relevant for Microsoft Windows';
}
else
{
plan tests => 1;
}
use Config::IniFiles;
use File::Spec;
my $config_filename = File::Spec->catdir(File::Spec->curdir(), "t", "testConfig.ini");
writeNewUserIni ($config_filename);
for my $s (1 .. 4)
{
print "s = $s\n";
for my $p (1 ..4)
{
print "p = $p\n";
writeIni($config_filename, "Section$s", "Param$p", "Value$p");
}
}
# TEST
unlike(
scalar(bin_slurp($config_filename)),
qr/[^\x0D]\x0A/, # \x0D is CR ; \x0A is LF. See "man ascii".
"Checking that all line feeds are preceded by carriage returns",
);
sub writeNewUserIni
{
my ($config_fn) = @_;
open my $fh, '>', $config_fn
or die "Cannot open $config_fn for writing. - $!";
print {$fh} "[UserConfigFile]\n";
close ($fh);
return;
}
sub writeIni
{
my ($userConfig_fn, $section, $param, $value) = @_;
my $usrCfg = Config::IniFiles->new( -file => $userConfig_fn )
or die "Failed! Could not open $userConfig_fn with error @Config::IniFiles::errors\n" ;
$usrCfg->newval($section, $param, $value)
or die "Could not set newval in writeIni for $section, $param -> $value\n";
my $c = 0;
while ($c < 6)
{
if ( $usrCfg->RewriteConfig() )
{
$c=6;
print "Writing [$section] $param -> $value\n";
}
else
{
warn "Error: could not write $param=$value to $userConfig_fn\n";
sleep 1;
$c++;
print "c = $c\n";
}
}
return;
}