54 lines
1.4 KiB
Perl
54 lines
1.4 KiB
Perl
|
use strict;
|
||
|
use warnings;
|
||
|
use Setup;
|
||
|
use Data::Dumper;
|
||
|
use Test2::V0;
|
||
|
use Hydra::Helper::AttributeSet;
|
||
|
|
||
|
|
||
|
subtest "splitting an attribute path in to its component parts" => sub {
|
||
|
my %values = (
|
||
|
"" => [''],
|
||
|
"." => ['', ''],
|
||
|
"...." => ['', '', '', '', ''],
|
||
|
"foobar" => ['foobar'],
|
||
|
"foo.bar" => ['foo', 'bar'],
|
||
|
"🌮" => ['🌮'],
|
||
|
|
||
|
# not supported: 'foo."bar.baz".tux' => [ 'foo', 'bar.baz', 'tux' ]
|
||
|
# the edge cases are fairly significant around escaping and unescaping.
|
||
|
);
|
||
|
|
||
|
for my $input (keys %values) {
|
||
|
my @value = @{$values{$input}};
|
||
|
my @components = Hydra::Helper::AttributeSet::splitPath($input);
|
||
|
is(\@components, \@value, "Splitting the attribute path: " . $input);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
my $attrs = Hydra::Helper::AttributeSet->new();
|
||
|
$attrs->registerValue("foo");
|
||
|
$attrs->registerValue("bar.baz.tux");
|
||
|
$attrs->registerValue("bar.baz.bux.foo.bar.baz");
|
||
|
|
||
|
is(
|
||
|
$attrs->enumerate(),
|
||
|
[
|
||
|
# "foo": skipped since we're registering values, and we
|
||
|
# only want to track nested attribute sets.
|
||
|
|
||
|
# "bar.baz.tux": expand the path
|
||
|
"bar",
|
||
|
"bar.baz",
|
||
|
|
||
|
#"bar.baz.bux.foo.bar.baz": expand the path, but only register new
|
||
|
# attribute set names.
|
||
|
"bar.baz.bux",
|
||
|
"bar.baz.bux.foo",
|
||
|
"bar.baz.bux.foo.bar",
|
||
|
],
|
||
|
"Attribute set paths are registered."
|
||
|
);
|
||
|
|
||
|
done_testing;
|