use strict;
use warnings qw(all);
use 5.022;
use Test::More tests => 3;
use Test::Warn;
use Config::Structured;
use experimental qw(signatures);
my $conf;
warnings_like {
$conf = Config::Structured->new(
structure => {
core => {
assets => {
isa => 'Str'
},
logs => {
isa => 'Str'
},
tmp => {
isa => 'Str'
},
},
auxiliary => {
assets => {
isa => 'Str'
},
tmp => {
isa => 'Str'
}
}
},
config => {
core => {
assets => '/data/assets',
logs => '/data/logs',
tmp => '/data/tmp',
},
auxiliary => {
assets => '/aux/assets',
tmp => '/aux/tmp',
}
},
hooks => {
'/core/*' => {
on_load => sub ($path, $value) {
warn("Directory '$value' does not exist at $path (load)");
},
on_access => sub ($path, $value) {
warn("Touched a core dir");
}
},
'/*/tmp' => {
on_access => sub ($path, $value) {
warn("Touched a tmp dir");
}
}
}
);
$conf->core;
$conf->auxiliary->assets;
}
[(qr{Directory '/data/\w+' does not exist at /core/\w+ \(load\)}) x 3,], 'on_load wildcard hook runs';
warning_is {$conf->auxiliary->tmp} "Touched a tmp dir", "on_access wildcard hook runs";
warnings_like {$conf->core->tmp} [(qr{Touched a (tmp|core) dir}) x 2], "on_access wildcard hooks run";