use v6; use Test; =begin pod Test handling of -I. Multiple C<-I> switches are supposed to prepend left-to-right: -Ifoo -Ibar should make C<@*INC> look like: foo bar ... Duplication of directories on the command line is mirrored in the C<@*INC> variable, so C will have B entries C in C<@*INC>. =end pod # L my $fragment = '-e "@*INC.perl.say"'; my @tests = ( 'foo', 'foo$bar', 'foo bar$baz', 'foo$foo', ); plan @tests*2; diag "Running under $*OS"; my ($pugs,$redir) = ($*EXECUTABLE_NAME, ">"); if $*OS eq any { $pugs = 'pugs.exe'; $redir = '>'; }; sub nonce () { return (".{$*PID}." ~ (1..1000).pick) } sub run_pugs ($c) { my $tempfile = "temp-ex-output" ~ nonce; my $command = "$pugs $c $redir $tempfile"; diag $command; run $command; my $res = slurp $tempfile; unlink $tempfile; return $res; } for @tests -> $t { my @dirs = split('$',$t); my $command; # This should be smarter about quoting # (currently, this should work for WinNT and Unix shells) $command = join " ", map { qq["-I$_"] }, @dirs; my $got = run_pugs( $command ~ " $fragment" ); $got .= chomp; if (substr($got,0,1) ~~ "[") { # Convert from arrayref to array $got = substr($got, 1, -1); }; my @got = EVAL $got; @got = @got[ 0..@dirs-1 ]; my @expected = @dirs; is @got, @expected, "'" ~ @dirs ~ "' works"; $command = join " ", map { qq[-I "$_"] }, @dirs; $got = run_pugs( $command ~ " $fragment" ); $got .= chomp; if (substr($got,0,1) ~~ "[") { # Convert from arrayref to array $got = substr($got, 1, -1); }; @got = EVAL $got; @got = @got[ 0..@dirs-1 ]; @expected = @dirs; is @got, @expected, "'" ~ @dirs ~ "' works (with a space delimiting -I)"; } # vim: ft=perl6