The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More tests => 13;

BEGIN { use_ok('IPC::Open3::Callback::Command') }

use IPC::Open3::Callback::Command
    qw(command batch_command mkdir_command pipe_command rm_command sed_command);
is( command('echo'), 'echo', 'command' );
is( command( 'echo', { hostname => 'foo' } ), 'ssh foo "echo"', 'remote command' );
is( command( 'echo', { username => 'bar', hostname => 'foo' } ),
    'ssh bar@foo "echo"',
    'remote command as user'
);
is( command( 'echo', { username => 'bar', hostname => 'foo', ssh => 'plink' } ),
    'plink -l bar foo "echo"',
    'plink command as user'
);
is( batch_command( 'cd foo', 'cd bar' ), 'cd foo;cd bar', 'batch cd foo then bar' );
is( batch_command( 'cd foo', 'cd bar', { hostname => 'baz' } ),
    'ssh baz "cd foo;cd bar"',
    'remote batch cd foo then bar'
);
is( batch_command( 'cd foo', 'cd bar', { hostname => 'baz', command_prefix => 'sudo ' } ),
    'ssh baz "sudo cd foo;sudo cd bar"',
    'remote batch sudo cd foo then bar'
);
is( mkdir_command( 'foo', 'bar', { hostname => 'baz' } ),
    'ssh baz "mkdir -p \\"foo\\" \\"bar\\""',
    'remote mkdirs foo and bar'
);
is( pipe_command( 'cat abc', command( 'dd of=def', { hostname => 'baz' } ) ),
    'cat abc|ssh baz "dd of=def"',
    'pipe cat to remote dd'
);
is( rm_command(
        'foo', 'bar', { username => 'fred', hostname => 'baz', command_prefix => 'sudo -u joe ' }
    ),
    'ssh fred@baz "sudo -u joe rm -rf \\"foo\\" \\"bar\\""',
    'remote sudo rm'
);
is( sed_command('s/foo/bar/'), 'sed -e \'s/foo/bar/\'', 'simple sed' );
is( batch_command(
        pipe_command(
            'curl http://www.google.com',
            sed_command( { replace_map => { google => 'gaggle' } } ),
            command(
                'dd of="/tmp/gaggle.com"',
                { username => 'fred', hostname => 'baz', command_prefix => 'sudo -u joe ' }
            )
        ),
        rm_command(
            '/tmp/google.com',
            { username => 'fred', hostname => 'baz', command_prefix => 'sudo -u joe ' }
        )
    ),
    'curl http://www.google.com|sed -e \'s/google/gaggle/g\'|ssh fred@baz "sudo -u joe dd of=\"/tmp/gaggle.com\"";ssh fred@baz "sudo -u joe rm -rf \"/tmp/google.com\""',
    'crazy command'
);