1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#!/usr/bin/perl
package Config::Test;
use Moo;
extends 'Devscripts::Config';
use constant keys => [
['test!', 'TEST', 'bool', 1],
['str=s', 'STR', qr/^a/, 'ab'],
['str2=s', 'STR2', qr/^a/, 'bb'],
['array=s', 'ARRAY', undef, sub { [] }],
];
package main;
use Test::More tests => 39;
BEGIN {
use_ok('Devscripts::Config');
}
my $conf;
$Devscripts::Output::die_on_error = 0;
@Devscripts::Config::config_files = ();
ok($conf = Config::Test->new->parse, 'No conf files, no args');
ok($conf->{test} == 1, ' test=1');
ok($conf->{str} eq 'ab', ' str=ab');
ok($conf->{str2} eq 'bb', ' str2=bb');
@Devscripts::Config::config_files = ('t/config1');
ok($conf = Config::Test->new->parse, 'Conf files, no args');
ok($conf->{test} == 0, ' test=0');
ok($conf->{str} eq 'az', ' str=az');
ok($conf->{str2} eq 'a1', ' str2=a1');
if (ok(ref $conf->{array}, ' array')) {
ok($conf->{array}->[0] eq "b c", ' "b c" found');
ok($conf->{array}->[1] eq "a", ' "a" found');
ok($conf->{array}->[2] eq "d", ' "d" found');
ok(scalar @{ $conf->{array} } == 3, ' 3 elements');
}
@ARGV = ('--noconf');
ok($conf = Config::Test->new->parse, '--noconf');
ok($conf->{test} == 1, ' test=1');
ok($conf->{str} eq 'ab', ' str=ab');
ok($conf->{str2} eq 'bb', ' str2=bb');
@ARGV = ('--conffile', 't/config2');
ok($conf = Config::Test->new->parse, '--conffile t/config2');
ok($conf->{test} == 1, ' test=1');
ok($conf->{str} eq 'ab', ' str=ab');
ok($conf->{str2} eq 'axzx', ' str2=axzx');
@ARGV = ('--conffile', '+t/config2');
ok($conf = Config::Test->new->parse, '--conffile +t/config2');
ok($conf->{test} == 0, ' test=0');
ok($conf->{str} eq 'az', ' str=az');
ok($conf->{str2} eq 'axzx', ' str2=axzx');
@ARGV = ('--test', '--str2=ac');
ok($conf = Config::Test->new->parse, '--test --str2=ac');
ok($conf->{test} == 1, ' test=1');
ok($conf->{str} eq 'az', ' str=az');
ok($conf->{str2} eq 'ac', ' str2=ac');
@ARGV = ('--noconf', '--str2', 'ac', '--notest');
ok($conf = Config::Test->new->parse, '--noconf --no-test --str2=ac');
ok($conf->{test} == 0, ' test=0');
ok($conf->{str} eq 'ab', ' str=ab');
ok($conf->{str2} eq 'ac', ' str2=ac');
@ARGV = ('--noconf', '--array', 'a', '--array=b');
ok($conf = Config::Test->new->parse, '--noconf --array a --array=b');
ok(ref $conf->{array}, 'Multiple options are allowed');
ok($conf->{array}->[0] eq 'a', ' first value is a');
ok($conf->{array}->[1] eq 'b', ' second value is b');
# Redirect STDERR to $out;
my $out;
{
no warnings;
open F, ">&STDERR";
}
close STDERR;
open STDERR, '>', \$out;
eval {
@ARGV = ('--noconf', '--str2', 'bc');
$conf = Config::Test->new->parse;
};
# Restore STDERR
close STDERR;
open STDERR, ">&F";
fail($@) if ($@);
ok($out =~ /Bad str2 value/, '--str2=bc is rejected');
|