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

use strict;
use Test::More tests => 22;
use constant SKIP => 18;

##############################################################################
# Make sure that we can use the stuff that's in our local lib directory.
BEGIN {
    if( $ENV{PERL_CORE} ) {
        chdir 't' if -d 't';
        @INC = ('../lib', 'lib');
    } else {
        unshift @INC, 't/lib', 'lib';
    }
}
chdir 't';
use EventTest;

##############################################################################
BEGIN { use_ok('App::Info::Lib::Expat') }

# Test info events.
ok( my $info = EventTest->new, "Create info EventTest" );
ok( my $expat = App::Info::Lib::Expat->new( on_info => $info ), "Got Object");
is( $info->message, "Searching for Expat libraries", "Check constructor info" );

SKIP: {
    # Skip tests?
    skip "Expat not installed", SKIP unless $expat->installed;

    # Check version.
    $expat->version;
    is( $info->message, "Searching for 'expat.h'", "Check version info" );
    is( $info->message, "Searching for include directory",
        "Check version info again" );

    $expat->version;
    ok( ! defined $info->message, "No info" );
    $expat->major_version;
    ok( ! defined $info->message, "Still No info" );

    # Check major version.
    ok( $expat = App::Info::Lib::Expat->new( on_info => $info ),
        "Got Object 2");
    $info->message;
    $expat->major_version;
    is( $info->message, "Searching for 'expat.h'", "Check major info" );
    is( $info->message, "Searching for include directory",
        "Check major info again" );

    # Check minor version.
    ok( $expat = App::Info::Lib::Expat->new( on_info => $info ),
        "Got Object 3");
    $info->message; # Throw away constructor message.
    $expat->minor_version;
    is( $info->message, "Searching for 'expat.h'", "Check minor info" );
    is( $info->message, "Searching for include directory",
        "Check minor info again" );

    # Check patch version.
    ok( $expat = App::Info::Lib::Expat->new( on_info => $info ),
        "Got Object 4");
    $info->message; # Throw away constructor message.
    $expat->patch_version;
    is( $info->message, "Searching for 'expat.h'", "Check patch info" );
    is( $info->message, "Searching for include directory",
        "Check patch info again" );

    # Check dir methods.
    ok( $expat = App::Info::Lib::Expat->new( on_info => $info ),
        "Got Object 5");
    $info->message; # Throw away constructor message.
    $expat->bin_dir;
    ok( ! defined $info->message, "Check bin info" );
    $expat->inc_dir;
    is( $info->message, "Searching for include directory", "Check inc info" );
    $expat->lib_dir;
    ok( ! defined $info->message, "Check lib info" );
    $expat->so_lib_dir;
    is( $info->message, "Searching for shared object library directory",
        "Check so lib info" );
}

__END__