use strict;
use warnings;

use Test::More 0.88;

use File::LibMagic qw( :complete );

# TODO can we simulate an out-of-memory error?

# try to use a missing magic file
{
    my $h = magic_open(MAGIC_NONE);

    {
        no warnings 'uninitialized';
        eval { magic_load( undef, 't/samples/magic' ) };
        like(
            $@, qr{magic_load requires a defined handle},
            'magic_load(undef)'
        );
    }
    eval { magic_load( $h, 't/samples/missing' ) };

    #    like( $@, qr{libmagic could not find any magic files}, 'missing magic file' );
    magic_close($h);
}

{
    my $h = magic_open(MAGIC_NONE);
    magic_load( $h, 't/samples/magic' );

    # try to get information about an undef buffer
    {
        no warnings 'uninitialized';
        eval { magic_buffer( undef, "Foo" ) };
        like(
            $@, qr{magic_buffer requires a defined handle},
            'magic_buffer(undef)'
        );
    }

    eval { magic_buffer( $h, undef ) };
    like(
        $@, qr{magic_buffer requires defined content},
        'magic_buffer no content'
    );

    # try to get information about a missing file
    {
        no warnings 'uninitialized';
        eval { magic_file( undef, 't/samples/foo.foo' ) };
        like(
            $@, qr{magic_file requires a defined handle},
            'magic_file(undef)'
        );
    }

    eval { magic_file( $h, undef ) };
    like( $@, qr{magic_file requires a filename}, 'magic_file no file' );

TODO: {
        local $TODO = 'check libmagic version';
        eval { magic_file( $h, 't/samples/missing' ) };
        like( $@, qr{libmagic cannot open .+ at }, 'missing file' );
        magic_close($h);
    }
}

# try calling magic_close with undef handle
{
    no warnings 'uninitialized';
    my $h = magic_open(MAGIC_NONE);
    eval { magic_close(undef) };
    like( $@, qr{magic_close requires a defined handle} );
}

done_testing();
