1use Config::Std;
2use Test::More 'no_plan';
3
4my $input_file = 'test.cfg';
5
6my %data = (
7    # Default section...
8    '' => {
9        'def1'     => 'def val 1',
10        'def 2'    => 'def val 2',
11        'def 3 ml' => "def val 3\nacross several\n   lines",
12        'def 3'    => 'def val 3',
13        'def 4'    => 'def val 4',
14    },
15
16    # Named section...
17    'Named' => {
18        'hi there' => q{What's your name???},
19        'list'     => [qw(a list of values), 'all different'],
20    },
21
22    # Complex named section...
23    'Complex named!!!' => {
24        123456789 => 'zero',
25        '%^$%$#%' => 'curses',
26    },
27);
28
29my %config;
30
31ok eval{ read_config $input_file => %config }    => 'Read succeeded';
32diag( $@ ) if $@;
33
34is_deeply \%data, \%config                       => 'Data correct';
35
36$config{Extra}{'key 1'} = 'extra key 1';
37push @{$config{Named}{list}}, 'an extra line';
38
39ok eval{ write_config %config }                  => 'Write succeeded';
40
41ok open(my $fh, '<', $input_file)                => 'File opened';
42
43ok my @config = <$fh>                            => 'File read';
44
45ok my @extra = <DATA>                            => 'DATA loaded';
46
47is_deeply [@extra[-4..-1]], [@config[-4..-1]]    => 'Extra content correct';
48
49__DATA__
50[Extra]
51
52key 1: extra key 1
53
54