#!perl

use 5.010;
use strict;
use warnings;
#use Log::Any '$log';

use Test::More;

use Complete::Util qw(complete_hash_key);

local $Complete::Common::OPT_CI = 0;
local $Complete::Common::OPT_MAP_CASE = 0;
local $Complete::Common::OPT_WORD_MODE = 0;
local $Complete::Common::OPT_FUZZY = 0;

test_complete(
    word      => 'a',
    hash      => {a=>1, aa=>1, ab=>1, b=>1, A=>1},
    result    => [qw(a aa ab)],
);
test_complete(
    word      => 'c',
    hash      => {a=>1, aa=>1, ab=>1, b=>1, A=>1},
    result    => [qw()],
);
test_complete(
    name      => 'arg:summaries',
    word      => 'a',
    hash      => {a=>1, aa=>1, ab=>1, b=>1, A=>1},
    summaries => {a=>2, aa=>3, ab=>4, b=>5, A=>6},
    result    => [
        {word=>'a' , summary=>2},
        {word=>'aa', summary=>3},
        {word=>'ab', summary=>4},
    ],
);
test_complete(
    name      => 'arg:summaries_from_hash_values',
    word      => 'a',
    hash      => {a=>1, aa=>2, ab=>3, b=>4, A=>5},
    summaries_from_hash_values => 1,
    result    => [
        {word=>'a' , summary=>1},
        {word=>'aa', summary=>2},
        {word=>'ab', summary=>3},
    ],
);

done_testing;

sub test_complete {
    my (%args) = @_;
    #$log->tracef("args=%s", \%args);

    my $name = $args{name} // $args{word};
    my $res = complete_hash_key(
        word => $args{word},
        hash => $args{hash},
        summaries => $args{summaries},
        summaries_from_hash_values => $args{summaries_from_hash_values},
    );
    #diag explain $res;
    is_deeply($res, $args{result}, "$name (result)") or explain($res);
}