#!/usr/bin/perl -w
use strict;
use Test::More tests => 11;
use Test::Exception;
use lib "../lib";
use_ok("Devel::PerlySense::Document");
use_ok("Devel::PerlySense::Document::Api");
use_ok("Devel::PerlySense::Document::Location");
BEGIN { -d "t" and chdir("t"); }
ok(my $oDocument = Devel::PerlySense::Document->new(oPerlySense => Devel::PerlySense->new()), "new ok");
my $dirData = "data/project-lib";
my $fileOrigin = "$dirData/Game/Lawn.pm";
my $nameModule = "Game::Lawn";
my ($object, $method, $oNodeSub);
my (@aMethod);
my $oApi;
my $oLocation;
my $rexFile = qr/.Game.Lawn.pm$/;
my @aAll = qw/
END
width
height
rhGrid
oUI
oController
rhPrize
new
oPlaceWorm
oPlacePrize
prizeWasClaimedBy
placeObjectAt
objectHasMoved
removeObject
isObjectAt
isAnythingAt
isAnythingBlockingAt
oLocationRandom
isLocationOnLawn
isLocationValidForMove
isLocationValidForPlacement
isObjectLocationValidForPlacement
oDirectionToPrize
placeObjectBodyPartAt
removeObjectBodyPartAt
wormHasCrashed
oLocation
oLawn
raBodyLocation
raBodyChar
isBlocking
color
buildBodyRight
/;
print "\n* No inheritance\n";
ok($oDocument->parse(file => $fileOrigin), "Parsed file ok");
ok($oDocument->determineLikelyApi(nameModule => $nameModule), " determineLikelyApi ok");
is($oDocument->scoreInterfaceMatch(
nameModule => $nameModule,
raMethodRequired => [qw/ fksdjf_missing_sdkfjs /],
raMethodNice => [qw/ isLocationValidForMove /]),
0, " Correct scoreInterfaceMatch for missing required");
cmp_ok($oDocument->scoreInterfaceMatch(
nameModule => $nameModule,
raMethodRequired => [qw/ isAnythingAt /],
raMethodNice => [qw/ /]),
'==', 83.84, " Correct scoreInterfaceMatch for one present required");
cmp_ok($oDocument->scoreInterfaceMatch(
nameModule => $nameModule,
raMethodRequired => [qw/ isAnythingAt wormHasCrashed /],
raMethodNice => [qw/ /]),
'==', 84.34, " Correct scoreInterfaceMatch for two present required");
cmp_ok(int($oDocument->scoreInterfaceMatch(
nameModule => $nameModule,
raMethodRequired => [qw/ isAnythingAt wormHasCrashed /],
raMethodNice => [qw/ missing_method /])),
'==', 56.00, " Correct scoreInterfaceMatch for two present required");
cmp_ok(int($oDocument->scoreInterfaceMatch(
nameModule => $nameModule,
raMethodRequired => [qw/ isAnythingAt /],
raMethodNice => \@aAll)),
'==', 100.00, " Correct scoreInterfaceMatch for full score, all present and all supported");
__END__