#!/usr/bin/perl -w
use strict;

use Test::More tests => 23;
use Test::Exception;

use Data::Dumper;

use lib "lib";

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


my $dirData = "t/data/overview/api/lib";
my $fileOrigin = "$dirData/Game/Object/Worm.pm";


print "\n* Class\n";

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


my $oMethod;
my $method = "undeclaredMethod";

ok($oMethod = Devel::PerlySense::Document::Api::Method->new(
    oDocument => $oDocument,
    name => $method,
), "new with missing method ok");
is($oMethod->name, $method, "  name set ok");
is($oMethod->oLocationDocumented, undef, "  oLocationDocumented unknown ok");



$method = "isRealPlayer";
ok($oMethod = Devel::PerlySense::Document::Api::Method->new(
    oDocument => $oDocument,
    name => $method,
), "new with existing method ok");
is($oMethod->name, $method, "  name set ok");
isnt($oMethod->oLocationDocumented, undef, "  oLocationDocumented set ok");
is($oMethod->oLocationDocumented->row, 69, "  oLocationDocumented row correct");





diag("Rendering of method signature");


$method = "isRealPlayer";
ok($oMethod = Devel::PerlySense::Document::Api::Method->new(
    oDocument => $oDocument,
    name => $method,
), "Found method ($method)");
is($oMethod->signature, "isRealPlayer", "  Bareword method name");


$method = "oDirection";
ok($oMethod = Devel::PerlySense::Document::Api::Method->new(
    oDocument => $oDocument,
    name => $method,
), "Found method ($method)");
is($oMethod->signature, 'oDirection($direction)', "  Method name and  params");



$method = "oEventMove";
ok($oMethod = Devel::PerlySense::Document::Api::Method->new(
    oDocument => $oDocument,
    name => $method,
), "Found method ($method)");
is($oMethod->signature, 'oEventMove', '  Method name with prefix $self-> or whatever');



$method = "score";
ok($oMethod = Devel::PerlySense::Document::Api::Method->new(
    oDocument => $oDocument,
    name => $method,
), "Found method ($method)");
is($oMethod->signature, 'score( ... args ... )', '  Method name with tailing ;');





diag("Rendering of calling method signature");

$method = "score";
my $oLocation = Devel::PerlySense::Document::Location->new();
$oLocation->file($fileOrigin);
ok($oMethod = Devel::PerlySense::Document::Api::Method->new(
    oDocument => $oDocument,
    name => $method,
), "Found method ($method)");
is($oMethod->signatureCall($oLocation), '->score( ... args ... )', '  Call signature for method in current class');




$oLocation->file("$fileOrigin.another-file");
is($oMethod->signatureCall($oLocation), '\>score( ... args ... )', '  Call signature for method in other class');






__END__