Author: jkeenan
Date: Sun Jan 27 06:50:56 2008
New Revision: 25289

Added:
   branches/harness/t/pharness/03-handle_long_options.t   (contents, props 
changed)
Modified:
   branches/harness/MANIFEST
   branches/harness/lib/Parrot/Harness/Options.pm
   branches/harness/t/harness

Log:
Refactored code handling long options out of t/harness and placed it in
Parrot::Harness::Options::handle_long_options().  Added
t/pharness/03-handle_long_options.t to test this functionality.


Modified: branches/harness/MANIFEST
==============================================================================
--- branches/harness/MANIFEST   (original)
+++ branches/harness/MANIFEST   Sun Jan 27 06:50:56 2008
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Sun Jan 27 13:45:07 2008 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sun Jan 27 14:48:58 2008 UT
 #
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
@@ -3197,6 +3197,7 @@
 t/perl/README                                               []
 t/pharness/01-default_tests.t                               []
 t/pharness/02-get_test_prog_args.t                          []
+t/pharness/03-handle_long_options.t                         []
 t/pmc/addrregistry.t                                        []
 t/pmc/array.t                                               []
 t/pmc/bigint.t                                              []

Modified: branches/harness/lib/Parrot/Harness/Options.pm
==============================================================================
--- branches/harness/lib/Parrot/Harness/Options.pm      (original)
+++ branches/harness/lib/Parrot/Harness/Options.pm      Sun Jan 27 06:50:56 2008
@@ -14,9 +14,37 @@
 use strict;
 use base qw( Exporter );
 our @EXPORT = qw(
+    handle_long_options
     get_test_prog_args
 );
 
