|
|
@@ -16,12 +16,100 @@
|
|
|
use strict;
|
|
|
use warnings;
|
|
|
|
|
|
-use Test::More tests => 1;
|
|
|
+use Test::More tests => 9;
|
|
|
|
|
|
BEGIN {
|
|
|
use_ok('Dpkg::Conf');
|
|
|
}
|
|
|
|
|
|
-# TODO: Add actual test cases.
|
|
|
+my $srcdir = $ENV{srcdir} // '.';
|
|
|
+my $datadir = $srcdir . '/t/Dpkg_Conf';
|
|
|
+
|
|
|
+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-name=value-name
|
|
|
+--option-indent=value-indent
|
|
|
+--option-equal=value-equal=subvalue-equal
|
|
|
+--option-noequal=value-noequal
|
|
|
+--option-simple
|
|
|
+--option-dash=value-dash
|
|
|
+--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, 10, '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, 12, '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-name = "value-name"
|
|
|
+option-indent = "value-indent"
|
|
|
+option-equal = "value-equal=subvalue-equal"
|
|
|
+option-noequal = "value-noequal"
|
|
|
+option-simple
|
|
|
+option-dash = "value-dash"
|
|
|
+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');
|
|
|
|
|
|
1;
|