#!perl

use Test::More tests => 8;

use strict;
use warnings;

BEGIN { use_ok( 'String::Interpolate::Shell', 'strinterp' ); }




{
    eval { strinterp( '${q:?Frau Blucher}', {} ) };
    my $err = $@;
    ok ( length($err), '${q:?}' );
    like ( $err, qr/^Frau Blucher/, 'error message' );
}

{
    eval { strinterp( '${a:?Frau Blucher}', { a => 1 } ) };
    my $err = $@;
    is ( $err, '', '${a:?}' );
}

{
    my $tpl = '${q}';
    my $text = strinterp( $tpl, {},
                        {
                         undef_value => 'ignore'
                        } );
    is( $text, $tpl, 'value ignore' );
}

{
    my $tpl = 'here lies ${q}';
    my $text = strinterp( $tpl, {},
                        {
                         undef_value => 'remove'
                        } );
    is( $text, 'here lies ', 'value remove' );
}

{
    eval {
        strinterp( '$q', {},
                 {
                  undef_verbosity => 'fatal'
                 } );
    };
    ok( $@ ne '', 'verbosity fatal' );
}

{
    my $error;

    open my $olderr, ">&STDERR"
      or die( "error duping stderr\n" );

    close STDERR;

    open STDERR, '>', \$error
      or die( "error reopening stderr\n" );

    eval {
        strinterp( '$q', {},
                 {
                  undef_verbosity => 'warn'
                 } );
    };
    close STDERR;

    open STDERR, '>&', $olderr;

    like( $error, qr/undefined variable: \$q/, 'verbosity warn' );

}