+sub handle_long_options {
+    my @argv = @_;
+    my %longopts;
+    $longopts{running_make_test} = grep { $_ eq '--running-make-test' } @argv;
+    @argv = grep { $_ ne '--running-make-test' } @argv;
+    
+    $longopts{gc_debug} = grep { $_ eq '--gc-debug' } @argv;
+    @argv = grep { $_ ne '--gc-debug' } @argv;
+    
+    $longopts{core_tests_only} = grep { $_ eq '--core-tests' } @argv;
+    @argv = grep { $_ ne '--core-tests' } @argv;
+    
+    $longopts{runcore_tests_only} = grep { $_ eq '--runcore-tests' } @argv;
+    @argv = grep { $_ ne '--runcore-tests' } @argv;
+    
+    $longopts{html} = grep { $_ eq '--html' } @argv;
+    @argv = grep { $_ ne '--html' } @argv;
+    
+    $longopts{run_exec} = grep { $_ eq '--run-exec' } @argv;
+    @argv = grep { $_ ne '--run-exec' } @argv;
+    
+    $longopts{use_test_run} = grep { $_ eq '--tr' } @argv;
+    @argv = grep { $_ ne '--tr' } @argv;
+
+    return (\%longopts, @argv);
+}
+
 sub get_test_prog_args {
     my ($optsref, $gc_debug, $run_exec) = @_;
     my %opts = %{ $optsref };

Modified: branches/harness/t/harness
==============================================================================
--- branches/harness/t/harness  (original)
+++ branches/harness/t/harness  Sun Jan 27 06:50:56 2008
@@ -93,41 +93,24 @@
 use Test::Harness();
 use Parrot::Harness::DefaultTests;
 use Parrot::Harness::Options qw(
+    handle_long_options
     get_test_prog_args
 );
 use Parrot::Harness::Smoke qw(
     generate_html_smoke_report
 );
 
-# handle the long options
-my %longopts;
-
-$ENV{RUNNING_MAKE_TEST} = grep { $_ eq '--running-make-test' } @ARGV;
[EMAIL PROTECTED] = grep { $_ ne '--running-make-test' } @ARGV;
-
-$longopts{gc_debug} = grep { $_ eq '--gc-debug' } @ARGV;
[EMAIL PROTECTED] = grep { $_ ne '--gc-debug' } @ARGV;
-
-$longopts{core_tests_only} = grep { $_ eq '--core-tests' } @ARGV;
[EMAIL PROTECTED] = grep { $_ ne '--core-tests' } @ARGV;
-
-$longopts{runcore_tests_only} = grep { $_ eq '--runcore-tests' } @ARGV;
[EMAIL PROTECTED] = grep { $_ ne '--runcore-tests' } @ARGV;
-
-$longopts{html} = grep { $_ eq '--html' } @ARGV;
[EMAIL PROTECTED] = grep { $_ ne '--html' } @ARGV;
-
-$longopts{run_exec} = grep { $_ eq '--run-exec' } @ARGV;
[EMAIL PROTECTED] = grep { $_ ne '--run-exec' } @ARGV;
-
-$longopts{use_test_run} = grep { $_ eq '--tr' } @ARGV;
[EMAIL PROTECTED] = grep { $_ ne '--tr' } @ARGV;
-
-$longopts{use_test_run} ||= $ENV{'PARROT_USE_TEST_RUN'};
+local @ARGV = @ARGV;
+my $longopts;
+($longopts, @ARGV) = handle_long_options(@ARGV);
 
 # Suck the short options into the TEST_PROG_ARGS evar:
 my %opts;
 getopts('wgjPCSefbvdr?hO:D:', \%opts);
+
+$ENV{RUNNING_MAKE_TEST} = $longopts->{running_make_test};
+$longopts->{use_test_run} ||= $ENV{'PARROT_USE_TEST_RUN'};
+
 if ($opts{'?'} || $opts{h}) {
     print <<"EOF";
 perl t/harness [options] [testfiles]
@@ -157,19 +140,19 @@
 # add -D40;  merge it with any existing -D argument
 $opts{D} = sprintf( '%x', hex(40) | (exists $opts{D} ? hex($opts{D}) : 0));
 
-my $args = get_test_prog_args(\%opts, $longopts{gc_debug}, 
$longopts{run_exec});
+my $args = get_test_prog_args(\%opts, $longopts->{gc_debug}, 
$longopts->{run_exec});
 $ENV{TEST_PROG_ARGS} = $args;
 
 # now build the list of tests to run, either from the command
 # line or from @default tests
 my @default_tests = get_default_tests(
-    $longopts{core_tests_only},
-    $longopts{runcore_tests_only}
+    $longopts->{core_tests_only},
+    $longopts->{runcore_tests_only}
 );
 
 my @tests = map { glob( $_ ) } (@ARGV ? @ARGV : @default_tests);
 
-if ($longopts{use_test_run}) {
+if ($longopts->{use_test_run}) {
     require Test::Run::CmdLine::Iface;
     my $test_run =
         Test::Run::CmdLine::Iface->new(
@@ -181,7 +164,7 @@
 
     $test_run->run();
 }
-elsif (!$longopts{html}) {
+elsif (!$longopts->{html}) {
     Test::Harness::runtests(@tests);
 } else {
     generate_html_smoke_report ( {

Added: branches/harness/t/pharness/03-handle_long_options.t
==============================================================================
--- (empty file)
+++ branches/harness/t/pharness/03-handle_long_options.t        Sun Jan 27 
06:50:56 2008
@@ -0,0 +1,69 @@
+#! perl
+# Copyright (C) 2007, The Perl Foundation.
+# $Id$
+# 03-handle_long_options.t
+
+use strict;
+use warnings;
+
+use lib qw( lib );
+#use Test::More;
+#eval {
+#    use Parrot::Config qw( %PConfig );
+#};
+#plan( skip_all => 't/harness only runs once configuration has completed' )
+#    if $@;
+#plan( tests => 16 );
+use Test::More qw( no_plan );
+use Carp;
+use Parrot::Harness::Options;
+
+my (@argv, $longopts);
[EMAIL PROTECTED] = qw(
+    -wv
+    -O2
+    --running-make-test
+    --gc-debug
+    t/postconfigure/*.t
+); # */
+
+($longopts, @argv) = handle_long_options(@argv);
+ok($longopts->{running_make_test}, "Captured long option");
+ok($longopts->{gc_debug}, "Captured long option");
+my %still_argv = map {$_, 1} @argv;
+ok($still_argv{'-wv'}, "Combined short options still present in @ARGV");
+ok($still_argv{'-O2'}, "Short options with values still present in @ARGV");
+ok($still_argv{'t/postconfigure/*.t'}, "Arguments still present in @ARGV");
+
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+03-handle_long_options.t - test Parrot::Harness::Options
+
+=head1 SYNOPSIS
+
+    % prove t/pharness/03-handle_long_options.t
+
+=head1 DESCRIPTION
+
+This file holds tests for Parrot::Harness::Options::handle_long_options().
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+Parrot::Harness::Options, F<t/harness>.
+
+=cut
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Reply via email to