#!/usr/bin/perl
BEGIN {
use_ok(
'Dpkg::Conf'
);
}
my
$datadir
= test_get_data_path();
my
(
$conf
,
$count
,
@opts
);
my
@expected_long_opts
= (
'--option-double-quotes=value double quotes'
,
'--option-single-quotes=value single quotes'
,
'--option-space=value words space'
,
qw(
--option-dupe=value1
--option-name=value-name
--option-indent=value-indent
--option-equal=value-equal=subvalue-equal
--option-noequal=value-noequal
--option-dupe=value2
--option-simple
--option-dash=value-dash
--option-dupe=value3
--l=v
)
);
my
@expected_short_opts
=
qw(
-o=vd
-s
)
;
$conf
= Dpkg::Conf->new();
local
$SIG
{__WARN__} =
sub
{ };
$count
=
$conf
->load(
"$datadir/config-mixed"
);
delete
$SIG
{__WARN__};
is(
$count
, 13,
'Load a config file, only long options'
);
@opts
=
$conf
->get_options();
is_deeply(\
@opts
, \
@expected_long_opts
,
'Parse long options'
);
$conf
= Dpkg::Conf->new(
allow_short
=> 1);
$count
=
$conf
->load(
"$datadir/config-mixed"
);
is(
$count
, 15,
'Load a config file, mixed options'
);
@opts
=
$conf
->get_options();
my
@expected_mixed_opts
= (
@expected_long_opts
,
@expected_short_opts
);
is_deeply(\
@opts
, \
@expected_mixed_opts
,
'Parse mixed options'
);
my
$expected_mixed_output
=
<<'MIXED';
option-double-quotes = "value double quotes"
option-single-quotes = "value single quotes"
option-space = "value words space"
option-dupe = "value1"
option-name = "value-name"
option-indent = "value-indent"
option-equal = "value-equal=subvalue-equal"
option-noequal = "value-noequal"
option-dupe = "value2"
option-simple
option-dash = "value-dash"
option-dupe = "value3"
l = "v"
-o = "vd"
-s
MIXED
is(
$conf
->output,
$expected_mixed_output
,
'Output mixed options'
);
my
$expected_filter
;
$expected_filter
=
<<'FILTER';
l = "v"
-o = "vd"
-s
FILTER
$conf
= Dpkg::Conf->new(
allow_short
=> 1);
$conf
->load(
"$datadir/config-mixed"
);
$conf
->filter(
remove
=>
sub
{
$_
[0] =~ m/^--option/ });
is(
$conf
->output,
$expected_filter
,
'Filter remove'
);
$expected_filter
=
<<'FILTER';
option-double-quotes = "value double quotes"
option-single-quotes = "value single quotes"
FILTER
$conf
= Dpkg::Conf->new(
allow_short
=> 1);
$conf
->load(
"$datadir/config-mixed"
);
$conf
->filter(
keep
=>
sub
{
$_
[0] =~ m/^--option-[a-z]+-quotes/ });
is(
$conf
->output,
$expected_filter
,
'Filter keep'
);
$expected_filter
=
<<'FILTER';
l = "v"
FILTER
$conf
= Dpkg::Conf->new(
allow_short
=> 1);
$conf
->load(
"$datadir/config-mixed"
);
$conf
->filter(
remove
=>
sub
{
$_
[0] =~ m/^--option/ },
keep
=>
sub
{
$_
[0] =~ m/^--/ });
is(
$conf
->output,
$expected_filter
,
'Filter keep and remove'
);