fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / run / options.t
blobde2a946e2cd7ad22479aa5f4242d5beecfb00fb0
1 #!perl
2 # Copyright (C) 2005-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/run/options.t - test parrot command line options
9 =head1 SYNOPSIS
11     % prove t/run/options.t
13 =head1 DESCRIPTION
15 Tests C<parrot> command line options.
17 =cut
19 use strict;
20 use warnings;
21 use lib qw( lib . ../lib ../../lib );
23 use Test::More tests => 28;
24 use Parrot::Config;
25 use File::Temp 0.13 qw/tempfile/;
26 use File::Spec;
28 my $PARROT = ".$PConfig{slash}$PConfig{test_prog}";
30 # looking at the help message
31 my $help_message = `$PARROT --help`;
32 is( substr( $help_message, 0, 23 ), 'parrot [Options] <file>', 'Start of help message' );
33 ok( index( $help_message, '-t --trace [flags]' ) > 0, 'help for --trace' );
35 # setup PIR files for tests below
36 my $first_pir_file  = create_pir_file('first');
37 my $second_pir_file = create_pir_file('second');
39 # executing a PIR file
40 is( `"$PARROT" "$first_pir_file"`,  "first\n",  'running first.pir' );
41 is( `"$PARROT" "$second_pir_file"`, "second\n", 'running second.pir' );
43 # Ignore further arguments
44 is( `"$PARROT" "$first_pir_file" "$second_pir_file"`, "first\n", 'ignore a pir-file' );
45 is( `"$PARROT" "$first_pir_file" "asdf"`,             "first\n", 'ignore nonsense' );
47 # redirect STDERR to avoid warnings
48 my $redir = '2>' . File::Spec->devnull();
50 # --pre-process-only
51 # This is just sanity testing
52 my $expected_preprocesses_pir = <<'END_PIR';
54 .macro 
56 .sub main :main
58 say "first" 
60 .end
62 END_PIR
63 is( `"$PARROT" -E "$first_pir_file" $redir`, $expected_preprocesses_pir, 'option -E' );
64 is( `"$PARROT" --pre-process-only "$first_pir_file" $redir`,
65     $expected_preprocesses_pir, 'option --pre-process-only' );
67 # Test the trace option
68 is( `"$PARROT" -t "$first_pir_file" $redir`, "first\n", 'option -t' );
69 is( `"$PARROT" --trace "$first_pir_file" $redir`, "first\n", 'option --trace' );
70 is( `"$PARROT" -t "$first_pir_file" "$second_pir_file" $redir`, "second\n",
71     'option -t with flags' );
72 is( `"$PARROT" --trace "$first_pir_file" "$second_pir_file" $redir`,
73     "second\n", 'option --trace with flags' );
75 ## test the -R & --runcore options
77     my $cmd;
79     ## this test assumes these cores work on all platforms (a safe assumption)
80     for my $val (qw/ slow fast bounds trace /) {
81         for my $opt ( '-R ', '--runcore ', '--runcore=' ) {
82             $cmd = qq{"$PARROT" $opt$val "$second_pir_file" $redir};
83             is( qx{$cmd}, "second\n", "<$opt$val> option)" ) or diag $cmd;
84         }
85     }
87     $cmd = qq{"$PARROT" -D 8 -R slow "$second_pir_file" $redir};
88     is( qx{$cmd}, "second\n", "-r option <$cmd>" );
90     $cmd = qq{"$PARROT" -D 8 -R slow "$second_pir_file" 2>&1};
91     like( qx{$cmd}, qr/Parrot VM: slow core/, "-r option <$cmd>" );
94 ## TT #1150 test remaining options
96 # Test --runtime-prefix
97 like( qx{$PARROT --runtime-prefix}, qr/^.+$/, "--runtime-prefix" );
99 # clean up temporary files
100 unlink $first_pir_file;
101 unlink $second_pir_file;
103 sub create_pir_file {
104     my $word = shift;
106     my ( $fh, $filename ) = tempfile( UNLINK => 0, SUFFIX => '.pir', UNLINK => 1 );
107     print $fh <<"END_PIR";
109 .macro println(word)
110    say .word
111 .endm
113 .sub main :main
114   .println( "$word" )
115 .end
116 END_PIR
117     close $fh;
119     return $filename;
122 #make sure that VERSION matches the output of --version
123 open(my $version_fh, "<", "VERSION") or die "couldn't open VERSION: $!";
124 my $file_version = <$version_fh>;
125 chomp($file_version);
126 close($version_fh);
127 like( qx{$PARROT --version}, qr/.*${file_version}.*/, "VERSION matches --version" );
130 # Local Variables:
131 #   mode: cperl
132 #   cperl-indent-level: 4
133 #   fill-column: 100
134 # End:
135 # vim: expandtab shiftwidth=4: