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' );