Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 388b017bdc
Fetching contributors…

Cannot retrieve contributors at this time

169 lines (140 sloc) 3.887 kb
use v6;
use Test;
plan 20;
BEGIN { @*INC.push: 't/spec/packages' }
use Test::Util;
# Basic functionality
is_run 'sub MAIN($x) { }; sub USAGE() { print "USAGE() called" }',
{
out => 'USAGE() called',
},
'a user-defined USAGE sub is called if MAIN dispatch fails';
is_run 'sub MAIN() { print "MAIN() called" }; sub USAGE() { print "USAGE() called" }',
{
out => 'MAIN() called',
status => 0,
},
'a user-defined USAGE sub is not called if MAIN dispatch succeeds';
is_run 'sub MAIN( $a = nosuchsub()) { }; sub USAGE { say 42 }',
{
out => '',
err => /nosuchsub/,
},
'if the MAIN dispatch results in an error, that error should be printed, not USAGE';
is_run 'sub MAIN($foo) { }',
{
err => /<< foo >>/,
out => '',
},
'auto-generated USAGE message goes to $*ERR and contains parameter name';
is_run 'sub MAIN($bar) { }',
{
out => /<< bar >>/,
},
:args['--help'],
'--help option sends auto-generated USAGE message to $*OUT';
is_run 'sub MAIN(Bool :$x) { say "yes" if $x }',
{
out => "yes\n",
err => '',
status => 0,
},
:args['--x'],
'boolean option +';
is_run 'sub MAIN(Bool :$x) { print "yes" if $x }',
{
out => "",
},
:args['--/x'],
'boolean option -';
is_run 'sub MAIN(:$x) { print $x }',
{
out => "23",
},
:args['--x=23'],
'option with value';
is_run 'sub MAIN(:xen(:$xin)) { print $xin }',
{
out => "23",
},
:args['--xin=23'],
'named alias (inner name)';
is_run 'sub MAIN(:xen(:$xin)) { print $xin }',
{
out => "23",
},
:args['--xen=23'],
'named alias (outer name)';
# RT #71366
is_run 'sub MAIN($a, :$var) { say "a: $a, optional: $var"; }',
{
err => /\-\-var/,
out => '',
},
:args['param', '--var'],
'Non Bool option last with no value';
is_run 'sub MAIN($a, Bool :$var) { say "a: $a, optional: $var"; }',
{
out => "a: param, optional: True\n",
},
:args['--var', 'param'],
'Bool option followed by positional value';
# Spacey options may be removed from core spec; for now, moving to end of tests
# (discussion starts at http://irclog.perlgeek.de/perl6/2011-10-17#i_4578353 )
#?rakudo todo 'nom regression'
#?niecza todo 'copied nom regression'
is_run 'sub MAIN(:$x) { print $x }',
{
out => "23",
},
:args['--x', '23'],
'option with spacey value';
#?rakudo todo 'nom regression'
#?niecza todo 'copied nom regression'
is_run 'sub MAIN(:xen(:$x)) { print $x }',
{
out => "23",
},
:args['--xen', '23'],
'long option with spacey value';
#?rakudo todo 'nom regression'
#?niecza todo 'copied nom regression'
is_run 'sub MAIN(:xen(:$xin)) { print $xin }',
{
out => "23",
},
:args['--xin', '23'],
'named alias (inner name) with spacey value';
#?rakudo todo 'nom regression'
#?niecza todo 'copied nom regression'
is_run 'sub MAIN(:xen(:$xin)) { print $xin }',
{
out => "23",
},
:args['--xen', '23'],
'named alias (outer name) with spacey value';
#?rakudo todo 'nom regression'
#?niecza todo 'copied nom regression'
is_run 'sub MAIN(:xen(:$x)) { print $x }',
{
out => "23",
},
:args['-x', '23'],
'short option with spacey value';
is_run 'subset Command of Str where "run";
multi MAIN(Command $c) { print 1 },
multi MAIN() { print 2 }',
{ out => "2" };
# RT #92986
is_run 'multi MAIN($) { print q[Any] }; multi MAIN(Str) { print q[Str] }',
:args['foo'],
{
out => 'Str',
},
'best multi matches (not just first one)';
is_run 'sub MAIN() { print 42 }', :args['--foo'],
{
out => '',
err => rx:i/usage/,
},
'superfluous options trigger usage message';
Jump to Line
Something went wrong with that request. Please try again.