#! /usr/bin/env perl # -*- perl -*- # Copyright (C) 2016-2018 Guido Flohr <guido.flohr@cantanea.com>, # all rights reserved. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. use strict; BEGIN { my $test_dir = __FILE__; $test_dir =~ s/[-a-z0-9]+\.t$//i; unshift @INC, $test_dir; } use TestSite; use Test::More; use Storable qw(dclone); use Scalar::Util qw(reftype); use Qgoda::Config; use Qgoda::Schema; use constant true => $JSON::PP::true; use constant false => $JSON::PP::false; my ($site, $got, $expected); my $expected = { plugins => '_plug-ins', po => '_po', timestamp => '_timestamp', views => '_views' }; $site = TestSite->new(name => 'config-defaults', config => { paths => { plugins => '_plug-ins' } } ); $got = Qgoda->new->config->{paths}; delete $got->{site}; is_deeply $got, $expected, 'replace simple key in top-level object'; my $schema = Qgoda::Schema->config->{properties}->{processors}->{properties}; $expected = { chains => dclone($schema->{chains}->{default}), options => dclone($schema->{options}->{default}), triggers => dclone($schema->{triggers}->{default}), }; $expected->{options}->{HTMLFilter}->{TOC}->{start} = 3; $site = TestSite->new(name => 'config-defaults', config => { processors => { options => { HTMLFilter => { TOC => { # This is normally 2. start => 3 } } } } } ); $got = Qgoda->new->config->{processors}; is_deeply $got, $expected, 'individually overwrite deeply nested processor option'; # FIXME! Test the above with config.processors.chains and # config.processors.triggers! # Test that all commands are coerced into arrays. $site = TestSite->new(name => 'config-defaults', config => { helpers => { make => 'make', yarn => [qw(yarn start)] }, po => { msgfmt => 'msgfmt', msgmerge => 'msgmerge', qgoda => 'qgoda', tt2 => '_my_views', xgettext => 'xgettext', 'xgettext-tt2' => 'xgettext-tt2' }, defaults => [ { files => '/fi', values => { lingua => 'fi' } } ], exclude => '*.bak', 'exclude-watch' => '*.bak', } ); $got = Qgoda->new->rawConfig; is_deeply $got->{helpers}->{make}, ['make']; is_deeply $got->{helpers}->{yarn}, ['yarn', 'start']; is_deeply $got->{po}->{msgfmt}, ['msgfmt']; ok $got->{defaults}->[0]; ok ref $got->{defaults}->[0]; ok ref $got->{defaults}->[0]->{files}; is ((reftype $got->{defaults}->[0]->{files}), 'ARRAY'); is '/fi', $got->{defaults}->[0]->{files}->[0]; ok $got->{exclude}; ok ref $got->{exclude}; is ((reftype $got->{exclude}), 'ARRAY'); is $got->{exclude}->[0], '*.bak'; ok $got->{'exclude-watch'}; ok ref $got->{'exclude-watch'}; is ((reftype $got->{'exclude-watch'}), 'ARRAY'); is $got->{'exclude-watch'}->[0], '*.bak'; ok ref $got->{po}->{tt2}; is ((reftype $got->{po}->{tt2}), 'ARRAY'); is $got->{po}->{tt2}->[0], '_my_views'; # Test that po->{tt2} is initialized to main view directory. $site = TestSite->new(name => 'config-defaults', config => { paths => { views => '_your_views' } } ); $got = Qgoda->new->rawConfig; is ((reftype $got->{po}->{tt2}), 'ARRAY'); ok ref $got->{po}->{tt2}; is ((reftype $got->{po}->{tt2}), 'ARRAY'); is $got->{po}->{tt2}->[0], '_your_views'; $site->tearDown; done_testing;