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 warnings;
use lib '.';
use t::Util;
use Test::More;

subtest 'ls', sub {
    my $ftp = default_mock_prepare(
        ls => sub {
            return qw(aaa bbb ccc);
        }
    );

    is_deeply([$ftp->ls], [qw(aaa bbb ccc)]);
    done_testing();
};

subtest 'dir', sub {
    my $ftp = default_mock_prepare(
        dir => sub {
            return (
                "-rw-r--r--  1 tsucchi  tsucchi  740 May 29 08:29 aaa",
                "-rwxr-xr-x  1 tsucchi  tsucchi   85 Apr 24 08:27 bbb",
                "-rwxr-xr-x  1 tsucchi  tsucchi  681 May 29 08:31 ccc",
            )
        }
    );

    my @dir_expected = (
        "-rw-r--r--  1 tsucchi  tsucchi  740 May 29 08:29 aaa",
        "-rwxr-xr-x  1 tsucchi  tsucchi   85 Apr 24 08:27 bbb",
        "-rwxr-xr-x  1 tsucchi  tsucchi  681 May 29 08:31 ccc",
    );
    is_deeply([$ftp->dir], \@dir_expected);
    done_testing();
};

subtest 'pwd', sub {
    my $ftp = default_mock_prepare(
        pwd => sub {
            return "some/dir";
        }
    );

    is($ftp->pwd, "some/dir");
    done_testing();
};

subtest 'other methods', sub {
    my @methods = all_methods_in_net_ftp();

    for my $method ( @methods ) {
        my $called_method = "";
        my $called_arg    = "";
        my $ftp = default_mock_prepare(
            $method => sub {
                my ($self, $arg) = @_;
                $called_method = $method;
                $called_arg    = $arg;
            }
        );
        {
            no strict 'refs';
            $ftp->$method("arg_for_$method");
        }
        is($called_method, $method, $method);
        is($called_arg,    "arg_for_$method", $method);
    }
    done_testing();
};

done_testing();