The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More 'no_plan';

use ok 'Search::GIN::Keys::Deep';

{
    package Foo;
    use Moose;

    with qw(Search::GIN::Keys::Deep);
}

my $foo = Foo->new;

ok( $foo->does("Search::GIN::Keys::Join"), "does Join" );
ok( $foo->does("Search::GIN::Keys::Expand"), "does Expand" );

is_deeply(
    [ $foo->join_keys([qw(foo bar gorch)], [qw(baz zot)]) ],
    [ "foo:bar:gorch", "baz:zot" ],
    "join keys",
);

is_deeply(
    [ $foo->expand_keys({ foo => [qw(bar gorch)] }) ],
    [ [qw(foo bar)], [qw(foo gorch)] ],
    "expand keys",
);

is_deeply(
    [ $foo->process_keys(qw(la la la)) ],
    [ qw(la la la) ],
    "simple keys",
);

is_deeply(
    [ $foo->process_keys({ foo => [ qw(bar gorch) ] }) ],
    [ qw(foo:bar foo:gorch) ],
    "prefixing",
);

is_deeply(
    [ sort $foo->process_keys([ { a => [qw(b)], foo => [ { thingy => [qw(bar gorch)] }, "thing" ] } ]) ],
    [ sort qw(a:b foo:thingy:bar foo:thingy:gorch foo:thing) ],
    "complex",
);

is_deeply(
    [ $foo->process_keys() ],
    [ ],
    "empty",
);

is_deeply(
    [ $foo->process_keys( [ ] ) ],
    [ ],
    "empty",
);

is_deeply(
    [ $foo->process_keys( { } ) ],
    [ ],
    "empty",
);

is_deeply(
    [ $foo->process_keys( { foo => [] } ) ],
    [ ],
    "empty",
);