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

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

use File::Basename;
use Data::Dumper;

use lib "../lib";

use_ok("Devel::PerlySense::Document");
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";

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





my $fragment;

$fragment = '$oObject->oLawn';
is($oDocument->methodCallAt(row => 219, col => 17) . "", $fragment, "Correct perl fragment ok, on method");

my ($object, $method, $oLocationSub);
my (@aMethod);

ok(($object, $method, $oLocationSub) = $oDocument->aObjectMethodCallAt(row => 219, col => 17), "aObjectMethodCallAt ok");
is("$object", '$oObject', "  got oObject");
is("$method", 'oLawn', "  got method");
like($oLocationSub->rhProperty->{source}, qr/sub placeObjectAt.*?displayObjectAt/s, "  got node sub");


is_deeply(
          [ @aMethod = $oDocument->aMethodCallOf(nameObject => $object, oLocationWithin => $oLocationSub) ],
          [qw/ oLawn raBodyLocation /],
          "Found the correct method calls in the sub");


ok(($object, $method, $oLocationSub) = $oDocument->aObjectMethodCallAt(row => 572, col => 16), "aObjectMethodCallAt ok");
is("$object", '$oObject', "  got oObject");
is("$method", 'oLawn', "  got method");
like($oLocationSub->rhProperty->{source}, qr/END.*?oLawn/s, "  got node sub");


is_deeply(
          [ @aMethod = $oDocument->aMethodCallOf(nameObject => $object, oLocationWithin => $oLocationSub) ],
          [qw/ oLawn /],
          "Found the correct method calls in the sub");







__END__