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

use strict;
use warnings;
use Test::More tests => 25;
use Test::Exception;

BEGIN {
	use_ok( 'Crypt::GpgME' );
}

my $ctx;
lives_ok (sub {
    $ctx = Crypt::GpgME->new;
}, 'create new context');

isa_ok ($ctx, 'Crypt::GpgME');

{
    my $keylist_mode;

    lives_ok (sub {
            $keylist_mode = $ctx->get_keylist_mode;
    }, 'getting keylist_mode');

    is_deeply ($keylist_mode, ['local'], 'default keylist_mode is local');
}

for my $mode (qw/extern sigs sig-notations validate local/) {
    lives_ok (sub {
            $ctx->set_keylist_mode([$mode]);
    }, "setting keylist_mode to $mode");

    {
        my $keylist_mode;

        lives_ok (sub {
                $keylist_mode = $ctx->get_keylist_mode;
        }, 'getting keylist_mode');

        is_deeply ($keylist_mode, [$mode], 'setting keylist_mode worked');
    }
}

throws_ok(sub {
        $ctx->set_keylist_mode(['opengpg']);
}, qr/^unknown keylist mode/, 'setting invalid keylist_mode');

throws_ok(sub {
        $ctx->set_keylist_mode({});
}, qr/not an array reference/, 'calling with non-array-ref');

lives_ok (sub {
        $ctx->set_keylist_mode;
}, 'setting keylist_mode without argument works');

{
    my $keylist_mode;

    lives_ok (sub {
            $keylist_mode = $ctx->get_keylist_mode;
    }, 'getting keylist_mode');

    is_deeply ($keylist_mode, ['local'], 'calling set_keylist_mode without arguments sets to local');
}