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 => 16;
use Test::Exception;

use Data::Dumper;
use File::Basename;
use File::Spec::Functions;

use lib "../lib";

use_ok("Devel::PerlySense::Document");


BEGIN { -d "t" and chdir("t"); }


ok(my $oDocument = Devel::PerlySense::Document->new(oPerlySense => Devel::PerlySense->new()), "new ok");

my $dirData = "data/simple-lib";
my $fileOrigin = "$dirData/lib/Win32/Word/Writer.pm";

ok($oDocument->parse(file => $fileOrigin), "Parsed file ok");


is($oDocument->aNameBase() + 0, 0, "No base classes ok");



sub test_inheritance_mechanism {
    my ($file, $raBaseExpected, $mechanism) = @_;
    note("Checking that inheritance via ($mechanism) works");

    ok($oDocument = Devel::PerlySense::Document->new(oPerlySense => Devel::PerlySense->new()), "new ok");

    $dirData = "data/project-lib";
    $fileOrigin = "$dirData/$file";

    ok($oDocument->parse(file => $fileOrigin), "Parsed file ($fileOrigin) ok");

    is_deeply(
        [ sort $oDocument->aNameBase() ],
        $raBaseExpected,
        "One base class ($mechanism) ok",
    );
}

test_inheritance_mechanism("Game/Object/Worm/Bot.pm", ["Game::Object::Worm"], "use base");
test_inheritance_mechanism("Game/Object/Worm.pm",     ["Game::Object"],       "use parent");
test_inheritance_mechanism(
    "Game/Object/Worm/ShaiHulud.pm",
    ["Game::Lawn", "Game::Object::Worm"],
    '@ISA = ..., with two base classes',
);
test_inheritance_mechanism(
    "Game/Object/Worm/Shaitan.pm",
    ["Game::Lawn", "Game::Object::Worm"],
    'push @ISA, with two base classes',
);





__END__