The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl Class-Method-Delegate.t'

#########################

# change 'tests => 1' to 'tests => last_test_to_print';

use strict;
use warnings;

use Test::More;
BEGIN { use_ok('Class::Method::Delegate') };

#########################

# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.

FROM: {
  package test_package_to_delegate_from;
  use Class::Method::Delegate;

  sub new {
    return bless {}, shift;
  }

  delegate methods => [ 'simple_string', 'with_attributes', 'return_myself' ], to => sub { test_package_to_delegate_to->new() };

}

TO: {
  package test_package_to_delegate_to;

  sub new {
    return bless {}, shift;
  }

  sub simple_string {
    return "simple_string returned a string";
  }

  sub with_attributes {
    my $self = shift;

    return @_;
  }

  sub delegated_by {
    my $self = shift;
    if(@_) {
        $self->{delegated_by} = shift;
    }
    return $self->{delegated_by};
  }

  sub return_myself {
    return shift;
  }  
}

ok my $test_package_to_delegate_from = test_package_to_delegate_from->new();

is( $test_package_to_delegate_from->simple_string(), "simple_string returned a string");
ok my @response = $test_package_to_delegate_from->with_attributes(1,2,3,5);
is( $response[0], 1);
is( $response[1], 2);
is( $response[2], 3);
is( $response[3], 5);
is( $test_package_to_delegate_from->return_myself()->delegated_by(), $test_package_to_delegate_from);

done_testing();