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"); my @enumerated = $attrs->enumerate(); is( \@enumerated, [ # "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;